結合の種類
テーブルを結合する場合、作成する結合の種類により、結果セットで使用される行が決まります。作成できる結合の種類は、次のとおりです。
内部結合 結合するテーブルの両方で一致する行だけを表示します。内部結合は、クエリおよびビュー デザイナーの既定の結合です。たとえば、titles テーブルと publishers テーブルを結合すると、書名ごとに出版社名を表示する結果セットを作成できます。内部結合では、対応する出版社情報のない書名、および対応する書名のない出版社は、結果セットに加えられません。作成される SQL ステートメントは、次のようになります。
SELECT title, pub_name FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id
[!メモ]
内部結合を作成する場合、NULL を含む列に一致する値はないため、このような列は結果セットから除外されます。NULL 値は、ほかの NULL 値とは一致しません。
外部結合 結合するテーブルに対応する行がない行も結果セットに含みます。外部結合には 3 種類あり、一致しない行を結果セットに含める方法を指定できます。
左外部結合 最初に指定されているテーブル (JOIN 句の左辺にある "左" テーブル) のすべての行が含まれます。右側のテーブルで一致しない行は表示されません。たとえば、次の SQL ステートメントでは、titles テーブルと publishers テーブルに左外部結合を適用し、出版社の情報がない書名も含むすべての書名を結果セットに表示します。
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles LEFT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
右外部結合 2 番目に指定されているテーブル (JOIN 句の右辺にある "右" テーブル) のすべての行が含まれます。左側のテーブルで一致しない行は表示されません。たとえば、titles テーブルと publishers テーブルに右外部結合を適用すると、titles テーブルに対応する書名がない出版社を含むすべての出版社が結果セットに表示されます。結果の SQL ステートメントは次のようになります。
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles RIGHT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
完全外部結合 対応する行の有無に関係なく、結合されるすべてのテーブルのすべての行が含まれます。たとえば、titles テーブルと publishers テーブルに完全外部結合を適用すると、ほかのテーブルに一致する行があるかどうかにかかわらず、すべての書名とすべての出版社が結果セットに表示されます。
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles FULL OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
[!メモ]
Oracle など、完全外部結合をサポートしていないデータベースもあります。
クロス結合 2 つのテーブルの行の可能な組み合わせごとに、結果セットに 1 つの行が作成される結合です。たとえば、著者と出版社にクロス結合を適用すると、結果セットには著者と出版社の可能な組み合わせごとに 1 行が作成されます。結果の SQL ステートメントは次のようになります。
SELECT * FROM authors CROSS JOIN publishers