Sybase 12.7 Home Theater System User Manual


 
ジョインの制限
20 Sybase IQ
外積ジョインは、ジョインを理解するための単純な出発点にすぎず、それ自体
はあまり役に立ちません。これ以降の項で、より選択性の高いジョインを構築
する方法について説明します。このジョインは、外積テーブルへの制限の適用
と考えることができます。
ジョインの制限
外積ジョインを有効に利用するには、何らかの条件を満たすローだけを結果に
含める必要があります。ジョイン条件と呼ばれるこの条件では、比較演算子
(==>< など ) を使用して、あるテーブルの 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 コマンドに多くのテーブルがある場合は、修飾子名をいくつも入力し
なければならないことがあります。このようなときは、相関名を使用して入力
の手間を省くことができます。