2
1

More than 3 years have passed since last update.

Sequelizeを使用してDBからデータを取得する時のメソッドが生成するクエリ

Last updated at Posted at 2021-08-11

初めに

Sequelizeの「findメソッド」や「sumメソッド」などのデータを取得するメソッドが、MySQLを使用した場合にどのようなクエリに変換されているかをまとめました。
Usersテーブルにあらかじめレコードを挿入してモデルを定義しており、Expressを使用した環境での調査になります。

Usersテーブル
SnapCrab_NoName_2021-8-10_16-48-10_No-00.png

環境

■ 言語
Javascript(Node.js)
■ フレームワーク
Express
■ RDBMS
MySQL
■ 使用しているパッケージの詳細

package.json
  "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
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1