- 「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 |
---|---|---|
1 | 2001/05/27 | 101 |
2 | 2001/05/27 | 101 |
3 | 2001/05/27 | 103 |
4 | 2001/06/27 | 104 |
5 | 2001/06/27 | 104 |
顧客CD | 顧客名 |
---|---|
101 | 二島商店 |
102 | 姫路商事 |
103 | 大阪物産 |
104 | 神戸商店 |
105 | 福岡商事 |
SELECT文
SELECT *
FROM 売上表 INNER JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD
または
SELECT *
FROM 売上表,顧客表
WHERE 売上表.顧客CD=顧客表.顧客CD
売上No | 日付 | 売上表.顧客CD | 顧客表.顧客CD | 顧客名 |
---|---|---|---|---|
1 | 2001/05/27 | 101 | 101 | 二島商店 |
2 | 2001/05/27 | 101 | 101 | 二島商店 |
3 | 2001/05/27 | 103 | 103 | 大阪物産 |
4 | 2001/06/27 | 104 | 104 | 神戸商店 |
5 | 2001/06/27 | 104 | 104 | 神戸商店 |
実行結果を見ると、売上表に存在しない顧客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 |
---|---|---|
1 | 2001/05/27 | 101 |
2 | 2001/05/27 | 101 |
3 | 2001/05/27 | 103 |
4 | 2001/06/27 | 104 |
5 | 2001/06/27 | 104 |
顧客CD | 顧客名 |
---|---|
101 | 二島商店 |
102 | 姫路商事 |
103 | 大阪物産 |
104 | 神戸商店 |
105 | 福岡商事 |
SELECT文
SELECT *
FROM 顧客表 LEFT JOIN 売上表 ON 顧客表.顧客CD=売上表.顧客CD
顧客名 | 顧客表.顧客CD | 売上表.顧客CD | 売上No | 日付 |
---|---|---|---|---|
二島商店 | 101 | 101 | 1 | 2001/05/27 |
二島商店 | 101 | 101 | 2 | 2001/05/27 |
姫路商事 | 102 | |||
大阪物産 | 103 | 103 | 3 | 2001/05/27 |
神戸商店 | 104 | 104 | 4 | 2001/06/27 |
神戸商店 | 104 | 104 | 5 | 2001/06/27 |
福岡商事 | 105 |
LEFT JOINを指定しているので、左側の顧客表のすべての行が表示されている。なお、売上表において該当するデータがない部分は、NULL(ヌルまたはナル)が表示されている。NULLという文字列が表示されている訳ではなく空欄になっているということである。NULLとはからっぽという意味である。
表の結合方法には、内部結合と外部結合のほかに同じ表を結合する自己結合がある。自己結合は、SQL講座 表の別名指定を参照して欲しい。
スポンサードリンク
SELECT文の結合に関する関連ページ
- SQL講座 WHERE句で表を結合する
- WHERE句で表の結合を行う場合の記述方法の解説
- SQL講座 INNER JOINで表を結合する
- FROM句でINNER JOINを指定して表を結合する場合の記述方法の解説
- SQL講座 表の別名指定
- 同じ表を別な名前で指定して、表を自己結合する方法の解説