SQL 6章 テーブルの結合
- 6.1. 基本的な結合
- 6.2. 自己結合
- 6.3. 特殊な結合演算子
- 1. CROSS JOIN
- 2. 自然結合
- 3. 指定結合
- 4. UNION JOIN
6.3. 特殊な結合演算子
SQL92 はある種の共通する結合操作を簡単に実行できるように、特別な構文を用意しています。SQL のビルトイン結合演算子には、「CROSS JOIN」、「NATURAL JOIN」、「指定結合」及び「UNION JOIN」があります。これらは次のように定義されています。
- ■ CROSS JOIN
- 結合述語のない結合に相当します。すなわち、ストレートなデカルト積です。
- ■ NATURAL JOIN
- 自然結合は一般に、外部キー値から親キー値への照合に基づいた結合を指します。ただし、SQL92 規格ではこの用語が少し違った意味で使用されています。SQL92 規格では、同じ名前を持つ 2つの列が親キーと外部キーであるかのように照合されます。つまり、そのデータベース設計が列名の一致は実際に親キーと外部キーをあらわすと取り決めている場合に、NATURAL JOIN 演算子を使用すべきだと、いう考え方です。
- ■ 指定結合
- クエリに直接指定された条件に基づいた結合です。クエリの WHERE 句の代わりに、FROM 句で結合を行うための機能を提供します。
- ■ UNION JOIN
- 明示的または暗黙的に指定された述語を指定せず、照合やデカルト積の抽出は行われません。<テーブル A> のすべての行を取り込み、<テーブル B> の列に NULL を設定し、さらに <テーブル B> の行をすべて取り込み、<テーブル A> の列に NULL を設定した出力テーブルを生成します。
6.3.1.CROSS JOIN
CROSS JOINとは、結合テーブルの値の比較に基づいた選択を行わないデカルト積です。つまり、すべての行の組み合わせが使用されます。結合を実行し、結合述語を一切使用しない場合と効果は同じです。この結合のサンプルを考える時、出力結果が膨大な量になるので、ここでは簡略化のために次のような模式的なテーブルを考えます。
A表
|
B表
|
/* テーブルの結合 */ SELECT A.甲,A.乙,B.あ,B.い FROM A表 A CROSS JOIN B表 B ;
/* 実行結果 */ 甲 乙 あ い ── ── ── ──── 01 AA 11 TTT 01 AA 22 UUU 02 BB 11 TTT 02 BB 22 UUU 03 CC 11 TTT 03 CC 22 UUU
上記の例は、sample.17-7のように記述した場合と同じです。
-- sample.17-7 --/* テーブルの結合 */ SELECT A.甲,A.乙,B.あ,B.い FROM A表 A,B表 B ;
この構文はあまり役に立つものではありませんが、読みやすさを改善するものであり、その目的のほとんどは明瞭化にあるといえます。