表の検索(SELECT)

<内部結合(INNER JOIN)>

内部結合は、結合条件を満たすレコードのみを結合します。

SELECT 表別名1.列名1, 表別名2.列名2, ...
FROM 表名1 表別名1 INNER JOIN 表名2 表別名2 ON 表別名1.結合列名1 = 表別名2.結合列名2;

(例)
SELECT UM.伝表番号, UM.商品コード, S.商品名
FROM 売上明細 UM INNER JOIN 商品 S ON UM.商品コード = S.商品コード;

<3つの表を内部結合>

SELECT 表別名1.列名1, 表別名2.列名2, 表別名3.列名3, ...
FROM ( 表名1 表別名1 INNER JOIN 表名2 表別名2 ON 表別名1.結合列名1 = 表別名2.結合列名2)
INNER JOIN 表名3 表別名3 ON 表別名2.結合列名2 = 表別名3.結合列名3;

(例)
SELECT U.伝表番号, U.日付, U.顧客コード, UM.商品コード, S.商品名, UM.数量, UM.単価, UM.数量 * UM.単価 AS 金額
FROM ( 売上 U INNER JOIN 売上明細 UM ON U.伝表番号 = UM.伝表番号 )
INNER JOIN 商品 S ON UM.商品コード = S.商品コード;

<4つの表を内部結合>

SELECT 表別名1.列名1, 表別名2.列名2, 表別名3.列名3, ...
FROM (( 表名1 表別名1 INNER JOIN 表名2 表別名2 ON 表別名1.結合列名1 = 表別名2.結合列名2)
INNER JOIN 表名3 表別名3 ON 表別名1.結合列名1 = 表別名3.結合列名3)
INNER JOIN 表名4 表別名4 ON 表別名3.結合列名3 = 表別名4.結合列名4;


(例)
SELECT U.伝表番号, U.日付, U.顧客コード, K.氏名 UM.商品コード, S.商品名, UM.数量, UM.単価, UM.数量 * UM.単価 AS 金額
FROM (( 売上 U INNER JOIN 顧客 K ON U.顧客コード = K.顧客コード )
INNER JOIN 売上明細 UM ON U.伝表番号 = UM.伝表番号)
INNER JOIN 商品 S ON UM.商品コード = S.商品コード;

結合方法を以下のように書き換えることもできます。
以下の方法では、最初の2つの表と3つ目と4つ目の表をそれぞれ別に結合し、それぞれの結合結果を最後に結合しています。

SELECT U.伝表番号, U.日付, U.顧客コード, K.氏名 UM.商品コード, S.商品名, UM.数量, UM.単価, UM.数量 * UM.単価 AS 金額
FROM ( 売上 U INNER JOIN 顧客 K ON U.顧客コード = K.顧客コード )
INNER JOIN ( 売上明細 UM INNER JOIN 商品 S ON UM.商品コード = S.商品コード)
ON U.伝表番号 = UM.伝表番号;

<左外部結合(LEFT JOIN)>

左外部結合は、LEFT JOINキーワードで結んだ2つの表のうち、左側の表を基礎にして結合します。
左側の表からは全レコードが、右側の表からは結合条件を満たすレコードのみが結合されます。
結合相手のレコードが存在しない時、その列にはNULLが格納されます。

SELECT 表別名1.列名1, 表別名2.列名2, ...
FROM 表名1 表別名1 LEFT JOIN 表名2 表別名2 ON 表別名1.結合列名1 = 表別名2.結合列名2;

(例)
SELECT UM.伝表番号, UM.商品コード, S.商品名
FROM 売上明細 UM LEFT JOIN 商品 S ON UM.商品コード = S.商品コード;

<右外部結合(RIGHT JOIN)>

右外部結合は、RIGHT JOINキーワードで結んだ2つの表のうち、右側の表を基礎にして結合します。
右側の表からは全レコードが、左側の表からは結合条件を満たすレコードのみが結合されます。
結合相手のレコードが存在しない時、その列にはNULLが格納されます。

SELECT 表別名1.列名1, 表別名2.列名2, ...
FROM 表名1 表別名1 RIGHT JOIN 表名2 表別名2 ON 表別名1.結合列名1 = 表別名2.結合列名2;

(例)
SELECT UM.伝表番号, UM.商品コード, S.商品名
FROM 売上明細 UM RIGHT JOIN 商品 S ON UM.商品コード = S.商品コード;

<完全外部結合(FULL OUTER JOIN)>

完全外部結合は、FULL OUTER JOINキーワードで結んだ2つの表の全レコードを結合します。
結合相手のレコードが存在しない時、その列にはNULLが格納されます。

SELECT 表別名1.列名1, 表別名2.列名2, ...
FROM 表名1 表別名1 FULL OUTER JOIN 表名2 表別名2 ON 表別名1.結合列名1 = 表別名2.結合列名2;

(例)
SELECT UM.伝表番号, UM.商品コード, S.商品名
FROM 売上明細 UM FULL OUTER JOIN 商品 S ON UM.商品コード = S.商品コード;

<交差結合(CROSS JOIN)>

交差結合(直積)は、CROSS JOINキーワードで結んだ2つの表のすべてのレコードが結合されます。
通常は、WHERE句を使って抽出します。

SELECT 表別名1.列名1, 表別名2.列名2, ...
FROM 表名1 表別名1 CROSS JOIN 表名2 表別名2;

(例)
SELECT UM.伝表番号, UM.商品コード, S.商品名
FROM 売上明細 UM CROSS JOIN 商品 S;

(2004/10 作成)