💾
新卒研修で触ったクエリ文②
トランザクション
一括で処理を行い、完全に成功した結果or処理が走ってなかったことにするかの2択しか返さない
BEGIN;
INSERT INTO データ SELECT * FROM テーブル WHERE 条件;
DELETE FROM テーブル WHERE 条件;
COMMIT;
- BEGIN 👉 トランザクション開始
-
COMMIT 👉 トランザクション終了
- もし処理中エラーが起こった場合、トランザクションの処理をしてなかったことにしてくれる(ROLLBACK)
テーブルの結合
テーブルとテーブルを結合させ、データを取得する
SELECT * FROM テーブル1
JOIN テーブル2
ON 条件
- JOIN 👉 どのテーブルとどのテーブルを結合させるかを記述できる
-
ON 👉 結合条件を記述できる
- 片方のテーブルにNULLのカラムがある場合そのデータは取得しない
- 条件は
テーブル1.PK =(<=,!=など) テーブル2.FK
という書き方をする
LEFT(RIGHT) JOIN テーブル2
ON 条件
- LEFT JOIN 👉 左テーブルを基準テーブルにする
-
RIGH JOINT 👉 右テーブルを基準テーブルにする
- LEFT,RIGHをつけることで基準テーブルのNULLカラムのデータを取得し、基準でないテーブルのNULLカラムは取得しない
具体例
typeテーブル
id | name |
---|---|
1 | 主食 |
2 | おかず |
3 | 汁物 |
menuテーブル
id | name | type_id |
---|---|---|
1 | ご飯 | 1 |
2 | 味噌汁 | 3 |
3 | パン | 1 |
4 | null | 4 |
SELECT * FROM type
JOIN menu
ON menu.type_id = type.id;
実行結果
id | name | type_id | id | name |
---|---|---|---|---|
1 | ご飯 | 1 | 1 | 主食 |
2 | 味噌汁 | 3 | 3 | 汁物 |
3 | パン | 1 | 1 | 主食 |
SELECT * FROM type
LEFT JOIN menu
ON menu.type_id = type.id;
実行結果
menuテーブルが基準
id | name | type_id | id | name |
---|---|---|---|---|
1 | ご飯 | 1 | 1 | 主食 |
2 | 味噌汁 | 3 | 3 | 汁物 |
3 | パン | 1 | 1 | 主食 |
4 | null | 4 | null | null |
SELECT * FROM type
RIGHT JOIN menu
ON menu.type_id = type.id;
実行結果
typeテーブルが基準
id | name | type_id | id | name |
---|---|---|---|---|
1 | ご飯 | 1 | 1 | 主食 |
2 | 味噌汁 | 3 | 3 | 汁物 |
3 | パン | 1 | 1 | 主食 |
null | null | null | 2 | おかず |
サブクエリ
条件文の中でクエリ文を書くこと
SELECT カラム1,カラム2
FROM テーブル
WHERE カラム1 <
(SELECT 関数(カラム1)
FROM テーブル AS 別名
WHERE テーブル.カラム2 = 別名.カラム2);
Discussion