SQLでは、複数のテーブルを結合してデータを取得することができます。テーブルを結合する方法には、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN(または単に OUTER JOIN)があります。
- inner join:共通キーに2つのテーブルを結合 →共通しているレコードのみ
- left join:左のテーブルのデータはすべて抽出して、右のテーブルにはないものはNULLで返される
- right join:右のテーブルのデータはすべて抽出して、左のテーブルにはないものはNULLで返される
- outer join:どちらかのテーブルにあるレコードのすべてが返される
INNER JOIN
SQLでは、複数のテーブルを結合してデータを取得することができます。テーブルを結合する方法には、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN(または単に OUTER JOIN)があります。
INNER JOIN
INNER JOINは、結合する2つのテーブルのうち、両方に共通する値のみを抽出します。
SELECT
カラム
FROM
テーブル名 A
INNER JOIN
テーブル名 B
ON
A.キー = B.キー
WHERE
条件式
# ONは「どのカラムで結合するか」を指定
# テーブル名 テーブル1 はA、テーブル名 テーブル2 はBと別名を付ける
# A.数学はtest01テーブルの数学のカラムから、B.国語は、test02テーブルの国語のカラムからデータを取得
SELECT
A.氏名,A.数学,B.国語
FROM
テーブル1 as A
INNER JOIN
テーブル2 as B
ON
A.氏名 = B.氏名
*INNER JOINはFROMとWHEREの間に記述
*テーブル名にasをつけると別名を付けることができる(このasは省略可)
別名のつけ方:テーブル名+スペース+別名
LEFT JOIN
LEFT JOINは、左側のテーブルにはあるが右側のテーブルにはない値も抽出することができます。
SELECT
カラム
FROM
テーブル名 A
LEFT JOIN
テーブル名 B
ON
A.キー = B.キー
WHERE
条件式
SELECT
*
FROM test01 A
LEFT JOIN test02 B ON A.氏名 = B.氏名
*WHEREはGROUP BYされる前のデータに抽出条件を付けくわえる
*HAVINGはGROUP BYされた後のデータに抽出条件を 付けくわえる
RIGHT JOIN
RIGHT JOINは、左側のテーブルにはないが右側のテーブルにはある値も抽出することができます。
#
SELECT *
FROM test_table01 AS A
RIGHT JOIN test_table02 AS B
ON A.氏名 = B.氏名
SELECT
*
FROM test01 t1
RIGHT JOIN test02 t2 ON t1.氏名 = t2.氏名
SELECT
*
FROM test02 t2
LEFT JOIN test01 t1 ON t2.氏名 = t1.氏名
FULL OUTER JOIN(または OUTER JOIN)
FULL OUTER JOINは、左右のテーブルにはあるが、片方だけにしかない値も抽出することができます。
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.column = table2.column;
上記の例では、table1とtable2という2つのテーブルをFULL OUTER JOINしています。左右の両方にある値だけでなく、どちらか片方にしかない値も抽出することができます。
JOIN句の表記
INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOINは、JOIN句でも表記することができます。例えば、LEFT JOINの場合は以下のようになります。
SELECT *
FROM table1
JOIN table2
ON table1.column = table2.column
LEFT JOIN table3
ON table2.column = table3.column;
上記の例では、table1とtable2をJOINし、その結果に対してtable3をLEFT JOINしています。JOIN句を組み合わせることで、複数のテーブルを結合することができます。
コメント