talosのプログラミング教室

【基本・応用情報技術者】SQL ~結合~

スポンサーリンク

こんにちは。たろすです。

今回はSQLの結合について説明します。

結合とは

複数のテーブルをくっつけて一つのテーブルとして扱う方法を結合といいます。

結合には主に二種類あります。

一つは内部結合です。

内部結合は結合条件に合致するデータがある場合のみ出力します。

もう一つは外部結合です。

外部結合は結合条件に合致するデータがなくても出力することができます。

内部結合

内部結合には書き方が二種類あります。

SELECT カラム名1, カラム名2,... FROM テーブル名1 [INNER] JOIN テーブル名2,... ON 結合条件;
SELECT カラム名1, カラム名2,... FROM テーブル名1, テーブル名2,... WHERE 結合条件;


例えば以下のような二つのテーブルがあるとします。

f:id:talosta:20210626125225p:plain

これに対し次のようなSQLを投げると、

SELECT * FROM 受注 JOIN 顧客 ON 受注.顧客番号 = 顧客.顧客番号;

以下のようにデータが取れます。

f:id:talosta:20210626125447p:plain

結合する列名が同じ場合はUSINGを使うこともできます。

SELECT * FROM 受注 JOIN 顧客 ON USING(顧客番号);

逆に結合する列名が異なる場合は「受注.」や「顧客.」といったテーブル名の指定を省略することもできます。

上記のSQLは次のように書くこともできます。

SELECT * FROM 受注, 顧客 WHERE 受注.顧客番号 = 顧客.顧客番号;

外部結合

外部結合には三種類あります。

左外部結合

左外部結合は次のように使います。

SELECT カラム名1, カラム名2,... FROM テーブル名1 LEFT [OUTER] JOIN テーブル名2 ON 結合条件;

先程のテーブルに以下のSQLを投げます。

SELECT *  FROM 受注明細 LEFT JOIN 商品 ON 受注明細.商品コード = 商品.商品コード;

すると以下のように出力されます。

f:id:talosta:20210626125554p:plain

内部結合と違い、条件に合致するデータが存在しない場合すべてのカラムをNULLとして結合します。

右外部結合

左外部結合の反対です。

SELECT カラム名1, カラム名2,... FROM テーブル名1 RIGHT [OUTER] JOIN テーブル名2 ON 結合条件;

先程のテーブルに以下のSQLを投げると

SELECT *  FROM 受注明細 RIGHT JOIN 商品 ON 受注明細.商品コード = 商品.商品コード;

以下のような出力を得ます。

f:id:talosta:20210626125747p:plain

完全外部結合

左外部結合と右外部結合を合わせたものです。

完全外部結合はこのように使います。

SELECT カラム名1, カラム名2,... FROM テーブル名1 FULL [OUTER] JOIN テーブル名2 ON 結合条件;

先程のテーブルに以下のSQLを投げると、

SELECT *  FROM 受注明細 FULL JOIN 商品 ON 受注明細.商品コード = 商品.商品コード;

f:id:talosta:20210626125907p:plain

となります。

おわりに

今回はSQLの結合について説明しました。

午後問で絶対にでるので確実にできるようにしておきましょう。