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 |
---|---|---|
1 | 2001/05/27 | 105 |
2 | 2001/05/27 | 101 |
3 | 2001/05/27 | 103 |
4 | 2001/06/27 | 102 |
5 | 2001/06/27 | 104 |
顧客CD | 顧客名 |
---|---|
101 | 二島商店 |
102 | 姫路商事 |
103 | 大阪物産 |
104 | 神戸商店 |
105 | 福岡商事 |
<例題>
売上表の顧客CDと顧客表の顧客CDが一致する行を表示させる。
SELECT * ← すべての列
FROM 売上表 INNER JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD
↑ 売上表の顧客CDと顧客表の顧客CDが一致する行を結合
売上No | 日付 | 売上表.顧客CD | 顧客表.顧客CD | 顧客名 |
---|---|---|---|---|
1 | 2001/05/27 | 105 | 105 | 福岡商事 |
2 | 2001/05/27 | 101 | 101 | 二島商店 |
3 | 2001/05/27 | 103 | 103 | 大阪物産 |
4 | 2001/06/27 | 102 | 102 | 姫路商事 |
5 | 2001/06/27 | 104 | 104 | 神戸商店 |
<例題>
売上表の顧客CDと顧客表の顧客CDが一致する行を表示させる。(LEFT JOINを指定)
SELECT * ← すべての列
FROM 売上表 LEFT JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD
↑ 売上表のすべての行と、売上表の顧客CDと顧客表の顧客CDとが一致する行を結合
実行結果
実行結果からも分かるようにLEFT JOINで指定された左側の表である売上表のすべての行が表示されています。なお、顧客表で顧客CD=106の行は存在しないので、顧客表のすべての列にはnullが返されます。
餅つき、羽根突き、福笑い、双六、かるた、めんこ、お手玉、独楽、けん玉、だるま落とし、正月の遊び10種の説明です。