SELECT文は、1つ以上の表からデータを取得します。 取得されたデータは、結果表または問合せ結果と呼ばれる表の形式で表示されます。
必要な権限
オブジェクトの所有者に必要な権限はありません。
別のユーザーのオブジェクトの場合、SELECTが必要です。
別のユーザーのオブジェクトの場合、SELECT ... FOR UPDATEにはUPDATE権限も必要です。
SQL構文
SELECT文の一般的な構文は、次のとおりです。
SELECT [FIRST NumRows | ROWS M TO N] [ALL | DISTINCT] SelectList FROM TableSpec [,...] [WHERE SearchCondition] [GROUP BY Expression [,...]] [HAVING SearchCondition] [ORDER BY {ColumnID|ColumnAlias|Expression} [ASC | DESC]] [,...] [FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...] ] [NOWAIT | WAIT Seconds] ]
集合演算子UNION、UNION ALL、MINUSまたはINTERSECTを含むSELECT文の構文は、次のとおりです。
SELECT [ROWS m TO n] [ALL] SelectList FROM TableSpec [,...] [WHERE SearchCondition] [GROUP BY Expression [,...]] [HAVING SearchCondition] [,...] {UNION [ALL] | MINUS | INTERSECT} SELECT [ROWS M TO N] [ALL] SelectList FROM TableSpec [,...] [WHERE SearchCondition] [GROUP BY Expression [,...]] [HAVING SearchCondition] [,...] [ORDER BY {ColumnID|ColumnAlias|Expression} [ASC | DESC]
パラメータ
パラメータ | 説明 |
---|---|
FIRST NumRows |
取得する行の数を指定します。NumRows には、正のINTEGERか動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、? または:DynamicParameter です。動的パラメータの値は、文の実行時に設定されます。 |
ROWS m TO n |
取得する行の範囲を指定します。m は選択する最初の行、n は選択する最後の行です。 行のカウントは行1から開始します。問合せSELECT ROWS 1 to n ...は、SELECT FIRST NumRows と同じ行を返します(問合せが並べ替えられ、n とNumRows の値が同じである場合)。
|
ALL |
問合せ結果の重複する行が削除されないようにします。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。 |
DISTINCT |
問合せ結果の各行が一意となるようにします。この比較では、NULL値はすべて同じとみなされます。重複行は評価されません。 |
SelectList |
問合せ結果の列の導出方法を指定します。 SelectList の構文の詳細は、「SelectList」を参照してください。 |
FROM TableSpec |
SELECT文で参照される表を指定します。 問合せごとの表の最大数は24です。
|
WHERE SearchCondition |
WHERE句は取得する行のセットを決定します。通常、SearchCondition がFALSEまたはNULLと評価された行は、処理対象となりません。ただし、SearchCondition は、外部結合を指定するために使用できます。外部結合では、外部表の行うち、関連する内部表に対するSearchCondition の評価がTRUEでない行も返され、内部表を参照する投影式がNULLに設定されます。
列およびROWID式に単項演算子(+)を使用して、外部結合を示すことができます。 (+)演算子は、内部表を参照する結合条件のすべての列およびROWID式の後に指定する必要があります。(+)演算子を使用するにはいくつか条件があります。通常、これらの条件によって、作成できる外部結合問合せの種類は制限されます。(+)演算子はWHERE句に指定することができ、HAVING句には指定できません。2つの表を外部結合することはできません。外部結合条件をORで結ぶことはできません。 検索条件の詳細は、第4章「検索条件」を参照してください。 |
GROUP BY Expression [,...] |
GROUP BY句には、1つまたは複数の式を指定して、SelectListに集計関数を指定したり、行のグループに関数を適用する場合に使用します。
複雑な式でも記述できます。 たとえば、単一または複数の列を指定したり、集計関数、算術演算子、ROWID擬似列またはNULLを含めることができます。指定できるのは、日付関数、ユーザー関数、定数または動的パラメータです。 GROUP BY句を使用する場合、SelectListには集計関数およびGROUP BY句で参照される列のみを含めることができます。 SelectListに GROUP BY句を省略した場合、問合せの結果全体が1つのグループとして扱われます。 |
HAVING |
SELECT問合せでHAVING句を使用して、集計結果のグループをフィルタ処理できます。SELECT問合せにHAVING句が存在すると、問合せは集計問合せとなります。WHERE句を除くすべての句の集計関数のソース以外で参照されるすべての列は、GROUP BY句に指定する必要があります。
副問合せは、HAVING句で指定できます。 |
(+) |
単純な結合(内部結合とも呼ばれる)では、SearchCondition で指定された結合条件を満たす結合表の行の組合せごとに1行が返されます。 外部結合はこの演算子の拡張機能であり、結合された内部表での一致する行の有無に関係なく、外部表のすべての行が返されます。一致する行がなかった場合は、内部表を参照する投影式にNULL値が与えられます。 |
ORDER BY |
指定した列または式に基づいて、問合せの結果行をソートします。ソート・キーとして使用する列を、優先順位の高いものから順に指定します。最大255の列を指定できます。列ごとに、ソート順序を昇順または降順で指定できます。ASCまたはDESCのいずれも指定しない場合は、昇順が適用されます。文字列は、ASCIIデータのASCII照合順序に従って比較されます。
ORDER BY句では、列の別名がサポートされています。列の別名は、ORDER BY句でのみ参照可能です。単一の問合せ内では、同じ名前を持つ、列の別名を複数宣言できますが、その別名を参照するとエラーが発生します。 ORDER BY句では、NCHAR型はサポートされていません。 |
ColumnID |
SelectListの列に対応する必要があります。ソートする列を指定するには、その名前または序数を指定します。SelectListの最初の列の番号は1です。SelectListの列を参照する場合、それが単純な列でない場合は、列番号を使用する方が適切です。これには、集計関数、算術式、定数などが該当します。
ORDER BY句の
|
ColumnAlias |
ORDER BY句で使用されます。列の別名はSelectListの列と対応している必要があります。同じ別名で複数の列を識別することができます。
|
FOR UPDATE
|
FOR UPDATE
|
SelectQuery1
|
SelectQuery1 およびSelectQuery2 の結果が結合されることを指定します。 SelectQuery1 およびSelectQuery2 は、いくつかの制限を含む一般的なSELECT文です。
UNION演算子は、2つの問合せの結果を結合します。それぞれの問合せ文のSelectListには互換性がある必要があります。UNION ALLが指定されている場合は、両方のSELECT文の重複行が保持されます。指定されていない場合、重複行は削除されます。 MINUS演算子は、2番目の問合せではなく最初の問合せで返された行を1つの結果に結合します。 INTERSECT演算子は、両方の問合せで返された行のみを1つの結果に結合します。 両方のSELECT文で選択された対応するエントリのデータ型には、互換性が必要です。データ型を変換するには、CAST演算子を使用します。NULL値可能かどうかは一致している必要はありません。 結果内の列の長さは、列に対応する選択値のうち長い方になります。最終的な結果の列名は、最も左側で選択された列の名前になります。 集合演算子UNION、UNION ALL、MINUS、INTERSECTを使用して、複数の問合せを組み合せることができます。 集合演算子の一方または両方のオペランドに集合演算子を指定できます。複数の集合演算子やネストされた集合演算子は、左から右に評価されます。 同じ問合せで集合演算子を同時に指定できます。 集合演算子を指定するSELECT文には、次の制限があります。
|
説明
相関名を使用する場合は、基本名の構文ルールに従う相関名を使用する必要があります。 (「基本名」を参照。)1つのSELECT問合せ内のすべての相関名は一意である必要があります。相関名は、表をその表自身に結合する場合に役立ちます。表の列を指定するには、FROM句で表の相関名を複数定義し、SelectList
およびWHERE句で相関名を使用します。
SELECT... FOR UPDATEは副問合せを指定するSELECTで使用できますが、最も外側の問合せでのみ指定できます。
問合せで、FIRST NumRows
またはROWS m
TO n
が指定されている場合、返される行の数を制限するためにROWNUMを使用することはできません。
FIRST NumRows
およびROWS m
TO n
は、同じSELECT文で同時に使用することはできません。
例
次の例では、SELECT文で列の別名を使用します。
SELECT MAX(salary) AS max_salary FROM employee WHERE employee.age < 30;
次の例では、2つの表orders
およびlineitems
を使用します。
次のようにしてorders
表を作成します。
CREATE TABLE orders(orderno INTEGER, orderdate DATE, customer CHAR(20)); CREATE TABLE lineitems(orderno INTEGER, lineno INTEGER, qty INTEGER, unitprice DECIMAL(10,2));
つまり、注文ごとにorders
表に1つのレコードがあり、注文の各明細を示すレコードがlineitems
にあります。
年頭以降に入力されたすべてのordersの合計を検索するには、HAVING句を使用して、2000年1月1日以降に入力された注文のみを選択します。
SELECT o.orderno, customer, orderdate, SUM(qty * unitprice) FROM orders o, lineitems L WHERE o.orderno=l.orderno GROUP BY o.orderno, customer, orderdate HAVING orderdate >= DATE '2000-01-01';
次の問合せは、次の条件を満たすtablea
のすべての行をロックします。
tablea
.column1
が、少なくとも1つのtableb
.column1
の値と同じ。このとき、tableb
.column2
は5より大きい。
また、この問合せは、次の条件を満たすtableb
のすべての行もロックします。
tableb
.column2
が5より大きい。
tableb
.column1
が、少なくとも1つのtablea
.column1
の値と同じ。
WHERE句を指定しない場合、両方の表のすべての行がロックされます。
SELECT * FROM tablea, tableb WHERE tablea.column1 = tableb.column1 AND tableb.column2 > 5 FOR UPDATE;
次の問合せは、内部表t2
が2つの外部表(t1
およびt3
)に対応しているため、エラーとなります。
SELECT * FROM t1, t2, t3 WHERE t1.x = t2.x(+) AND t3.y = t2.y(+);
次に、有効な構文を示します。
SELECT * FROM t1, t2 WHERE t1.x = t2.x(+);
外部結合条件はORで連結できないため、次の問合せはエラーとなります。
SELECT * FROM t1, t2, t3 WHERE t1.x = t2.x(+) OR t3.y = 5;
これに対し、次の問合せは有効です。
SELECT * FROM t1, t2, t3 WHERE t1.x = t2.x(+) AND (t3.y = 4 OR t3.y = 5);
IN演算子を使用して(+)記号の付いた列を比較することはできません。たとえば、次の問合せはエラーとなります。
SELECT * FROM t1, t2, t3 WHERE t1.x = t2.x(+) AND t2.y(+) IN (4,5);
これに対し、次の問合せは有効です。
SELECT * FROM t1, t2, t3 WHERE t1.x = t2.x(+) AND t1.y IN (4,5);
次の問合せでは、結合条件ごとに(+)演算子が指定されておらず、(+)が指定されていない条件は内部結合条件として扱われるため、外部結合ではなく内部結合が実行されます。
SELECT * FROM t1, t2 WHERE t1.x = t2.x(+) AND t1.y = t2.y;
次の問合せのWHERE句には、外部結合の内部表の列と定数を比較する条件が含まれています。(+)演算子が指定されていないため、この条件は内部結合として扱われます。
SELECT * FROM t1, t2 WHERE t1.x = t2.x(+) AND t2.y = 3;
2つの表を同時に外部結合できないため、次の問合せはエラーとなります。
SELECT * FROM t1, t2 WHERE x1 = x2(+) AND y2 = y1(+);
student
表内の現在の順序値を検索します。
SELECT SEQ.CURRVAL FROM student;
次の問合せでは、(+)演算子が内部表t2
の列x2
に指定されていないため、条件x2 + y2(+) = 1
は内部結合条件として扱われます。2つの表を同時に外部結合できないため、この文はエラーとなります。
SELECT * FROM t1, t2 WHERE x1 = x2(+) AND x2 + y2(+) = 1;
(+)演算子が結合条件に指定されていないため、次の問合せで外部結合は実行されません。
SELECT * FROM t1, t2 WHERE x2(+) = 1;
次の問合せのFROM句にはSELECT文が含まれているため、導出表が生成されます。
SELECT * FROM t1, (SELECT MAX(x2) maxx2 FROM t2) tab2 WHERE t1.x1 = tab2.maxx2;
次の問合せは、2つのSELECT文の結果を結合します。
SELECT * FROM t1 WHERE x1 IN (SELECT x2 FROM t2) UNION SELECT * FROM t1 WHERE x1 IN (SELECT x3 FROM t3);
カテゴリ内の最高価格と同じ価格のすべての注文を選択します。
SELECT * FROM orders WHERE price = (SELECT MAX(price) FROM stock WHERE stock.cat=orders.cat);
この例では、INTERSECT集合演算子の使用方法を示しています。 employees
表にNULLのdepartment_id
があります。 departments
表では、department_id
はNOT NULLの主キーとして定義されます。 INTERSECT集合演算子を使用して返される行には、department_idがNULLのdepartments
表の行は含まれません。
Command> SELECT department_id FROM employees INTERSECT SELECT department_id FROM departments; < 10 > < 20 > < 30 > < 40 > < 50 > < 60 > < 70 > < 80 > < 90 > < 100 > < 110 > 11 rows found. Command> SELECT DISTINCT department_id FROM employees; < 10 > < 20 > < 30 > < 40 > < 50 > < 60 > < 70 > < 80 > < 90 > < 100 > < 110 > < <NULL> > 12 rows found.
この例では、最初の問合せでは返されるが、2番目の問合せでは返されない行を合わせて、MINUS集合演算子の使用方法を示します。 employees
表にNULLのdepartment_id
を含む行のみが返されます。
Command> SELECT department_id FROM employees MINUS SELECT department_id FROM departments; < <NULL> > 1 row found.
次の例では、employees
表の従業員の給与を合計し、SUBSTR式を使用して、職務権限ごとにデータをグループ化します。
Command> SELECT SUBSTR (job_id, 4,10), SUM (salary) FROM employees GROUP BY SUBSTR (job_id,4,10); < PRES, 24000 > < VP, 34000 > < PROG, 28800 > < MGR, 24000 > < ACCOUNT, 47900 > < MAN, 121400 > < CLERK, 133900 > < REP, 273000 > < ASST, 4400 > 9 rows found.
この例では、GROUP BY句におけるSUBSTR式の使用方法およびHAVING句における副問合せの使用方法を示します。最初の10行が返されます。
Command> SELECT ROWS 1 TO 10 SUBSTR (job_id, 4,10),department_id, manager_id, SUM (salary) FROM employees >GROUP BY SUBSTR (job_id,4,10),department_id, manager_id > HAVING (department_id, manager_id) IN > (SELECT department_id, manager_id FROM employees x > WHERE x.department_id = employees.department_id) > ORDER BY SUBSTR (job_id, 4,10),department_id,manager_id; < ACCOUNT, 100, 108, 39600 > < ACCOUNT, 110, 205, 8300 > < ASST, 10, 101, 4400 > < CLERK, 30, 114, 13900 > < CLERK, 50, 120, 22100 > < CLERK, 50, 121, 25400 > < CLERK, 50, 122, 23600 > < CLERK, 50, 123, 25900 > < CLERK, 50, 124, 23000 > < MAN, 20, 100, 13000 > 10 rows found.
次の例では、更新のためにemployees表をロックし、ロックが取得できるまで10秒間待機します。ロックが10秒以内に取得できない場合、エラーが返されます。最初の5行が選択されます。
Command> SELECT FIRST 5 last_name FROM employees FOR UPDATE WAIT 10; < King > < Kochhar > < De Haan > < Hunold > < Ernst > 5 rows found.
この例では、更新のためにdepartments表をロックします。選択した行が別のプロセスにロックされており、ロックが取得できない場合はエラーが返されます。これは、NOWAITが指定されているためです。
Command> SELECT FIRST 5 last_name e FROM employees e, departments d WHERE e.department_id = d.department_id FOR UPDATE OF d.department_id NOWAIT; < Whalen > < Hartstein > < Fay > < Raphaely > < Khoo > 5 rows found.
HRスキーマを使用して、副問合せとFOR UPDATE句を同時に使用する例を示します。
Command> SELECT employee_id, job_id FROM job_history WHERE (employee_id, job_id) NOT IN (SELECT employee_id, job_id FROM employees) FOR UPDATE; < 101, AC_ACCOUNT > < 101, AC_MGR > < 102, IT_PROG > < 114, ST_CLERK > < 122, ST_CLERK > < 176, SA_MAN > < 200, AC_ACCOUNT > < 201, MK_REP > 8 rows found.
SELECT ROWS m
to n
およびSELECT FIRSTの動的パラメータのプレースホルダを使用する例を示します。
Command> SELECT ROWS ? TO ? employee_id FROM employees; Type '?' for help on entering parameter values.Type '*' to end prompting and abort the command.Type '-' to leave the parameter unbound.Type '/;' to leave the remaining parameters unbound and execute the command. Enter Parameter 1 (TT_INTEGER) > 1 Enter Parameter 2 (TT_INTEGER) > 3 < 100 > < 101 > < 102 > 3 rows found. Command> SELECT ROWS :a TO :b employee_id FROM Eeployees; Type '?' for help on entering parameter values.Type '*' to end prompting and abort the command.Type '-' to leave the parameter unbound.Type '/;' to leave the remaining parameters unbound and execute the command. Enter Parameter 1 (TT_INTEGER) > 1 Enter Parameter 2 (TT_INTEGER) > 3 < 100 > < 101 > < 102 > 3 rows found. Command> SELECT FIRST ? employee_id FROM Eeployees; Type '?' for help on entering parameter values.Type '*' to end prompting and abort the command.Type '-' to leave the parameter unbound.Type '/;' to leave the remaining parameters unbound and execute the command. Enter Parameter 1 (TT_INTEGER) > 3 < 100 > < 101 > < 102 > 3 rows found.
SQL構文
SELECT文のSelectList
パラメータの構文は、次のとおりです。
{* | [Owner.]TableName.* | { Expression | [[Owner.]TableName.]ColumnName | [[Owner.]TableName.]ROWID | NULL } [[AS] ColumnAlias] } [,...]
パラメータ
SELECT文のSelectList
には、次のパラメータがあります。
説明
各句は、構文に示されたとおりの順序で指定する必要があります。
TimesTenでは、SelectList
内の副問合せはサポートされません。
SelectListの結果列は、次のいずれかの方法で取得できます。
結果列は、FROM句にリストされているいずれかの表から直接取得できます。
結果列の値は、FROM句にリストされている表の特定の列の値を使用して、算術式を使用して計算できます。
単一表の複数の列の値を算術式で結合して、結果列の値を生成できます。
集計関数(AVG、MAX、MIN、SUMおよびCOUNT)を使用すると、行のグループの結果列の値を計算できます。集計関数は、単独で使用することも、式の中で使用することもできます。同じ表の複数の列を処理するDISTINCTオプションを含む集計関数を指定できます。GROUP BY句を指定しない場合は、問合せを満たすすべての行に関数が適用されます。GROUP BY句を指定した場合は、GROUP BY句で定義された各グループに1回ずつ関数が適用されます。GROUP BY句とともに集計関数を使用する場合は、SelectListに集計関数、算術式、GROUP BY句の列を含めることができます。
固定値を含む結果列は、定数を指定するか、または定数のみを含む式を使用して作成できます。
SelectListを使用すると、結果列の取得方法を指定できるだけでなく、問合せ結果を表示する位置を制御できます。SelectListで最初に指定した結果列は、問合せ結果の最も左側の列に表示されます。
SelectListの結果列は、左から右の順に番号が付けられます。左端の列の番号は1です。ORDER BY句内のこの列番号によって、結果列を参照できます。これは、算術式または集計関数で定義した列を参照する場合に特に便利です。
表をその表自身と結合するには、FROM句内で表の相関名を複数回定義して、SelectListとWHERE句でその相関名を使用して、その表の列を指定します。
GROUP BY句を使用した場合、SelectListに従って、グループごとに1つの応答が返されます。
行は、グループ化される前にWHERE句によって削除されます。
GROUP BY句は、結果行をグループ化します。
SelectListの集計関数は、グループ単位で計算されます。
例
次の文は、部品が配送されるまでの平均日数を返します。
SELECT AVG(deliverydays) FROM purchasing.supplyprice;
次の文は、20日未満で配送されるすべての部品の部品番号および配送時刻が返されます。
SELECT partnumber, deliverydays FROM purchasing.supplyprice WHERE deliverydays < 20;
単一の部品で複数行が返される場合があります。
次の文は、各部品の部品番号と平均価格を返します。
SELECT partnumber, AVG(unitprice) FROM purchasing.supplyprice GROUP BY partnumber;
この例では、結合によってカリフォルニア州の業者の名前と住所が返されます。 行は、partnumber
の昇順で返されます。 重複する部品番号を含む行は、vendorname
の昇順で返されます。
FROM句では、SelectListとWHERE句の両方で使用される、2つの相関名(v
とs
)を定義しています。
vendornumber
は、vendors
とsupplyprice
で共通する唯一の列です。
SELECT partnumber, vendorname, s.vendornumber, vendorcity FROM purchasing.supplyprice s, purchasing.vendors v WHERE s.vendornumber = v.vendornumber AND vendorstate = 'CA' ORDER BY partnumber, vendorname;
この問合せでは、表purchasing.parts
をそれ自身に結合して、シリアル番号が1133-P-01
の部品と同じ販売価格の部品を特定します。
SELECT q.partnumber, q.salesprice FROM purchasing.parts p, purchasing.parts q WHERE p.salesprice = q.salesprice AND p.serialnumber = '1133-P-01';
次に、特定の行のROWIDを取得する方法の例を示します。 取得したROWIDの値は、後で別のSELECT文、DELETE文またはUPDATE文で使用できます。
SELECT rowid FROM purchasing.vendors WHERE vendornumber = 123;
次に、列の別名を使用して、employees
表からデータを取得する方法の例を示します。
SELECT max(salary) AS max_salary FROM employees;
SQL構文
SELECT文のTableSpec
パラメータの構文は、次のとおりです。
{[Owner.]TableName [CorrelationName] | JoinedTable | DerivedTable}
単純な表指定の構文は、次のとおりです。
[Owner.]TableName
パラメータ
SELECT文のTableSpec
には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
[ Owner .] TableName |
参照する表を指定します。 |
CorrelationName |
CorrelationName は、直前で指定した表へのシノニムを指定します。その表の列にアクセスする際、文の中で実際の表名ではなく相関名を使用します。相関名は、基本名の構文ルールを満たしている必要があります。「基本名」を参照してください。
単一のUPDATE文のすべての相関名は、一意である必要があります。 |
DerivedTable |
SELECT問合せの評価から導出された表を指定します。 このSELECT問合せには、FIRST NumRows またはROWS m TO n 句を指定できません。 |
JoinedTable |
表の結合を定義する問合せを指定します。 JoinedTable の構文の詳細は、「JoinedTable」を参照してください。 |
導出表は、FROM句のSELECT文の結果で、別名を持ちます。
SQL構文
DerivedTable
の構文は、次のとおりです。
(Subquery) [CorrelationName]
パラメータ
SELECT文のTableSpec
句のDerivedTable
には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
Subquery |
副問合せの詳細は、「副問合せ」を参照してください。 |
CorrelationName |
CorrelationName は、問合せで参照されるあらゆる表名とも異なっている必要があります。 CorrelationName はオプションです。 |
説明
別の表を参照しないSELECT文ではDUAL表を使用できますが、この場合は少なくとも1つの行を返す必要があります。DUAL表からの選択は、SELECT文を使用して定数式を計算する場合に役立ちます。DUALには行が1つしかないため、定数が返されるのは1回のみです。
SelectQuery
は、別の導出表の列を参照できません。
導出表は、結合表のソースとしては使用できません。
JoinedTable
パラメータには、CROSS JOIN、INNER、LEFTまたはRIGHT OUTER JOINから導出された表を指定します。
SQL構文
JoinedTable
の構文は、次のとおりです。
{CrossJoin | QualifiedJoin}
CrossJoin
は、次のようになります。
TableSpec1 CROSS JOIN TableSpec2
QualifiedJoin
は、次のようになります。
TableSpec1 [JoinType] JOIN TableSpec2 ON SearchCondition
QualifiedJoin
パラメータでは、JoinType
の構文は、次のようになります。
{INNER | LEFT [OUTER] | |RIGHT [OUTER]}
パラメータ
SELECT文のTableSpec
句のJoinedTable
には、次のパラメータがあります。
説明
FULL OUTER JOINはサポートされていません。
結合表は、マテリアライズド・ビューを定義する文以外のすべての文で、FROM句内の表を置き換えるために使用できます。したがって、結合表は、UNION、MINUSまたはINTERSECT、副問合せ、非マテリアライズド・ビューまたは導出表で使用できます。
結合表のオペランドとして一時表は指定できませんが、ビューは指定できます。
OUTER JOINは2つの方法で指定できます。1つはWHERE句のSearchCondition
で(+)演算子を使用する方法、もう1つはJOIN表演算を使用する方法です。この2つの方法を同じ文で併用することはできません。
結合順およびグループ化はJoinedTable
演算と併用できますが、(+)とは併用できません。たとえば、次の演算はサポートされていません。
t LEFT JOIN (t2 INNER JOIN t3 ON x2=x3) ON (x1 = x2 + x3)
例
次の文は表t1
およびt2
を結合して、t1
の行でx1
が10未満のものをすべて返します。
SELECT * FROM t1 LEFT JOIN t2 ON x1=x2 WHERE x1<10;
関連項目