朝活のブログ

朝活のアウトプットを投稿します。

サブクエリ、結合【SQL】

f:id:morning-output:20201011084239j:plain

サブクエリ

SELECT user
FROM players
WHERE score > (
 SELECT score
 FROM players
 WHERE user = "タケシ"
);

サブクエリとは、クエリの中に入っているクエリのことです。

実行順序は、「サブクエリ」→「クエリ」です。

AS

SELECT score AS "タケシの得点"
FROM players
WHERE user = "タケシ";

カラム名 AS 名前」とすることで、カラム名などに別名を定義することができます。

JOIN

SELECT *
FROM テーブルA
JOIN テーブルB
ON テーブルA.カラム名 = テーブルB.カラム名; 

JOINは、複数のテーブルを1つに結合するときに使います。

ONで条件を指定します。

▼productsテーブル ▼usersテーブル

f:id:morning-output:20201011094119p:plain f:id:morning-output:20201011094134p:plain

テーブル名を紐づけるために、外部キー主キーを使います。

上の画像では、user_idテーブルが外部キー、usersテーブルが主キーです。

実行順序は、「FROM,JOIN,ON」→「SELECT」です。

SELECT products.name, users.name
FROM products
JOIN users
ON products.user_id = users.id;

複数テーブルに同じカラムが存在するときは「テーブル名.カラム名」で指定します。

SELECT *
FROM products
JOIN users
ON products.user_id = users.id;
WHERE products.name = "タケシ";

テーブル名.カラム名」を用いたカラム指定はWHEREでも使えます。

LEFT JOIN

SELECT *
FROM products
LEFT JOIN users
ON products.user_id = users.id;

LEFT JOINは、FROMで指定したテーブルのレコードを全て取得します。

外部キーがNULLのレコードもそのまま実行結果に表示されます。

SELECT *
FROM products
JOIN users
ON products.user_id = users.id
LEFT JOIN teams
ON products.prefecture_id = teams;

JOINを複数回使用する場合でも、FROMは1回書くだけで問題ありません。

実行順序

▼全体の実行順序

  1. テーブルの指定(FROM)
  2. 結合(ON、JOIN
  3. 取得条件(WHERE)
  4. グループ化(GROUP BY)
  5. 関数(COUNT、SUM、AVG、MAX、MIN)
  6. HAVING
  7. 検索(SELECT、DISTINCT)
  8. 順序(ORDER BY)
  9. LIMIT