Sybase IQ 12.7 用户手册

下载
页码 212
ジョインの制限
 
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 コマンドに多くのテーブルがある場合は、修飾子名をいくつも入力し
なければならないことがあります。このようなときは、相関名を使用して入力
の手間を省くことができます。