Node.jsのSequelizeは、JavaScriptでSQLデータベースを操作するためのORM(Object-Relational Mapping)ライブラリです。
データベースからデータを取得する際に、WHERE句やORDER句、GROUP句、ATTRIBUTES句、LIMIT句、OFFSET句などの条件を指定することで、より柔軟なデータの抽出が可能になります。
Sequelizeを使用してデータ取得の設定条件を実際のコード例とともに解説します。
WHERE句
WHERE
句は、特定の条件に基づいてデータをフィルタリングするために使用されます。
例:年齢が30歳以上のユーザーを取得する。
const { Op } = require('sequelize');
const usersAbove30 = await User.findAll({
where: {
age: {
[Op.gte]: 30,
},
},
});
console.log(usersAbove30);
Op
オブジェクトを使用して、比較演算子を指定します。
上記の例では、[Op.gte]
は「Greater Than or Equal」(以上)を意味し、年齢が30以上のユーザーを取得します。
ORDER句
ORDER
句は、結果の並び順を指定するために使用されます。
例:年齢の昇順でユーザーを取得する。
const usersOrderedByAge = await User.findAll({
order: [
['age', 'ASC'],
],
});
console.log(usersOrderedByAge);
order
オプションには、並び替えたい属性と並び順を指定する配列を渡します。
上記の例では、['age', 'ASC']
は「age」属性を昇順(小さい値から大きい値へ)で並び替えることを意味します。
GROUP句
GROUP
句は、結果をグループ化するために使用されます。
例:年齢ごとにユーザーをグループ化して取得する。
const { fn, col } = require('sequelize');
const usersGroupedByAge = await User.findAll({
attributes: ['age', [fn('COUNT', col('id')), 'count']],
group: 'age',
});
console.log(usersGroupedByAge);
attributes
オプションには、取得したい属性と、それに関連する集計関数を指定することができます。
上記の例では、COUNT
関数を使用してid
をカウントし、'count'
というエイリアス名を付けています。group
オプションには、グループ化したい属性を指定します。これにより、年齢ごとにユーザーがグループ化されます。
ATTRIBUTES句
ATTRIBUTES
句は、取得する列を指定するために使用されます。
例:名前とメールアドレスのみを取得する。
const usersWithLimitedAttributes = await User.findAll({
attributes: ['name', 'email'],
});
console.log(usersWithLimitedAttributes);
attributes
オプションには、取得したい属性名を配列で指定します。
上記の例では、['name', 'email']
を指定することで、名前とメールアドレスのみが取得されます。
LIMIT句
LIMIT句は、取得するレコードの数を指定するために使用されます。指定した数のレコードが取得され、それ以降のレコードは取得されません。
例:年齢が30歳以上のユーザーの中から上位2人を取得する。
const { Op } = require('sequelize');
const usersAbove30 = await User.findAll({
where: {
age: {
[Op.gte]: 30,
},
},
limit: 2,
});
console.log(usersAbove30);
上記の例では、limit: 2
としているため、年齢が30歳以上のユーザーのうち上位2人のみが取得されます。
OFFSET句
OFFSET句は、取得を開始する位置のインデックスを指定するために使用されます。指定したインデックスのレコードから結果が取得されます。
例:年齢が30歳以上のユーザーの中で、上位2人をスキップして、その後の2人を取得する。
const { Op } = require('sequelize');
const usersAbove30 = await User.findAll({
where: {
age: {
[Op.gte]: 30,
},
},
limit: 2,
offset: 2,
});
console.log(usersAbove30);
上記の例では、offset: 2
としているため、年齢が30歳以上のユーザーのうち上位2人をスキップして、その後の2人のデータが取得されます。