NodeJS 速習チュートリアル

Node.js MySQL 結果の制限

1. 結果の制限

クエリから返されるレコード(Record)の数を制限するには、LIMIT ステートメントを使用します。

1.1 実装例:「customers」テーブルから最初の5件を取得する

以下のコードは、データベースから最初の5つのレコードのみを抽出する例です。

let mysql = require('mysql');

// データベース接続設定
let con = mysql.createConnection({
  host: "localhost",
  user: "ユーザー名",     // あなたのMySQLユーザー名
  password: "パスワード", // あなたのMySQLパスワード
  database: "mydb"      // 操作対象のデータベース名
});

con.connect(function(err) {
  if (err) throw err;
  // LIMIT句を使用して取得件数を5件に制限
  let sql = "SELECT * FROM customers LIMIT 5";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

上記の内容を demo_db_limit.js というファイル名で保存し、実行してください。

demo_db_limit.js の実行

C:\Users\Your Name>node demo_db_limit.js

実行すると、以下のように最初の5件のデータが配列形式で表示されます。

[
  { id: 1, name: 'John', address: 'Highway 71'},
  { id: 2, name: 'Peter', address: 'Lowstreet 4'},
  { id: 3, name: 'Amy', address: 'Apple st 652'},
  { id: 4, name: 'Hannah', address: 'Mountain 21'},
  { id: 5, name: 'Michael', address: 'Valley 345'}
]

2. 別の位置から開始する (OFFSET)

「3番目のレコードから始めて5件取得したい」というように、開始位置を指定してデータを取得したい場合は、OFFSET キーワードを使用します。

2.1 実装例:3番目の位置から5件取得する

let mysql = require('mysql');

let con = mysql.createConnection({
  host: "localhost",
  user: "ユーザー名",
  password: "パスワード",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  // 2件スキップ(OFFSET 2)し、そこから5件取得する
  let sql = "SELECT * FROM customers LIMIT 5 OFFSET 2";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

       注意:OFFSET 2 は、「3番目の位置から開始する」ことを意味します(インデックスが0から始まるため、0と1をスキップします)。

上記の内容を demo_db_offset.js というファイル名で保存し、実行してください。

demo_db_offset.js の実行

C:\Users\Your Name>node demo_db_offset.js

結果は以下のようになります。

[
  { id: 3, name: 'Amy', address: 'Apple st 652'},
  { id: 4, name: 'Hannah', address: 'Mountain 21'},
  { id: 5, name: 'Michael', address: 'Valley 345'},
  { id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
  { id: 7, name: 'Betty', address: 'Green Grass 1'}
]

3. 短縮構文 (Shorter Syntax)

SQLでは、LIMIT 2, 5 のように記述することも可能です。これは上記の LIMIT 5 OFFSET 2 と全く同じ結果を返します。

3.1 実装例:短縮記法による範囲指定

let mysql = require('mysql');

let con = mysql.createConnection({
  host: "localhost",
  user: "ユーザー名",
  password: "パスワード",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  // 「LIMIT 開始位置, 件数」の順で指定
  let sql = "SELECT * FROM customers LIMIT 2, 5";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

       注意: 数値の順番が入れ替わっている点に注意してください。LIMIT 2, 5LIMIT 5 OFFSET 2 と同義です。最初の数値が「スキップする数(OFFSET)」、2番目の数値が「取得する上限数(LIMIT)」となります。