【初心者用】SQLのクエリ操作基礎4

タイトル通りですが、SQL初心者がクエリ操作に関して学んだことまとめていきます。

操作方法について忘れていることが分からないことが多いので、基礎を学んでいきます。

1. クエリ操作について


タイトル通りですが、SQL初心者がクエリ操作に関して学んだことまとめていきます。

操作方法について忘れていることが分からないことが多いので、基礎を学んでいきます。

1-1. サブクエリとは

SQLではクエリの中にクエリを入れることができ、この中に入れているクエリを「サブクエリ」と言います。

この作業をすることで「2つ以上のクエリを1つにまとめる」ことができるので、複雑な命令になった場合に使用されます。
 

例 

  SELECT 人物名が入っているカラム名
     FROM テーブル名1
   WHERE 得点が入っているカラム名 > (
    SELECT 得点が入っているカラム名
  FROM テーブル名1
   WHERE 人物名が入っているカラム名 = "ウィル"
  );

※サブクエリでウィルの得点数を取得し、それを元にウィルよりも多く得点を持っている選手を割り出しています。

◆サブクエリの記述方法

「()」で囲むことによりサブクエリを使用することができます。

サブクエリの記述自体は通常のクエリの記述と変わりませんが、サブクエリの「()」の中には「;」は不要となっています。

「:」はクエリの記述が終わる最後にのみ記述が必要です。

◆サブクエリの実行順番

サブクエリを含むクエリの場合は、サブクエリが実行された後に一番上のクエリが実行されます。
  

例 

  SELECT 人物名が入っているカラム名
       FROM テーブル名1        (※←サブクエリの結果を用いて条件を指定している)
     WHERE 得点が入っているカラム名 > (※↓サブクエリでウィルの得点を取得して使用
  SELECT 得点が入っているカラム名
       FROM テーブル名1
        WHERE 人物名が入っているカラム名 = "ウィル"
        );

1-2. ASの使用方法

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

「カラム名 AS "名前"」でカラム名に定義する名前を指定します。




SELECT goals AS "カラム名再定義"
     FROM テーブル名
   WHERE カラム名 = "条件";

1-3. テーブルを紐づける

◆テーブルが紐づく仕組み

テーブルを紐づけるために「外部キー」と「主キー」を使用して、「外部キー」で他のテーブルにある「主キー」を指定することでテーブル同士を紐づけることができます。

◆テーブルを紐づけるメリット

テーブルを紐づけるメリットとしては、複数テーブルを紐づけることでデータの管理がしやすい点があります。

外部キーを使用して紐づけておけば、値が変動した場合に複数個所変更する必要がなく、主キーが設定されているテーブルを修正するだけで済みます。

1-4. テーブルの結合

◆JOIN

「JOIN」は複数テーブルを1つにまとめる際に使用して、「ON」で条件を指定してテーブルAとテーブルBを結合します。

結合したテーブルは1つのテーブルとしてデータを取得することができます。




   SELECT カラム名
   FROM テーブル名A
   JOIN テーブル名B
   ON 結合条件

◆結合条件

結合条件は「ON テーブル名.カラム名 = テーブル名.カラム名」で指定することができます。




   SELECT カラム名
   FROM テーブルA
   JOIN テーブルB
   ON テーブルA.カラム名 = テーブルB.カラム名
          ↑外部キー     ↑主キー

◆JOINの実行順序

JOINを使用しているクエリでは、最初にJOINが実行されて結合を行い、結合されたテーブルに対してSELECTが実行されます。




   SELECT カラム名 ←②結合された後にSELECTの処理が実行される
   FROM テーブル名A ←①テーブルの結合から始める
   JOIN テーブル名B
   ON テーブル名A.カラム名 = テーブル名B,カラム名

1-5. 複数テーブルでのカラム指定

複数テーブルに同じカラム名が存在する際には、「テーブル名.カラム名」で指定する必要があります。

結合したテーブルと同名のカラムがある場合は、それぞれの「テーブル名.カラム名」で指定して使用します。




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

◆WHEREを使用した複数テーブルのカラム指定

「テーブル.カラム名」を用いたカラム指定は、WHEREと併用して使用することができます。

ですが、複数テーブルを扱う際には異なるテーブルで、同名のカラムが存在する場合があるので注意する必要があります。




  SELECT カラム名
  FROM テーブル名A
  JOIN テーブル名B
  ON テーブル名A.カラム = テーブル名B.カラム
  WHERE テーブル名A.カラム = "指定文字";

◆全体の実行順序の確認

「GROUP BY」も含んだ場合の実行順序を以下で確認します。

SQLのデータ取得ではテーブルを作成してから検索を行うので、FROM・JOINが先に実行されるので注意が必要です。




テーブルの指定→結合→取得条件→グループ化→関数→HAVING→検索→順序→LIMIT
FROM→ON・JOIN→WHERE→GROUP BY→COUNT・SUM・AVG・MIN→HAVING→SELECT・DISTINCT→ORDER BY→LIMIT

◆NULLを含んだ場合の実行結果

JOINを使用した結合はFROMで指定したテーブルを基準に実行されます。

ですが、外部キーが「NULL」のレコードは実行結果に表示されます。




   SELECT カラム名
   FROM テーブル名A
   JOIN テーブル名B
   ON テーブルA.外部キーのカラム名 = テーブルB.主キーカラム名;

1-6. LEFT JOINとは

「LEFT JOIN」を使用することで、FROMで指定したテーブルのレコードをすべて取得することができます。

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




  SELECT カラム名
  FROM テーブル名A
  LEFT JOIN テーブル名B (←LEFT JOINを使用することで、元のテーブルのレコードをすべて取得する)
  ON テーブル名A.外部キーカラム名 = 主キーカラム名;

1-7. 複数テーブルのJOIN

JOINは1つのクエリに対して複数回使用でき、JOINを複数回使用してもFROMの記述は1度だけで大丈夫です。

 


  SELECT カラム名
  FROM テーブル名A
  JOIN テーブル名B
  ON テーブル名A.外部キーカラム名 = テーブル名B.主キーカラム名
  LEFT JOIN テーブル名C
  ON テーブル名A.外部キーカラム名 = テーブル名C.主キーカラム名