初めに
Sequelizeの「findメソッド」や「sumメソッド」などのデータを取得するメソッドが、MySQLを使用した場合にどのようなクエリに変換されているかをまとめました。
Usersテーブルにあらかじめレコードを挿入してモデルを定義しており、Expressを使用した環境での調査になります。
環境
■ 言語
Javascript(Node.js)
■ フレームワーク
Express
■ RDBMS
MySQL
■ 使用しているパッケージの詳細
"dependencies": {
"express": "~4.16.1",
"mysql2": "^2.3.0",
"sequelize": "^6.6.5"
}
■ 使用するソースコード
db.User.[各メソッド].then(result =>{
console.log(JSON.stringify(result))
})
//取得結果はthenメソッドのresultという引数の値を参照しています。
※[各メソッド]という箇所に、以下に記述しているメソッド(findAllやfindOneなど)が入ります。
findAllメソッド
テーブルにある全てのレコードを取得します。
SELECT `id`, `name`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `User`;
[{"id":1,"name":"たかし","age":16,"createdAt":"2021-07-29T08:42:14.000Z","updatedAt":"2021-07-30T08:42:14.000Z"},{"id":2,"name":"花子","age":17,"createdAt":"2021-08-29T08:42:14.000Z","updatedAt":"2021-08-30T08:42:14.000Z"}]
findOneメソッド
LIMIT句を使用して、1つのレコードを取得します。
SELECT `id`, `name`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `Users` LIMIT 1;
{"id":1,"name":"たかし","age":16,"createdAt":"2021-07-29T17:42:14.000Z","updatedAt":"2021-07-30T17:42:14.000Z"}
countメソッド
テーブルのレコードの数を取得します。
SELECT count(*) AS `count` FROM `Users` AS `Users`;
2
findByPkメソッド
idカラムの値を指定して取得します。
今回はidカラムが1の値を取得します。
SELECT `id`, `name`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `Users` WHERE `Users`.`id` = 1;
{"id":1,"name":"たかし","age":16,"createdAt":"2021-07-29T17:42:14.000Z","updatedAt":"2021-07-30T17:42:14.000Z"}
findAndCountAllメソッド
countメソッドとfindAllメソッドを合わせたメソッドです。
countメソッドの結果は、"count"キーの値としてオブジェクトに格納されます。
findAllメソッドの結果は、配列形式で"rows"キーの値として格納されます。
SELECT count(*) AS `count` FROM `Users` AS `Users`;
SELECT `id`, `name`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `Users`;
{"count":2,"rows":[{"id":1,"name":"たかし","age":16,"createdAt":"2021-07-29T17:42:14.000Z","updatedAt":"2021-07-30T17:42:14.000Z"},{"id":2,"name":"花子","age":17,"createdAt":"2021-08-29T17:42:14.000Z","updatedAt":"2021-08-30T17:42:14.000Z"}]}
sumメソッド
引数で指定したカラムの合計値を取得します。
今回は、sumメソッドの引数を「"age"」として、Usersテーブルの2人の年齢を合計した値を取得します。
SELECT sum(`age`) AS `sum` FROM `Users` AS `Users`;
33