💾

新卒研修で触ったクエリ文②

2021/05/01に公開

新卒研修で触ったクエリ文①

トランザクション

一括で処理を行い、完全に成功した結果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);
GitHubで編集を提案

Discussion