「1日1問」仕事や勉強に役立つIT知識を充電!
リクルートが運営する「ITキャパチャージ」は、最初に会員登録が必要ですが、無料で仕事から情報処理技術者試験まで幅広く活用できるWebサイトです。IT担当者のスキルアップに役立つ情報処理に関する問題を、毎日1問ずつ、メールやサイト上で提供するサービスです。解答ページはIT初心者でも分かる丁寧な解説つきで、サイト上では過去の問題にも挑戦できます。
また、IT用語が調べられるIT単語帳は、説明も詳しく簡単に調べられ、たいへん便利です。ぜひ、会員登録して活用したいサイトです。

LEFT JOINとRIGHT JOIN

表結合を指定するときにWHERE句とINNER JOINのほかにLEFT JOINとRIGHT JOINで表を結合することができる。これは、表の結合したときに指定された左右いずれかの表を優先して表示を行う指定である。

例題1は売上表と顧客表を結合したものである。

【例題1】

売上表の顧客CDと顧客表の顧客CDで表を結合する。

売上表
売上No日付顧客CD
12001/05/27101
22001/05/27101
32001/05/27103
42001/06/27104
52001/06/27104
顧客表
顧客CD顧客名
101二島商店
102姫路商事
103大阪物産
104神戸商店
105福岡商事
SELECT文

SELECT *
FROM 売上表 INNER JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD

または

SELECT *
FROM 売上表,顧客表
WHERE 売上表.顧客CD=顧客表.顧客CD

実行結果
売上No日付売上表.顧客CD顧客表.顧客CD顧客名
12001/05/27101101二島商店
22001/05/27101101二島商店
32001/05/27103103大阪物産
42001/06/27104104神戸商店
52001/06/27104104神戸商店

実行結果を見ると、売上表に存在しない顧客CDが102の姫路商店と105の福岡商事が表示されていない。このように両方の表で一致する行だけを表示させるのが内部結合である。

WHERE句で表の結合条件を指定したり、INNER JOINを指定して表を結合させるのが内部結合である。

内部結合

内部結合は、指定された両方の表に存在するものだけが抽出される

表の内部結合
WHERE句で表の結合条件を指定する
FROM句でINNER JOINで表の結合条件を指定する

顧客表のすべての行を表示させたいときには、外部結合であるLEFT JOINまたはRIGHT JOINを指定する。

LEFT JOINとRIGHT JOIN(外部結合)

LEFT JOINとRIGHT JOINは、左右いずれかの表を優先させたいときに指定する。

LEFT JOIN
左側に指定された表のすべての行が表示される
RIGHT JOIN
右側に指定された表のすべての行が表示される

LEFT JOINとRIGHTの記述形式は以下のとおりである。

LEFT JOIN記述形式

SELECT 列名1,列名2,〜列名n
FROM 表名1 LEFT JOIN表名2 ON 表名1.フィールド名 = 表名2.フィールド名
WHERE 抽出条件

RIGHT JOINの記述形式

SELECT 列名1,列名2,〜列名n
FROM 表名1 RIGHT JOIN表名2 ON 表名1.フィールド名 = 表名2.フィールド名
WHERE 抽出条件

LEFT JOINを指定とすると、左側の表名1のすべての行が表示される。これとは逆にRIGHT JOINとすると、右側の表名2のすべての行が表示される。したがって、LEFT JOINおよびRIGHT JOINを使用するときは、表名を左右どちらに記述するか注意しなければならない。

【例題2】

顧客表と売上表を外部結合によって、顧客表のすべての行を表示させる。

売上表
売上No日付顧客CD
12001/05/27101
22001/05/27101
32001/05/27103
42001/06/27104
52001/06/27104
顧客表
顧客CD顧客名
101二島商店
102姫路商事
103大阪物産
104神戸商店
105福岡商事
SELECT文

SELECT *
FROM 顧客表 LEFT JOIN 売上表 ON 顧客表.顧客CD=売上表.顧客CD

実行結果
顧客名顧客表.顧客CD売上表.顧客CD売上No日付
二島商店10110112001/05/27
二島商店10110122001/05/27
姫路商事102
大阪物産10310332001/05/27
神戸商店10410442001/06/27
神戸商店10410452001/06/27
福岡商事105

LEFT JOINを指定しているので、左側の顧客表のすべての行が表示されている。なお、売上表において該当するデータがない部分は、NULL(ヌルまたはナル)が表示されている。NULLという文字列が表示されている訳ではなく空欄になっているということである。NULLとはからっぽという意味である。

表の結合方法には、内部結合と外部結合のほかに同じ表を結合する自己結合がある。自己結合は、SQL講座 表の別名指定を参照して欲しい。

スポンサードリンク