プログラミングの勉強日記
2020年6月16日 Progate Lv.111
SQLⅢ
サブクエリ
クエリの中に他のクエリを入れることができる。この他のクエリのことをサブクエリという。2つ以上のクエリお1つにまとめることができるので、より複雑なデータを取得するときに使われる。サブクエリは()
(括弧)を囲むことで作ることができる。()内にセミコロンは不要(セミコロンはクエリの最後のみでいい)
-- 1.Makeの得点を取得する
SELECT goals FROM players WHERE name="Make";
-- 2.取得した結果を自分で入力する
SELECT name FROM players WHERE goals > 15;
-- 2.サブクエリが実行されたあとに外側にあるクエリが実行される
SELECT name
FROM players
-- 1.サブクエリでMakeの得点を取得している
WHERE goals > (
SELECT goals
FROM players
WHERE name="Make"
);
AS
カラム名などに別の名前を定義することができる。カラム名 AS "名前"
でカラム名に定義する名前を指定する。
SELECT goals AS "Makeの得点" FROM players WHERE name="Make";
テーブルを紐づける
テーブルを紐づけるには外部キーと主キーを使う。外部キーで他のテーブルにある主キーを指定することで、テーブル同士を紐づけることができる。
メリット:データの管理がしやすい
JOIN
複数のテーブルを1つに結合したいときに使う。ON
で条件を指定して、テーブルAにテーブルBを結合する。結合したテーブルは1つのテーブルとしてデータを取得できる。外部キーがNULLのレコードは実行結果に表示されない。
複数のテーブルをJOINすることも可能で、JOINを1つのクエリで複数回使える。ただし、その場合でもFROMは一度だけでよい。
SELECT *
FROM テーブルA
JOIN テーブルB
ON 結合条件(テーブル名.カラム名 = テーブル名.カラム名);

-- 2. 結合された後にSELECTの実行
SELECT *
-- 1. テーブルを結合する
FROM players
JOIN countries
--county_id:外部キー countries.id:主キー
ON players.country_id=countries.id;
複数テーブルでのカラムの指定
複数のテーブルに同じカラム名が存在するときは、テーブル名.カラム名
で指定する。
SELECT players.name, countries.name
FROM players
JOIN countries
ON players.country_id=countries.id
WHERE players.name="タクヤ";
LEFT JOIN
FROMで指定したテーブルのコードを全て取得する。外部キーがNULLのコードもNULLのまま実行結果に表示される。
SELECT *
FROM players
LEFT JOIN teams --もととなるテーブルのレコードを全て取得。
ON players.team_id=team.id;