
ジョインの制限
外積ジョインは、ジョインを理解するための単純な出発点にすぎず、それ自体 はあまり役に立ちません。これ以降の項で、より選択性の高いジョインを構築 する方法について説明します。このジョインは、外積テーブルへの制限の適用 と考えることができます。
ジョインの制限
| 外積ジョインを有効に利用するには、何らかの条件を満たすローだけを結果に |
| 含める必要があります。ジョイン条件と呼ばれるこの条件では、比較演算子 |
| (=、=>、< など ) を使用して、あるテーブルの 1 つのカラムを別のテーブルの |
| 1 つのカラムと比較します。これにより、外積の結果から一部のローを除外し |
| ます。 |
| たとえば、前の項のジョインを有効に利用するには、sales_order テーブルの |
| sales_rep と employee テーブルの従業員番号が一致するローだけを結果に含 |
| めるように指定します。これにより、各ローには注文と、その注文を担当する |
| 営業担当者の情報が格納されます。 |
例 1 | これを実行するには、前のクエリに WHERE 句を追加し、従業員とその担当登 |
| 録のリストを表示します。 |
SELECT *
FROM sales_order, employee
WHERE sales_order.sales_rep = employee.emp_id
| カラムを識別するために、テーブル名をプレフィクスとして指定します。この |
| 例では必ずしも必要ありませんが、テーブル名のプレフィクスを使用すると文 |
| が明確になります。2 つのテーブルに同じ名前のカラムがあるときは、このプ |
| レフィクスを指定する必要があります。このようなコンテキストで使用する |
| テーブル名を「修飾子」と呼びます。 |
| このクエリの結果には 648 のローしかありません (sales_order テーブルの各 |
| ローに 1 つずつ )。ジョインした元の 48,600 のローのうち、648 のローにだけ |
| 2 つのテーブルで共通する従業員番号が含まれています。 |
例 2 | 次のクエリでは、一部のカラムだけをフェッチし、結果を順序付けするように |
| 変更を加えています。 |
SELECT employee.emp_lname, sales_order.id, sales_order.order_date
FROM sales_order, employee
WHERE sales_order.sales_rep = employee.emp_id ORDER BY employee.emp_lname
SELECT コマンドに多くのテーブルがある場合は、修飾子名をいくつも入力し なければならないことがあります。このようなときは、相関名を使用して入力 の手間を省くことができます。
20 | Sybase IQ |