SELECT
SELECT文は、1つ以上の表からデータを取得します。取得されたデータは、結果表、結果セットまたは問合せ結果と呼ばれる表の形式で表示されます。
必要な権限
オブジェクトの所有者に必要な権限はありません。
別のユーザーのオブジェクトの場合、SELECTが必要です。
別のユーザーのオブジェクトの場合、SELECT ... FOR UPDATEにはUPDATE権限も必要です。
TimesTen Scaleoutでの使用
この文は、TimesTen Scaleoutでサポートされています。
SQL構文
SELECT文の一般的な構文は、次のとおりです。
[WithClause] SELECT [hint][FIRST NumRows | ROWS m TO n] [ALL | DISTINCT] SelectList FROM TableSpec [,...] [WHERE SearchCondition] [GROUP BY GroupByClause [,...] [HAVING SearchCondition]] [ORDER BY OrderByClause [,...]] [FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...]] [NOWAIT | WAIT Seconds]]
集合演算子UNION、UNION ALL、MINUSまたはINTERSECTを含むSELECT文の構文は、次のとおりです。
SELECT [hint] [ROWS m TO n] [ALL] SelectList FROM TableSpec [,...] [WHERE SearchCondition] [GROUP BY GroupByClause [,...] [HAVING SearchCondition] [,...]] {UNION [ALL] | MINUS | INTERSECT} SELECT [ROWS m TO n] [ALL] SelectList FROM TableSpec [,...] [WHERE SearchCondition] [GROUP BY GroupByClause [,...] [HAVING SearchCondition [,...] ] ] [ORDER BY OrderByClause [,...] ]
OrderByClauseの構文は次のとおりです。
{ColumnID|ColumnAlias|Expression} [ASC|DESC] [NULLS { FIRST|LAST }]パラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
|
|
|
取得する行の数を指定します。 |
|
|
取得する行の範囲を指定し、
|
|
|
問合せ結果の重複する行が削除されないようにします。 |
|
|
問合せ結果の各行が一意となるようにします。この比較では、 LOB列には |
|
|
問合せ結果の列の導出方法を指定します。選択リストの構文の詳細は、「SelectList」を参照してください。 |
|
|
|
|
|
列および 検索条件の詳細は、「検索条件」を参照してください。 |
|
|
|
|
|
副問合せは、 |
|
|
単純な結合(内部結合とも呼ばれる)では、 |
|
|
指定した列または式に基づいて、問合せの結果行をソートします。ソート・キーとして使用する列を、優先順位の高いものから順に指定します。
|
|
|
選択リストの列に対応する必要があります。ソートする列を指定するには、その名前または序数を指定します。選択リストの最初の列の番号は1です。選択リストの列を参照する場合、それが単純な列でない場合は、列番号を使用する方が適切です。これには、集計関数、算術式、定数などが該当します。
|
|
|
|
|
|
|
|
|
順序付けする問合せでNULL値の行が最初に返されるようにするには、
|
|
|
|
|
|
両方の 結果内の列の長さは、列に対応する選択値のうち長い方になります。最終的な結果の列名は、最も左側で選択された列の名前になります。 集合演算子 集合演算子の一方または両方のオペランドに集合演算子を指定できます。複数の集合演算子やネストされた集合演算子は、左から右に評価されます。 同じ問合せで集合演算子を同時に指定できます。 集合演算子を指定する
|
説明
-
相関名を使用する場合、相関名は基本名の構文ルールを満たしている必要があります。1つの
SELECT文のすべての相関名は、一意である必要があります。相関名は、表をその表自体に結合する場合に役立ちます。FROM句内で表の相関名を複数回定義し、選択リストとWHERE句でその相関名を使用して、その表の列を指定します。相関名の詳細は、「TableSpec」を参照してください。 -
SELECT...FOR UPDATEは副問合せを指定するSELECT文で使用できますが、最も外側の問合せでのみ指定できます。 -
問合せで、
FIRSTNumRowsまたはROWSmTOnが指定されている場合、返される行の数を制限するためにROWNUMを使用することはできません。 -
FIRSTNumRowsとROWSmTOnは、同じSELECT文で同時に使用することはできません。 -
PL/SQLで
SELECT...INTO文を使用します。PL/SQLの外側でSELECT...INTO文を使用する場合、TimesTenでは構文は許容されますが、暗黙的に無視されます。
例
この例では、SELECT文での列の別名(max_salary)の使用方法を示します。
SELECT MAX(salary) AS max_salary FROM employees WHERE employees.hire_date > '2000-01-01 00:00:00'; < 10500 > 1 row found.
この例では、2つの表ordersおよびlineitemsを使用します。
orders表およびlineitems表は、次のように作成されます。
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にあります。
年頭以降に入力されたすべての注文の合計を検索するには、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';
次の問合せについて考えてみます:
SELECT * FROM tablea, tableb WHERE tablea.column1 = tableb.column1 AND tableb.column2 > 5 FOR UPDATE;
この問合せは、次の条件を満たすtableaのすべての行をロックします。
-
tablea.column1の値が、少なくとも1つのtableb.column1の値と同じ。このとき、tableb.column2は5より大きい。
この問合せは、次の条件を満たすtablebのすべての行もロックします。
-
tableb.column2の値が5よりも大きい。 -
tableb.column1の値が、少なくとも1つのtablea.column1の値と同じ。
WHERE句を指定しない場合、両方の表のすべての行がロックされます。
この例は、(+)結合演算子を示しています。
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;
結合のその他の例は、「JoinedTable」を参照してください。
次の例は、student表の順序の現在の値を返します。
SELECT SEQ.CURRVAL FROM student;
次の問合せの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.
次の例では、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 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 FIRST ? 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) > 3 < 100 > < 101 > < 102 > 3 rows found.
次の例では、ORDER BY句でのNULLS LASTの使用方法を示します。employees表を問い合せて、コミッションの割合が.30より大きいかNULLである従業員を検索します。最初の7人の従業員を選択し、commission_pctとlast_nameで順序付けします。commision_pctを降順で順序付けし、NULLS LASTを使用してNULL値の行を問合せの最後に表示します。commission_pctとlast_nameを出力します。
Command> SELECT FIRST 7 commission_pct,last_name
FROM employees where commission_pct > .30
OR commission_pct IS NULL
ORDER BY commission_pct DESC NULLS LAST,last_name;
< .4, Russell >
< .35, King >
< .35, McEwen >
< .35, Sully >
< <NULL>, Atkinson >
< <NULL>, Austin >
< <NULL>, Baer >
7 rows found.WithClause
構文
WithClauseには、次の構文があります。
WITHQueryNameAS (Subquery) [,QueryNameAS (Subquery)] ...
パラメータ
WithClauseには、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
|
説明
副問合せのファクタリングによってWITH句が提供され、この句を使用して副問合せブロックに名前を割り当てることができ、その後はその名前をメインのSELECT問合せで複数回参照できます。問合せ名は、メインの問合せとメインの問合せに含まれる副問合せで参照できます。
WITH句は、メインのSELECT文の接頭辞としてのみ定義できます。
副問合せのファクタリングは、重複する、または複雑な副問合せブロックを1つ以上の場所で使用する複雑な問合せの簡素化に役立ちます。また、TimesTenでは、副問合せのファクタリングを使用し、副問合せブロックを一度評価およびマテリアライズして、その結果をSELECT文での各参照に提供することで、問合せを最適化します。
メインの問合せで集合演算子UNION、MINUS、およびINTERSECTを指定できます。
WITH句の使用制限:
-
ビューまたはマテリアライズド・ビュー定義で
WITH句を使用しないでください。 -
再帰的な副問合せのファクタリングはサポートされていません。
-
副問合せまたは導出表では
WITH句を使用しないでください。 -
問合せの別名に列パラメータ・リストを指定できません。たとえば、TimesTenでは
WITHw1(c1,c2)AS...はサポートされません。
例
次の例では、初期問合せブロックに対して問合せ名dept_costsおよびavg_costを作成し、これらの名前をメインの問合せの本体で使用します。
Command> WITH dept_costs AS (
SELECT department_name, SUM(salary) dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY department_name),
avg_cost AS (
SELECT SUM(dept_total)/COUNT(*) avg
FROM dept_costs)
SELECT * FROM dept_costs
WHERE dept_total >
(SELECT avg FROM avg_cost)
ORDER BY department_name;
> DEPARTMENT_NAME DEPT_TOTAL
-------------------------------
Sales 304500
Shipping 156400SelectList
SQL構文
SELECT文のSelectListパラメータには、次の構文があります。
{* | [Owner.]TableName.* |
{ Expression | [[Owner.]TableName.]ColumnName |
[[Owner.]TableName.]ROWID | NULL
}
[[AS] ColumnAlias] } [,...]パラメータ
SELECT文のSelectListパラメータには、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
問合せ結果の列として、 |
|
|
指定した表のすべての列を結果に含めます。 |
|
|
集計問合せに、 選択リストが集計問合せでない場合、列参照は 集計問合せの選択リスト内の列参照は、 |
|
|
指定された所有者の指定された表の特定の列を含めます。順序の |
|
|
指定された所有者の指定された表の |
|
|
|
|
|
|
説明
-
各句は、構文に示されたとおりの順序で指定する必要があります。
-
TimesTenでは、SelectListで副問合せはサポートされません。
-
選択リストの結果列は、次のいずれかの方法で取得できます。
-
結果列は、
FROM句にリストされているいずれかの表から直接取得できます。 -
結果列の値は、
FROM句にリストされている表の特定の列の値を使用して、算術式を使用して計算できます。 -
単一表の複数の列の値を算術式で結合して、結果列の値を生成できます。
-
集計関数(
AVG、MAX、MIN、SUMおよびCOUNT)を使用すると、行のグループの結果列の値を計算できます。集計関数は、単独で使用することも、式の中で使用することもできます。同じ表の複数の列を処理するDISTINCT修飾子を含む集計関数を指定できます。GROUP BY句を指定しない場合は、問合せを満たすすべての行に関数が適用されます。GROUP BY句を指定した場合は、GROUP BY句で定義された各グループに1回ずつ関数が適用されます。GROUP BY句とともに集計関数を使用する場合は、選択リストに集計関数、算術式、GROUP BY句の列を含めることができます。GROUP BY句の詳細は、「GROUP BY句」を参照してください。 -
固定値を含む結果列は、定数を指定するか、または定数のみを含む式を使用して作成できます。
-
-
選択リストを使用すると、結果列の取得方法を指定できるだけでなく、問合せ結果を表示する位置を制御できます。選択リストで最初に指定した結果列が問合せ結果の最も左側の列に表示され、残りの列も同様に表示されます。
-
SelectListの結果列は、左から右の順に番号が付けられます。左端の列の番号は1です。
ORDER BY句内のこの列番号によって、結果列を参照できます。これは、算術式または集計関数で定義した列を参照する場合に特に便利です。 -
表をその表自体と結合するには、
FROM句内で表の相関名を複数回定義し、選択リストとWHERE句でその相関名を使用して、その表の列を指定します。 -
GROUP BY句を使用した場合、次のように、選択リストに従ってグループごとに1つの応答が返されます。-
行は、グループ化される前に
WHERE句によって削除されます。 -
GROUP BY句は、結果行をグループ化します。詳細は、「GROUP BY句」を参照してください。 -
選択リストの集計関数は、グループ単位で計算されます。
-
例
次の例では、部品が届くまでの平均日数の値のみが返されます。
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句では、選択リストと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;
TableSpec
SQL構文
SELECT文のTableSpecパラメータには、次の構文があります。
TableNameSyntax | JoinedTable | DerivedTable TableNameSyntax::= [Owner.]TableName [CorrelationName] | ([Owner.]TableName) [CorrelationName] | ([Owner.]TableName [CorrelationName])
単純な表指定の構文は、次のとおりです。
[Owner.]TableName or ([Owner.]TableName)
パラメータ
SELECT文のTableSpecパラメータには、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
参照する表を指定します。カッコはオプションです。 |
|
|
単一の文のすべての相関名は、一意である必要があります。 |
|
|
表の結合を定義する問合せを指定します。詳細は、「JoinedTable」を参照してください。 |
|
|
|
JoinedTable
JoinedTableパラメータには、CROSS JOIN、INNER JOIN、LEFT OUTER JOINまたは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パラメータには、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
2つの表に相互結合を実行します。戻り値は、入力表のデカルト積となる結果表です。結果は、次の構文を持つ問合せと同じになります。
|
|
|
結合が |
|
|
|
|
|
|
|
|
実行する結合の種類を指定します。サポートされる結合の種類は、次のとおりです。
|
|
|
|
説明
-
FULL OUTER JOINはサポートされていません。 -
結合表は、マテリアライズド・ビューを定義する文以外のすべての文で、
FROM句内の表を置き換えるために使用できます。したがって、結合表は、UNION、MINUS、INTERSECT、副問合せ、非マテリアライズド・ビューまたは導出表で使用できます。 -
結合表のオペランドに副問合せは指定できません。たとえば、次の文はサポートされていません。
SELECT * FROM regions INNER JOIN (SELECT * FROM countries) table2 ON regions.region_id=table2.region_id;
-
結合表のオペランドとしてビューを指定できます。
-
結合表のオペランドとして一時表は指定できません。
-
OUTER JOINは、WHERE句のSearchConditionでの(+)演算子の使用またはJOIN表操作の使用という2つの方法で指定できます。同じ文で2つの指定方式の両方を使用することはできません。 -
結合順およびグループ化は
JoinedTable演算と併用できますが、(+)演算子とは併用できません。たとえば、次の演算は(+)演算子と併用できません。t LEFT JOIN (t2 INNER JOIN t3 ON x2=x3) ON (x1 = x2 - x3)
例
これらの例では、HRスキーマのregionsおよびcountries表を使用します。
次の例では、左外部結合を実行します。
SELECT * FROM regions LEFT JOIN countries ON regions.region_id=countries.region_id WHERE regions.region_id=3; < 3, Asia, JP, Japan, 3 > < 3, Asia, CN, China, 3 > < 3, Asia, IN, India, 3 > < 3, Asia, AU, Australia, 3 > < 3, Asia, SG, Singapore, 3 > < 3, Asia, HK, HongKong, 3 > 6 rows found.
次のように、左外部結合を(+)演算子とともに実行することもできます。
SELECT * FROM regions, countries
WHERE regions.region_id=countries.region_id (+)
AND regions.region_id=3;次の例では、右外部結合を実行します。
SELECT * FROM regions RIGHT JOIN countries ON regions.region_id=wountries.region_id WHERE regions.region_id=3; < AU, Australia, 3, 3, Asia > < CN, China, 3, 3, Asia > < HK, HongKong, 3, 3, Asia > < IN, India, 3, 3, Asia > < JP, Japan, 3, 3, Asia > < SG, Singapore, 3, 3, Asia > 6 rows found.
次の例では、右外部結合を(+)演算子とともに実行します。
SELECT * FROM countries, regions
WHERE regions.region_id (+)=countries.region_id
AND countries.region_id=3;
< JP, Japan, 3, 3, Asia >
< CN, China, 3, 3, Asia >
< IN, India, 3, 3, Asia >
< AU, Australia, 3, 3, Asia >
< SG, Singapore, 3, 3, Asia >
< HK, HongKong, 3, 3, Asia >
6 rows found.右結合方式では、同じ行が異なる表示順序で生成されることに注意してください。結合結果の行の順序は予期できません。
次の例では、内部結合を実行します。
SELECT * FROM regions INNER JOIN countries ON regions.region_id=countries.region_id WHERE regions.region_id=2; < 2, Americas, US, United States of America, 2 > < 2, Americas, CA, Canada, 2 > < 2, Americas, BR, Brazil, 2 > < 2, Americas, MX, Mexico, 2 > < 2, Americas, AR, Argentina, 2 > 5 rows found.
次の例では、相互結合を実行します。
SELECT * FROM regions CROSS JOIN countries WHERE regions.region_id=1; < 1, Europe, AR, Argentina, 2 > < 1, Europe, AU, Australia, 3 > < 1, Europe, BE, Belgium, 1 > < 1, Europe, BR, Brazil, 2 > ... < 1, Europe, SG, Singapore, 3 > < 1, Europe, UK, United Kingdom, 1 > < 1, Europe, US, United States of America, 2 > < 1, Europe, ZM, Zambia, 4 > < 1, Europe, ZW, Zimbabwe, 4 > 25 rows found.
DerivedTable
導出表は、FROM句のSELECT文の結果で、別名を持ちます。
SQL構文
DerivedTableの構文は次のとおりです。
(Subquery) [CorrelationName]
パラメータ
SELECT文のTableSpec句のDerivedTableパラメータには、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
副問合せの詳細は、「副問合せ」を参照してください。 |
|
|
オプションで、 |