SQL道場 テーブル(表)とテーブル(表)を結合する方法
テーブル同士の結合を行うINNER JOIN句(内部結合)、外部結合を行うLEFT OUTER JOIN句(左側外部結合)、RIGHT OUTER JOIN句(右側外部結合)、FULL OUTER JOIN句(完全外部結合)、自己結合の使用方法を解説。
環境
使用ツール:Microsoft SQL Server Management Studio MySQL Workbench
テーブル設計図
SQLServer
MySQL
内部結合(INNER JOIN句)
対応:SQL Server MySQL Oracle PostgreSQL DB2 Access ANSI
基本
内部結合を行うことにより結合列の値が一致する行を1行にして表示します。例えば、得意先マスタテーブルと売上テーブルがあったとして、売上テーブルの得意先CDと得意先マスタテーブルの得意先CDがマッチしたレコードを結合して表示します。主にテーブル間の関係が1対1の関係が成り立っているときに使用します。1対1の関係が成り立っていない場合は、重複のレコードが返されます。
SELECT文の中にいくつでも「INNER JOIN句」を使用することができます。また、結合条件はON句の後に指定します。結合条件は「AND演算子」や「OR演算子」で複数指定することができます。「INNER JOIN句」を使用した場合、FROM句や「INNER JOIN句」の後に指定するテーブル名に別名を付けます。別名は必ず指定する必要はありませんが一般的には別名を指定します。また、複数テーブルを結合する場合、テーブル名が重複してエラーを起こすこともありますので、別名は付けたほうがベターです。
構文
/* 全列表示 */
SELECT
*
FROM テーブル名 AS 表名1
INNER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
/* 特定列のみ表示 */
SELECT
表名1.カラム,
表名2.カラム,
・
・
・
FROM テーブル名 AS 表名1
INNER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
ON句の条件の後に、データを絞り込むための条件を指定することもできます。
SELECT
*
FROM テーブル名 AS 表名1
INNER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列 AND 表名1.列 = 値
;
実行結果
「DT_PROCEEDS(売上テーブル)」と「MST_CUSTOME(得意先マスタテーブル)」を得意先CDで内部結合して、売上テーブルに存在するレコード+得意先レコードを結合して出力するサンプルになります。
得意先マスタテーブル
ID | CT_NAME (得意先名) | CT_NAME_KANA (得意先カナ) | CT_ZIPCD (郵便番号) | CT_ADDRESS (住所) | CT_TEL (電話番号) | CT_ESTABLISHMENT (設立日) | CT_FAX (FAX番号) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|
1 | すなりん商事 | すなりんしょうじ | 9999999 | 東京都町田市 | 030666999 | 2020-01-01 | 030666998 | 1 |
2 | 浜田株式会社 | はまだかぶしきかいしゃ | 9999998 | 茨木県都杉並町 | 0292229999 | 1990-01-01 | 0292229998 | 1 |
3 | ほしの有限会社 | ほしのゆうげんかいしゃ | 9999997 | 青森県青森市 | 0179991111 | 1800-12-15 | 0179991110 | 1 |
4 | いかぶし株式会社 | いかぶしかぶしきかいしゃ | 9999996 | 福岡県糸田町 | 0947991111 | 2000-09-01 | 0947991110 | 1 |
5 | さめはだ有限会社 | さめはだゆうげんかいしゃ | 9999995 | 沖縄県那覇市 | 0989991111 | 2021-05-23 | 0989991110 | 1 |
売上テーブル
SLIPNO (伝票番号) | EMP_ID (担当者CD) | CT_ID (得意先CD) | PR_ORDERDATE (受注日) | PR_PRODUCT_CD (商品CD) | PR_PRODUCT_NAME (商品名) | PR_UNITPRICE (単価) | PR_QUANITY (数量) | PR_TAX (消費税) | PR_TOTAL (合計金額) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 2022-12-20 | 100 | 湯沸器 | 5000 | 1500 | 6500 | 1 |
2 | 2 | 2 | 2 | 2022-12-21 | 200 | ガス検知器 | 20000 | 2000 | 22000 | 1 |
SQL Server
/* 得意先マスタテーブルと売上テーブルを内部結合 */
SELECT
*
FROM [SampleDB].[dbo].[DT_PROCEEDS] AS DT_PROCEEDS
INNER JOIN [SampleDB].[dbo].[MST_CUSTOME] AS MST_CUSTOME ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID;
MySQL
/* 得意先マスタテーブルと売上テーブルを内部結合 */
SELECT
*
FROM testdb.DT_PROCEEDS AS DT_PROCEEDS
INNER JOIN testdb.MST_CUSTOME AS MST_CUSTOME ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID;
特定の条件にマッチするレコード抽出
「DT_PROCEEDS(売上テーブル)」と「MST_CUSTOME(得意先マスタテーブル)」を得意先CDで内部結合して、売上テーブルに存在するレコード+得意先レコードを結合して出力します。さらにINNER JOIN句に対してWHERE句的な使用方法ができます。ここでは、売上テーブルから有効区分が有効なレコードのみ抽出しています。
表示結果は、伝票番号1のレコードが表示されます。
「DT_PROCEEDS(売上テーブル)」と「MST_CUSTOME(得意先マスタテーブル)」を得意先CDで内部結合して、売上テーブルに存在するレコード+得意先レコードを結合して出力します。さらにINNER JOIN句に対してWHERE句的な使用方法ができます。ここでは、売上テーブルから有効区分が有効なレコードのみ抽出しています。
表示結果は、伝票番号1のレコードが表示されます。
得意先マスタテーブル
ID | CT_NAME (得意先名) | CT_NAME_KANA (得意先カナ) | CT_ZIPCD (郵便番号) | CT_ADDRESS (住所) | CT_TEL (電話番号) | CT_ESTABLISHMENT (設立日) | CT_FAX (FAX番号) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|
1 | すなりん商事 | すなりんしょうじ | 9999999 | 東京都町田市 | 030666999 | 2020-01-01 | 030666998 | 1 |
2 | 浜田株式会社 | はまだかぶしきかいしゃ | 9999998 | 茨木県都杉並町 | 0292229999 | 1990-01-01 | 0292229998 | 1 |
3 | ほしの有限会社 | ほしのゆうげんかいしゃ | 9999997 | 青森県青森市 | 0179991111 | 1800-12-15 | 0179991110 | 1 |
4 | いかぶし株式会社 | いかぶしかぶしきかいしゃ | 9999996 | 福岡県糸田町 | 0947991111 | 2000-09-01 | 0947991110 | 1 |
5 | さめはだ有限会社 | さめはだゆうげんかいしゃ | 9999995 | 沖縄県那覇市 | 0989991111 | 2021-05-23 | 0989991110 | 1 |
売上テーブル
SLIPNO (伝票番号) | EMP_ID (担当者CD) | CT_ID (得意先CD) | PR_ORDERDATE (受注日) | PR_PRODUCT_CD (商品CD) | PR_PRODUCT_NAME (商品名) | PR_UNITPRICE (単価) | PR_QUANITY (数量) | PR_TAX (消費税) | PR_TOTAL (合計金額) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 2022-12-20 | 100 | 湯沸器 | 5000 | 3 | 1500 | 6500 | 1 |
2 | 2 | 2 | 2022-12-21 | 200 | ガス検知器 | 20000 | 1 | 2000 | 22000 | 0 |
SQL Server
/* 得意先マスタテーブルと売上テーブルを内部結合 */
SELECT
*
FROM [SampleDB].[dbo].[DT_PROCEEDS] AS DT_PROCEEDS
INNER JOIN [SampleDB].[dbo].[MST_CUSTOME] AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
AND DT_PROCEEDS.ENABLE = '1';
MySQL
/* 得意先マスタテーブルと売上テーブルを内部結合 */
SELECT
*
FROM testdb.DT_PROCEEDS AS DT_PROCEEDS
INNER JOIN testdb.MST_CUSTOME AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
AND DT_PROCEEDS.ENABLE = '1';
特定のカラムのみ表示する
*(アスタリスク)を使用するとすべての列が表示されてしまい可読性が悪いときがあります。その時は、特定の列のみ表示することができます。
得意先マスタテーブル
ID | CT_NAME (得意先名) | CT_NAME_KANA (得意先カナ) | CT_ZIPCD (郵便番号) | CT_ADDRESS (住所) | CT_TEL (電話番号) | CT_ESTABLISHMENT (設立日) | CT_FAX (FAX番号) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|
1 | すなりん商事 | すなりんしょうじ | 9999999 | 東京都町田市 | 030666999 | 2020-01-01 | 030666998 | 1 |
2 | 浜田株式会社 | はまだかぶしきかいしゃ | 9999998 | 茨木県都杉並町 | 0292229999 | 1990-01-01 | 0292229998 | 1 |
3 | ほしの有限会社 | ほしのゆうげんかいしゃ | 9999997 | 青森県青森市 | 0179991111 | 1800-12-15 | 0179991110 | 1 |
4 | いかぶし株式会社 | いかぶしかぶしきかいしゃ | 9999996 | 福岡県糸田町 | 0947991111 | 2000-09-01 | 0947991110 | 1 |
5 | さめはだ有限会社 | さめはだゆうげんかいしゃ | 9999995 | 沖縄県那覇市 | 0989991111 | 2021-05-23 | 0989991110 | 1 |
売上テーブル
SLIPNO (伝票番号) | EMP_ID (担当者CD) | CT_ID (得意先CD) | PR_ORDERDATE (受注日) | PR_PRODUCT_CD (商品CD) | PR_PRODUCT_NAME (商品名) | PR_UNITPRICE (単価) | PR_QUANITY (数量) | PR_TAX (消費税) | PR_TOTAL (合計金額) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 2022-12-20 | 100 | 湯沸器 | 5000 | 3 | 1500 | 6500 | 1 |
2 | 2 | 2 | 2022-12-21 | 200 | ガス検知器 | 20000 | 1 | 2000 | 22000 | 0 |
SQL Server
/* 得意先マスタテーブルと売上テーブルを内部結合 */
SELECT
DT_PROCEEDS.SLIPNO
,MST_CUSTOME.CT_NAME
,DT_PROCEEDS.PR_PRODUCT_NAME
FROM [SampleDB].[dbo].[DT_PROCEEDS] AS DT_PROCEEDS
INNER JOIN [SampleDB].[dbo].[MST_CUSTOME] AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
;
MySQL
/* 得意先マスタテーブルと売上テーブルを内部結合 */
SELECT
DT_PROCEEDS.SLIPNO
,MST_CUSTOME.CT_NAME
,DT_PROCEEDS.PR_PRODUCT_NAME
FROM testdb.DT_PROCEEDS AS DT_PROCEEDS
INNER JOIN testdb.MST_CUSTOME AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
;
左側外部結合(LEFT OUTER JOIN句)
対応:SQL Server MySQL Oracle PostgreSQL DB2 Access ANSI
基本
「LEFT OUTER JOIN」は2つのテーブルをキーで結合します。INNER JOIN句(内部結合)と異なる点は、FROMで指定したテーブルは全レコードが表示されます。LEFT OUTER JOINは、FROM句で指定したテーブルにマッチする結合条件のみレコードを結合します。
また、LEFT OUTER JOIN句とFROM句で指定したテーブルにマッチしない場合でも、FROM句側のテーブルのレコードは全件表示します。その場合、FROM句側のテーブルとマッチしないLEFT OUTER JOIN側の列はNULLで表示されます。
構文
SELECT
*
FROM テーブル名 AS 表名1
LEFT OUTER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
SELECT
*
FROM テーブル名 AS 表名1
LEFT JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
AND演算子やOR演算子を使用して、条件をいくつも足していくことができます。
SELECT
*
FROM テーブル名 AS 表名1
LEFT OUTER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列 AND 条件式 = 条件式 OR 条件式 = 条件式
;
Oracle
ORACLEデータベースの場合は、「+」演算子を使用してLEFT OUTER JOINを指定することができます。「+」演算子は、WHERE句で指定したカラムの右側に付けます。
SELECT
*
FROM テーブル名1,テーブル名2
WHERE テーブル名1.カラム= テーブル名2.カラム(+)
;
実行結果
「LEFT OUTER JOIN句」で「DT_PROCEEDS(売上テーブル)」と「MST_CUSTOME(得意先マスタテーブル)」を得意先CDで結合しています。DT_PROCEEDS(売上テーブル)側のレコードは全件表示され、LEFT OUTER JOIN句側のテーブルで結合するレコードがない列はNULLで表示されます。
得意先マスタテーブル
ID | CT_NAME (得意先名) | CT_NAME_KANA (得意先カナ) | CT_ZIPCD (郵便番号) | CT_ADDRESS (住所) | CT_TEL (電話番号) | CT_ESTABLISHMENT (設立日) | CT_FAX (FAX番号) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|
1 | すなりん商事 | すなりんしょうじ | 9999999 | 東京都町田市 | 030666999 | 2020-01-01 | 030666998 | 1 |
2 | 浜田株式会社 | はまだかぶしきかいしゃ | 9999998 | 茨木県都杉並町 | 0292229999 | 1990-01-01 | 0292229998 | 1 |
3 | ほしの有限会社 | ほしのゆうげんかいしゃ | 9999997 | 青森県青森市 | 0179991111 | 1800-12-15 | 0179991110 | 1 |
4 | いかぶし株式会社 | いかぶしかぶしきかいしゃ | 9999996 | 福岡県糸田町 | 0947991111 | 2000-09-01 | 0947991110 | 1 |
5 | さめはだ有限会社 | さめはだゆうげんかいしゃ | 9999995 | 沖縄県那覇市 | 0989991111 | 2021-05-23 | 0989991110 | 1 |
売上テーブル
SLIPNO (伝票番号) | EMP_ID (担当者CD) | CT_ID (得意先CD) | PR_ORDERDATE (受注日) | PR_PRODUCT_CD (商品CD) | PR_PRODUCT_NAME (商品名) | PR_UNITPRICE (単価) | PR_QUANITY (数量) | PR_TAX (消費税) | PR_TOTAL (合計金額) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 2022-12-20 | 100 | 湯沸器 | 5000 | 3 | 1500 | 6500 | 1 |
2 | 2 | 2 | 2022-12-21 | 200 | ガス検知器 | 20000 | 1 | 2000 | 22000 | 0 |
3 | 2 | 6 | 2022-12-10 | 300 | 加工品 | 10000 | 1 | 1000 | 11000 | 1 |
SQL Server
/* LEFT OUTER JOIN */
SELECT
*
FROM [SampleDB].[dbo].[DT_PROCEEDS] AS DT_PROCEEDS
LEFT OUTER JOIN [SampleDB].[dbo].[MST_CUSTOME] AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
;
MySQL
/* LEFT OUTER JOIN */
SELECT
*
FROM testdb.DT_PROCEEDS AS DT_PROCEEDS
LEFT OUTER JOIN testdb.MST_CUSTOME AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
;
右側外部結合(RIGHT OUTER JOIN句)
対応:SQL Server MySQL Oracle PostgreSQL DB2 Access ANSI
基本
「RIGHT OUTER JOIN句」は2つのテーブルをキーで結合します。「INNER JOIN句(内部結合)」、「LEFT OUTER JOIN句」と異なる点は、「RIGHT OUTER JOIN句」で指定したテーブルはすべてレコードが表示されます。FROM句側のテーブルは、指定した条件にマッチする結合条件のみレコードが結合されます。
また、「RIGHT OUTER JOIN句」とFROM句で指定した条件にマッチしない場合、その場合、FROM句側の列はNULLで表示されます。
構文
SELECT
*
FROM テーブル名 AS 表名1
RIGHT OUTER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
SELECT
*
FROM テーブル名 AS 表名1
RIGHT JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
AND演算子やOR演算子を使用して、条件をいくつも足していくことができます。
SELECT
*
FROM テーブル名 AS 表名1
RIGHT OUTER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列 AND 条件式 = 条件式 OR 条件式 = 条件式
;
Oracle
ORACLEデータベースの場合は、「+」演算子を使用してRIGHT OUTER JOINを指定することができます。「+」演算子は、WHERE句で指定したカラムの左側に付けます。
SELECT
*
FROM テーブル名1,テーブル名2
WHERE テーブル名1.カラム(+) = テーブル名2.カラム
;
実行結果
「DT_PROCEEDS(売上テーブル)」と「MST_CUSTOME(得意先マスタテーブル)」を得意先CDで結合して、得意先マスタテーブルが全件表示され売上テーブルは得意先マスタテーブルのIDとマッチするレコードだけ結合されます。
得意先マスタテーブル
ID | CT_NAME (得意先名) | CT_NAME_KANA (得意先カナ) | CT_ZIPCD (郵便番号) | CT_ADDRESS (住所) | CT_TEL (電話番号) | CT_ESTABLISHMENT (設立日) | CT_FAX (FAX番号) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|
1 | すなりん商事 | すなりんしょうじ | 9999999 | 東京都町田市 | 030666999 | 2020-01-01 | 030666998 | 1 |
2 | 浜田株式会社 | はまだかぶしきかいしゃ | 9999998 | 茨木県都杉並町 | 0292229999 | 1990-01-01 | 0292229998 | 1 |
3 | ほしの有限会社 | ほしのゆうげんかいしゃ | 9999997 | 青森県青森市 | 0179991111 | 1800-12-15 | 0179991110 | 1 |
4 | いかぶし株式会社 | いかぶしかぶしきかいしゃ | 9999996 | 福岡県糸田町 | 0947991111 | 2000-09-01 | 0947991110 | 1 |
5 | さめはだ有限会社 | さめはだゆうげんかいしゃ | 9999995 | 沖縄県那覇市 | 0989991111 | 2021-05-23 | 0989991110 | 1 |
売上テーブル
SLIPNO (伝票番号) | EMP_ID (担当者CD) | CT_ID (得意先CD) | PR_ORDERDATE (受注日) | PR_PRODUCT_CD (商品CD) | PR_PRODUCT_NAME (商品名) | PR_UNITPRICE (単価) | PR_QUANITY (数量) | PR_TAX (消費税) | PR_TOTAL (合計金額) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 2022-12-20 | 100 | 湯沸器 | 5000 | 3 | 1500 | 6500 | 1 |
2 | 2 | 2 | 2022-12-21 | 200 | ガス検知器 | 20000 | 1 | 2000 | 22000 | 0 |
3 | 2 | 6 | 2022-12-10 | 300 | 加工品 | 10000 | 1 | 1000 | 11000 | 1 |
SQL Server
/* RIGHT OUTER JOIN */
SELECT
*
FROM [SampleDB].[dbo].[DT_PROCEEDS] AS DT_PROCEEDS
RIGHT OUTER JOIN [SampleDB].[dbo].[MST_CUSTOME] AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
;
MySQL
/* RIGHT OUTER JOIN */
SELECT
*
FROM testdb.DT_PROCEEDS AS DT_PROCEEDS
RIGHT OUTER JOIN testdb.MST_CUSTOME AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
;
完全外部結合(FULL OUTER JOIN句)
対応:SQL Server
基本
「FULL OUTER JOIN句」は両方のテーブルにない場合でもすべてレコードを結合して表示します。結合できない列はNULLで表示されます。
構文
SELECT
*
FROM テーブル名 AS 表名1
FULL OUTER JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
SELECT
*
FROM テーブル名 AS 表名1
FULL JOIN 表名2 ON 表名1.結合列 = 表名2.結合列
;
実行結果
「DT_PROCEEDS(売上テーブル)」と「MST_CUSTOME(得意先マスタテーブル)」を得意先CDで結合して、得意先マスタテーブルが全件表示され売上テーブルは得意先マスタテーブルのIDとマッチするレコードだけ結合されます。
得意先マスタテーブル
ID | CT_NAME (得意先名) | CT_NAME_KANA (得意先カナ) | CT_ZIPCD (郵便番号) | CT_ADDRESS (住所) | CT_TEL (電話番号) | CT_ESTABLISHMENT (設立日) | CT_FAX (FAX番号) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|
1 | すなりん商事 | すなりんしょうじ | 9999999 | 東京都町田市 | 030666999 | 2020-01-01 | 030666998 | 1 |
2 | 浜田株式会社 | はまだかぶしきかいしゃ | 9999998 | 茨木県都杉並町 | 0292229999 | 1990-01-01 | 0292229998 | 1 |
3 | ほしの有限会社 | ほしのゆうげんかいしゃ | 9999997 | 青森県青森市 | 0179991111 | 1800-12-15 | 0179991110 | 1 |
4 | いかぶし株式会社 | いかぶしかぶしきかいしゃ | 9999996 | 福岡県糸田町 | 0947991111 | 2000-09-01 | 0947991110 | 1 |
5 | さめはだ有限会社 | さめはだゆうげんかいしゃ | 9999995 | 沖縄県那覇市 | 0989991111 | 2021-05-23 | 0989991110 | 1 |
売上テーブル
SLIPNO (伝票番号) | EMP_ID (担当者CD) | CT_ID (得意先CD) | PR_ORDERDATE (受注日) | PR_PRODUCT_CD (商品CD) | PR_PRODUCT_NAME (商品名) | PR_UNITPRICE (単価) | PR_QUANITY (数量) | PR_TAX (消費税) | PR_TOTAL (合計金額) | ENABLE (有効区分) |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 2022-12-20 | 100 | 湯沸器 | 5000 | 3 | 1500 | 6500 | 1 |
2 | 2 | 2 | 2022-12-21 | 200 | ガス検知器 | 20000 | 1 | 2000 | 22000 | 0 |
3 | 2 | 6 | 2022-12-10 | 300 | 加工品 | 10000 | 1 | 1000 | 11000 | 1 |
SQL Server
/* FULL OUTER JOIN */
SELECT
*
FROM [SampleDB].[dbo].[DT_PROCEEDS] AS DT_PROCEEDS
FULL OUTER JOIN [SampleDB].[dbo].[MST_CUSTOME] AS MST_CUSTOME
ON DT_PROCEEDS.CT_ID = MST_CUSTOME.ID
;
自己結合
対応:SQL Server MySQL Oracle PostgreSQL DB2 Access ANSI
基本
テーブル結合は、別々のテーブル同士だけではなく同一テーブル同士も結合することができます。
構文
SELECT * FROM テーブル1 別名1,テーブル1 別名2 WHERE 別名1.カラム = 別名2.カラム;
実行結果
社員マスタテーブルから社員の上司を自己結合によって表示する例になります。EMP_BOSSCDと社員ID(ID)を結合することで社員の上司のレコードが結合されます。
ID | EMP_BOSSCD (上司CD) | EMP_NAME(社員名) | EMP_NAME_KANA(社員カナ) | EMP_DEPTCD(部署コード) | EMP_AGE(年齢) | EMP_SEX(性別) | ENABLE(有効区分) |
---|---|---|---|---|---|---|---|
1 | NULL | すなりん 太郎 | すなりん たろう | 1 | 35 | 男 | 1 |
2 | NULL | 博多 ぴーち | はかた ぴーち | 2 | 20 | 女 | 1 |
3 | 2 | 田中 工事 | たなか こうじ | 2 | 26 | 男 | 1 |
4 | 1 | 佐々木 花子 | ささき はなこ | 1 | 40 | 女 | 1 |
5 | 1 | 佐藤 じゅん | さとう じゅん | 1 | 23 | 1 | |
6 | 1 | 佐々木 ゆん | ささき ゆん | 1 | 23 | 1 |
SQL Server
/* 自己結合 */
SELECT
*
FROM [SampleDB].[dbo].[MST_EMPLOYEE] AS [MST_EMPLOYEE],[SampleDB].[dbo].[MST_EMPLOYEE] AS EMP_BOSS
WHERE MST_EMPLOYEE.ID = EMP_BOSS.EMP_BOSSCD
;
MySQL
/* 自己結合 */
SELECT
*
FROM testdb.MST_EMPLOYEE AS MST_EMPLOYEE,testdb.MST_EMPLOYEE AS EMP_BOSS
WHERE MST_EMPLOYEE.ID = EMP_BOSS.EMP_BOSSCD
;