1
0

More than 1 year has passed since last update.

SQL複数テーブルのまとめ(サブクエリとJOIN)

Posted at

サブクエリ

クエリの中にクエリの中を入れられる。この中に入れたクエリを サブクエリ という。
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;
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0