サブクエリ
クエリの中にクエリの中を入れられる。この中に入れたクエリを サブクエリ という。
2つ以上のクエリを1つにまとめられる。
例えば、1. ドレスシャツの価格を取ってきて、
SELECT price
FROM closet
WHERE name = "ドレスシャツ";
出力したドレスシャツの価格:4000
2.自分で取ってきた値を入力する。
SELECT price
FROM closet
WHERE price > 4000; --取ってきたドレスシャツの価格
という二度手間を、以下のように一つにまとめられる。
SELECT price
FROM closet
WHERE price > ( --この括弧内がサブクエリ(ドレスシャツの価格:4000)
SELECT price
FROM closet
WHERE name = "ドレスシャツ"
);
サブクエリ内にセミコロンはいらない。
実行順序は、()の中のサブクエリが先。
AS
AS
はデータを読みやすくするのに使われる。
SELECT
内のカラム名につける。
構文はカラム名 AS "名前"
で、カラム名を"名前"に変えられる。
SELECT price AS "ドレスシャツの価格" --実行結果のカラム表示がpriceから"ドレスシャツの価格"に変更される。
FROM closet
WHERE price = "ドレスシャツ";
実行結果 priceがドレスシャツの価格に変わっている。
ドレスシャツの価格 |
---|
4000 |
複数のテーブルを扱う。
紐付けのメリットは、たくさんあるカラムの情報を一つにまとめた別テーブルがあることで、変更が容易になる。
JOIN 結合
JOIN
で、複数のテーブルを1つに結合する。
ON
で、どうやって結合するか決める。
構文:ON テーブルA.カラム名 = テーブルB.カラム名
例えば、以下のON
では、closetテーブルのbrand_id(外部キー)と、
brandsテーブルのid(主キー)で紐付けている。
SELECT *
FROM closet
JOIN brands
ON closet.brand_id = brands.id;
JOIN
の実行順は、1.結合、2.SELECT
実行。
複数のテーブルに同じカラム名があるときはテーブル名.カラム名
で指定。
SELECT closet.name, brands.name --テーブル名.カラム名
FROM closet
JOIN brands
ON closet.brand_id = brands.id;
テーブル名.カラム名
はWHERE
でも使える。
SELECT closet.name, brands.name --テーブル名.カラム名
FROM closet
JOIN brands
ON closet.brand_id = brands.id;
WHERE closet.name = "ドレスシャツ";
全ての実行順 上から実行
操作 | SQL |
---|---|
テーブルの指定 | FROM |
結合 | JOIN ON |
テーブル全体での絞り込み | WHERE |
グループ化 | GROUP BY |
集計関数 | COUNT SUM AVG MAX ... |
グループ化後の絞り込み | HAVING |
カラムを決める | SELECT DITINCT |
並べ替え | ORDER BY |
いくつまで | LIMIT |
LEFT JOIN
JOIN
するとき、外部キーがNULL
は飛ばされる。
NULL
も含める時、LEFT JOIN
を使う。
SELECT closet.name, brands.name --テーブル名.カラム名
FROM closet
LEFT JOIN shops
ON closet.shop_id = shops.id;
複数テーブルをJOIN
JOIN
は1つのクエリで何回も使える。FROM
は1つ。結合元は1つなので。
SELECT closet.name, brands.name --テーブル名.カラム名
FROM closet
JOIN brands
ON closet.brand_id = brands.id;
LEFT JOIN shops
ON closet.shop_id = shops.id;