見出し画像

sequelizeでデータベースを操作する:SQLと見比べながら

はじめに

こんにちは、SHIFT の開発部門に所属しているmurasawaです。今期よりSHIFTへ中途入社し、バックエンド関連の開発を担当しています。

現在、研修でデータベースやRestAPIについて基本的な事から学んでいます。学んだことをアウトプットすることで理解を深めていくとともに、技術の共有としてもお役に立てれば幸いです。

本記事ではsequelizeでデータベースを操作する際の基本構文を調べるついでに、 それに対応するSQL文を自分なりに調べ対応関係をまとめたいと思います。

※あくまで個人レベルで同じような動作をするSQLを確認して記述しているので、非効率であったり間違っている場合がありますのでコメントなどしていただければ幸いです。

SELECT

sql文のSELECTに当たる操作

findAll()

全行を取得

SQL

SELECT * FROM table_name;

に当たる操作

sequelize

model.table_name.findAll();

もちろんwhere句を使って絞り込みも可能

SQL

SELECT * FROM table_name where name in ('Alice','John');

に当たる操作

sequelize

model.findAll( { where: { name: ['Alice','John'] } });


findByPk()

主キー(id)を使って該当するデータを取得

SQL

SELECT * FROM table_name where id = 1;

に当たる操作。

sequelize

model.findByPk(1);

findOne()

条件に該当する最初のデータを取得

SQL

SELECT * FROM table_name where name = 'Alice' LIMIT 1;

に当たる操作。

sequelize

model.findOne({ where: { name: 'Alice' } });


findOrCreate()

該当するデータがなければ作成。
この操作はsqlでは一行ではできないようです。

SQL

INSERT INTO table_name (name、email, password)
SELECT 'Alice','Alice@example.com','Alicepassword'
WHERE NOT EXISTS (SELECT 1 FROM table_name WHERE name = 'Alice');

SELECT * FROM table_name WHERE name = 'Alice'; 

に当たる操作。

sequelize

model.findOrCreate({
 where: { name: 'Alice' },
 defaults: { 
   name: 'Alice',
   email: 'Alice@example.com',
   password: 'Alicepassword'
 }

INSERT

sql文のINSERTに当たる操作

Create()

データを1行追加する

SQL

INSERT INTO table_name(name、email, password) VALUES('Alice','Alice@example.com','Alicepassword');

に当たる操作。

sequelize

model.create({
 name: 'Alice',
 email: 'Alice@example.com',
 password: 'Alice-password'
});

bulkCreate()

複数のデータを追加する。

SQL

INSERT INTO table_name
 (name, email, password)
VALUES 
 ('Alice', 'Alice@example.com', 'Alice_password'),
 ('John', 'John@example.com', 'John_password'),
 ('Mikel', 'Mikel@example.com', 'Mikel_password');

に当たる操作。

sequelize

model.bulkCreate([
 {'Alice', 'Alice@example.com', 'Alice_password'},
 {'John', 'John@example.com', 'John_password'},
 {'Mikel', 'Mikel@example.com', 'Mikel_password'}
]);

UPDATE

sql文のUPDATEに当たる操作

update()

条件に合うデータを更新する。

SQL

UPDATE table_name SET name = 'Alice', email = 'Alice@example.com WHERE id = 1;

に当たる操作。

sequelize

model.update(
 { name: 'Alice', email: 'Alice@example.com' },
 { where: { id: 1 } }
);

save()

SQL
適切なSQLは見いだせませんでした。
SQLを実行するコード内などで処理する必要がありそうです。

sequelize
sequelizeではfindOneなどで取得していた値をsava()によって更新できます。

const users = model.findOne(where: { id: 1 })

users.user_name = 'Alice';
users.email = 'Alice@example.com';
users.save();

DELETE

sql文のDELETEに当たる操作

destroy()

条件に当てはまるデータを削除する

SQL

DELETE FROM table_name WHERE id = 1;

に当たる操作。

sequelize

model.destroy({
 where: {
   id: 1
 }
})

findOneなどですでに取得済みの場合

SQL
適切なSQLは見いだせませんでした。
SQLを実行するコード内などで処理する必要がありそうです。

sequelize

const users = model.findOne(where: { id: 1 })

users.destroy();

終わりに

今回、何気なく使っているsequlizeの操作に該当するSQLを自分なりに考えてみて、 すぐに思いつかないものやスムーズにできないもの等あり、勉強になりました。

ただ便利だからと使うのではなく背景にある操作もしっかり理解し、身に着けていきたいと感じました。

間違い等、ほかに良いSQL等あればコメントいただければ幸いです。

__________________________________

執筆者プロフィール:Satoshi Murasawa
前社ではRPAツールの技術サポート、開発を1年半経験。 SHIFTでは、バックエンドエンジニアとして入社し、node.jsやmysqlに触れはじめた。
DBに漠然とした興味があり、勉強して部の中でDB関連で役割を持つことができたらよいなと思っています。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!