初詣合格祈願SQL講座

SQL講座 複数の表の連携11

目指せ!SQL

初詣合格祈願SQL講座 複数の表の連携11

LEFT JOIN とRIGHT JOIN(外部結合)

 表結合を指定するときにLEFT JOINとRIGHT JOINを指定することができます。
「売上表 LEFT JOIN 顧客表」とすると、左側の売上表のすべての行が残されます。これとは逆に「売上表 RIGHT JOIN 顧客表」とすると、右側の顧客表のすべての行が残されます。したがって、LEFT JOINおよびRIGHT JOINを使用するときは、表名を記述する位置に注意する必要があります。
 通常の表の結合では、どちらか一方の表に条件を満たす行が存在しない場合は、結果から除外されます。これを回避するときに使用されます。
 ここでは、次のような表を元にLEFT JOINとRIGHT JOINの違いを考えていきます。LEFT JOINを例に考えていきます。LEFT JOINを指定した場合と、指定しない場合の実行結果を比較しその違いを確認します。

売上表
売上No日付顧客CD
12001/05/27105
22001/05/27101
32001/05/27103
42001/06/27102
52001/06/27104

顧客表(主キー:顧客CD)
顧客CD顧客名
101二島商店
102姫路商事
103大阪物産
104神戸商店
105福岡商事

<例題>
売上表の顧客CDと顧客表の顧客CDが一致する行を表示させる。

SELECT * ← すべての列
FROM 売上表 INNER JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD
↑ 売上表の顧客CDと顧客表の顧客CDが一致する行を結合

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

実行結果を見ると分かるように売上Noが6の行が表示されていません。これは前述したように顧客表に顧客CDが106の行がないので、結果から除外されています。次にLEFT JOINを指定し、実行させます。

<例題>
売上表の顧客CDと顧客表の顧客CDが一致する行を表示させる。(LEFT JOINを指定)

SELECT * ← すべての列
FROM 売上表 LEFT JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD
                  ↑ 売上表のすべての行と、売上表の顧客CDと顧客表の顧客CDとが一致する行を結合

実行結果
LEFT JOIN とRIGHT JOIN(外部結合)
実行結果からも分かるようにLEFT JOINで指定された左側の表である売上表のすべての行が表示されています。なお、顧客表で顧客CD=106の行は存在しないので、顧客表のすべての列にはnullが返されます。



初詣合格祈願SQL講座ページTOPに戻る