SnowConvert AI : Oracle - 結合¶
結合は、2つ以上のテーブル、ビュー、またはマテリアライズドビューの行を結合するクエリです。Oracleデータベースは、複数のテーブルがクエリの
FROM句に現れるたびに結合を実行します。(Oracle SQL 言語リファレンス JOINS)
アンチ結合¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
アンチ結合は、述語の左辺から、述語の右辺に対応する行がない行を返します。これは、右側のサブクエリにマッチしない(NOT IN)行を返します。サブクエリが
WHERE句のORブランチ上にある場合、アンチ結合変換は実行できません。(Oracle SQL 言語リファレンスアンチ結合)。
Snowflakeは同じ構文をサポートしているため、この種の 結合 では特別な変換は行われません。
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by句 を追加しました。
注釈
結果セットが大きすぎるため、行制限句 が追加されました。これを削除すると、結果セット全体を取得できます。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
Where Not In¶
Oracle¶
SELECT e.employee_id, e.first_name, e.last_name FROM hr.employees e
WHERE e.department_id NOT IN
(SELECT h.department_id FROM hr.departments h WHERE location_id = 1700)
ORDER BY e.last_name
FETCH FIRST 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
|---|---|---|
174 |
Ellen |
Abel |
166 |
Sundar |
Ande |
130 |
Mozhe |
Atkinson |
105 |
デイビッド |
Austin |
204 |
Hermann |
Baer |
167 |
Amit |
Banda |
172 |
Elizabeth |
Bates |
192 |
Sarah |
Bell |
151 |
デイビッド |
Bernstein |
129 |
Laura |
Bissot |
Snowflake¶
SELECT e.employee_id, e.first_name, e.last_name FROM
hr.employees e
WHERE e.department_id NOT IN
!!!RESOLVE EWI!!! /*** SSC-EWI-0108 - THE FOLLOWING SUBQUERY MATCHES AT LEAST ONE OF THE PATTERNS CONSIDERED INVALID AND MAY PRODUCE COMPILATION ERRORS ***/!!!
(SELECT h.department_id FROM
hr.departments h WHERE location_id = 1700)
ORDER BY e.last_name
FETCH FIRST 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
|---|---|---|
174 |
Ellen |
Abel |
166 |
Sundar |
Ande |
130 |
Mozhe |
Atkinson |
105 |
デイビッド |
Austin |
204 |
Hermann |
Baer |
167 |
Amit |
Banda |
172 |
Elizabeth |
Bates |
192 |
Sarah |
Bell |
151 |
デイビッド |
Bernstein |
129 |
Laura |
Bissot |
Where Not Exists¶
Oracle¶
SELECT d.department_id, d.department_name
FROM hr.departments d
WHERE NOT EXISTS
(SELECT 1 FROM hr.employees E WHERE
e.department_id = d.department_id)
ORDER BY d.department_id
FETCH FIRST 10 ROWS ONLY;
結果¶
DEPARTMENT_ID |
DEPARTMENT_NAME |
|---|---|
120 |
財務省 |
130 |
法人税 |
140 |
管理と信用 |
150 |
株主サービス |
160 |
利点 |
170 |
製造 |
180 |
構築 |
190 |
契約 |
200 |
操作 |
210 |
IT サポート |
Snowflake¶
SELECT d.department_id, d.department_name
FROM
hr.departments d
WHERE NOT EXISTS
!!!RESOLVE EWI!!! /*** SSC-EWI-0108 - THE FOLLOWING SUBQUERY MATCHES AT LEAST ONE OF THE PATTERNS CONSIDERED INVALID AND MAY PRODUCE COMPILATION ERRORS ***/!!!
(SELECT 1 FROM
hr.employees E WHERE
e.department_id = d.department_id)
ORDER BY d.department_id
FETCH FIRST 10 ROWS ONLY;
結果¶
DEPARTMENT_ID |
DEPARTMENT_NAME |
|---|---|
120 |
財務省 |
130 |
法人税 |
140 |
管理と信用 |
150 |
株主サービス |
160 |
利点 |
170 |
製造 |
180 |
構築 |
190 |
契約 |
200 |
操作 |
210 |
IT サポート |
既知の問題¶
1.言語間の結果の順序の不一致¶
クエリの結果は両方のデータベースエンジンで同じ内容になりますが、クエリに Order By 句が定義されていない場合、順序が異なる可能性があります。
バンド結合¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
バンド結合 は、1つのデータセットのキー値が2番目のデータセットの指定された範囲(「バンド」)内に収まっていなければならない特殊なタイプの非等価結合です。同じテーブルを1つ目と2つ目のデータセットとして使用できます。(Oracle SQL 言語リファレンス BandJoin)
このセクションでは、Snowflakeでバンド結合がどのように実行されるかを見ていきますが、実行プランはOracleの改良バージョンと非常によく似ています。
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by 句を追加しました。
注釈
結果セットが大きすぎるため、行制限句 が追加されました。これを削除すると、結果セット全体を取得できます。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
警告
テーブルを作成せずにこのコードを移行した場合、コンバータは列のセマンティック情報を読み込むことができず、演算処理で警告が表示されます。
ベーシックバンド結合ケース¶
Oracle¶
SELECT e1.last_name ||
' has salary between 100 less and 100 more than ' ||
e2.last_name AS "SALARY COMPARISON"
FROM employees e1,
employees e2
WHERE e1.salary
BETWEEN e2.salary - 100
AND e2.salary + 100
ORDER BY "SALARY COMPARISON"
FETCH FIRST 10 ROWS ONLY
結果¶
SALARY に COMPARISON |
|---|
Abelの給与はAbelより100少ない場合もあれば、100多い場合もある |
Abelの給与はCambraultより100少ない場合もあれば、100多い場合もある |
Abelの給与はRaphaelyより100少ない場合もあれば、100多い場合もある |
Andeの給与は、Andeより100少ない場合もあれば、100多い場合もある |
Andeの給与はMavrisより100少ない場合もあれば、100多い場合もある |
Andeの給与はVollmanより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Atkinsonより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Baidaより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Gatesより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Geoniより100少ない場合もあれば、100多い場合もある |
Snowflake¶
SELECT
NVL( e1.last_name :: STRING, '') ||
' has salary between 100 less and 100 more than ' || NVL(
e2.last_name :: STRING, '') AS "SALARY COMPARISON"
FROM
employees e1,
employees e2
WHERE e1.salary
BETWEEN
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! e2.salary - 100
AND
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! e2.salary + 100
ORDER BY "SALARY COMPARISON"
FETCH FIRST 10 ROWS ONLY;
結果¶
SALARY に COMPARISON |
|---|
Abelの給与はAbelより100少ない場合もあれば、100多い場合もある |
Abelの給与はCambraultより100少ない場合もあれば、100多い場合もある |
Abelの給与はRaphaelyより100少ない場合もあれば、100多い場合もある |
Andeの給与は、Andeより100少ない場合もあれば、100多い場合もある |
Andeの給与はMavrisより100少ない場合もあれば、100多い場合もある |
Andeの給与はVollmanより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Atkinsonより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Baidaより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Gatesより100少ない場合もあれば、100多い場合もある |
Atkinsonの給与は、Geoniより100少ない場合もあれば、100多い場合もある |
警告
一部の SELECT ステートメントを対応するテーブルなしで移行すると、[SSC-EWI-OR0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0036)が発生する可能性があります。型解決の問題。この警告を避けるには、CREATE TABLE をファイル内に含めます。
結果は同じで、BAND JOIN は機能的に同等です。
実行計画
追加情報として、バンド結合の特別な点は実行計画です。
次の画像は、テストクエリの 拡張実行計画 (Oracle 12c以降に実装)を示しています。

そして次の画像では、Snowflakeでの実行計画を見てみましょう。

注釈
Snowflakeの実行プランは、Oracleの最適化バージョンと非常によく似ています。クエリの最終的な期間とパフォーマンスは、その他多くの要因に影響され、各 DBMS の内部機能に完全に依存します。
既知の問題¶
1.言語間の結果の順序の不一致¶
クエリの結果は両方のデータベースエンジンで同じ内容になりますが、クエリに Order By 句が定義されていない場合、順序が異なる可能性があります。
関連 EWIs¶
[SSC-EWI-OR0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0036)[:](../../..././general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0036)型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
デカルト積¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
結合クエリ内の2つのテーブルに結合条件がない場合、Oracleデータベースはそれらのデカルト積を返します。Oracleは、一方のテーブルの各行を他方のテーブルの各行に結合します。(Oracle SQL リファレンスデカルト積サブセクション)
OracleとSnowflakeは、デカルト積と同じ動作をする ANSI クロス結合構文にも対応しています。
Snowflakeは同じ構文をサポートしているため、この種の 結合 では特別な変換は行われません。
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by句 を追加しました。
注釈
結果セットが大きすぎるため、行制限句 が追加されました。これを削除すると、結果セット全体を取得できます。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
暗黙構文¶
Oracle¶
-- Resulting rows
SELECT * FROM hr.employees, hr.departments
ORDER BY first_name
FETCH FIRST 5 ROWS ONLY;
-- Resulting total rows
SELECT COUNT(*) FROM hr.employees, hr.departments;
結果1¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
10 |
管理 |
200 |
1700 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
50 |
配送 |
121 |
1500 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
40 |
人事 |
203 |
2400 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
30 |
購買 |
114 |
1700 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
20 |
マーケティング |
201 |
1800 |
結果2¶
COUNT(*) |
|---|
2889 |
Snowflake¶
-- Resulting rows
SELECT * FROM
hr.employees,
hr.departments
ORDER BY first_name
FETCH FIRST 5 ROWS ONLY;
-- Resulting total rows
SELECT COUNT(*) FROM
hr.employees,
hr.departments;
結果1¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 |
ST_MAN |
8200.00 |
100 |
50 |
40 |
人事 |
203 |
2400 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 |
ST_MAN |
8200.00 |
100 |
50 |
20 |
マーケティング |
201 |
1800 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 |
ST_MAN |
8200.00 |
100 |
50 |
10 |
管理 |
200 |
1700 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 |
ST_MAN |
8200.00 |
100 |
50 |
50 |
配送 |
121 |
1500 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 |
ST_MAN |
8200.00 |
100 |
50 |
30 |
購買 |
114 |
1700 |
結果2¶
COUNT(*) |
|---|
2889 |
クロス結合構文¶
Oracle¶
-- Resulting rows
SELECT * FROM hr.employees CROSS join hr.departments
ORDER BY first_name
FETCH FIRST 5 ROWS ONLY;
-- Resulting total rows
SELECT COUNT(*) FROM hr.employees CROSS join hr.departments;
結果1¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
10 |
管理 |
200 |
1700 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
50 |
配送 |
121 |
1500 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
40 |
人事 |
203 |
2400 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
30 |
購買 |
114 |
1700 |
|
121 |
Adam |
Fripp |
AFRIPP |
650.123.2234 |
2005-04-10 00:00:00.000 |
ST_MAN |
8200 |
100 |
50 |
20 |
マーケティング |
201 |
1800 |
結果2¶
COUNT(*) |
|---|
2889 |
Snowflake¶
-- Resulting rows
SELECT * FROM
hr.employees
CROSS join hr.departments
ORDER BY first_name
FETCH FIRST 5 ROWS ONLY;
-- Resulting total rows
SELECT COUNT(*) FROM
hr.employees
CROSS join hr.departments;
既知の問題¶
1.言語間の結果の順序の不一致¶
クエリの結果は両方のデータベースエンジンで同じ内容になりますが、クエリに Order By 句が定義されていない場合、順序が異なる可能性があります。
関連 EWIs¶
関連 EWIs はありません。
等価結合¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
等価結合は結合の暗黙的な形式で、等号演算子を含む結合条件です。Oracle等価結合の詳細情報については、こちら をご覧ください。
Snowflakeは同じ構文をサポートしているため、この種の 結合 では特別な変換は行われません。
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by句 を追加しました。
注釈
結果セットが大きすぎるため、行制限句 が追加されました。これを削除すると、結果セット全体を取得できます。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
ベーシック等価結合ケース¶
Oracle¶
SELECT last_name, job_id, hr.departments.department_id, department_name
FROM hr.employees, hr.departments
WHERE hr.employees.department_id = hr.departments.department_id
ORDER BY last_name
FETCH FIRST 5 ROWS ONLY;
結果¶
LAST_NAME |
JOB_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
|---|---|---|---|
Abel |
SA_REP |
80 |
販売 |
Ande |
SA_REP |
80 |
販売 |
Atkinson |
ST_CLERK |
50 |
配送 |
Austin |
IT_PROG |
60 |
IT |
Baer |
PR_REP |
70 |
広報活動 |
Snowflake¶
SELECT last_name, job_id, hr.departments.department_id, department_name
FROM
hr.employees,
hr.departments
WHERE hr.employees.department_id = hr.departments.department_id
ORDER BY last_name
FETCH FIRST 5 ROWS ONLY;
結果¶
LAST_NAME |
JOB_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
|---|---|---|---|
Abel |
SA_REP |
80 |
販売 |
Ande |
SA_REP |
80 |
販売 |
Atkinson |
ST_CLERK |
50 |
配送 |
Austin |
IT_PROG |
60 |
IT |
Baer |
PR_REP |
70 |
広報活動 |
既知の問題¶
1.言語間の結果の順序の不一致¶
クエリの結果は両方のデータベースエンジンで同じ内容になりますが、クエリに Order By 句が定義されていない場合、順序が異なる可能性があります。
関連 EWIs¶
関連 EWIs はありません。
内部結合¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
内部結合(単純結合と呼ばれることもあります)は、結合条件を満たす行のみを返す2つ以上のテーブルの結合です。(Oracle SQL リファレンス内部結合サブセクション)。
{ [ INNER ] JOIN table_reference
{ ON condition
| USING (column [, column ]...)
}
| { CROSS
| NATURAL [ INNER ]
}
JOIN table_reference
}
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by 句を追加しました。
注釈
結果セットが大きすぎるため、行制限句 が追加されました。この句を削除すると、結果セット全体を取得できます。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
ベーシック内部結合¶
Inner Join句の "INNER" はオプションのキーワードです。以下のクエリには、同じデータセットを取得する2つのselectがあります。
Oracle¶
SELECT
*
FROM
hr.employees
INNER JOIN hr.departments ON
hr.departments.department_id = hr.employees.department_id
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
SELECT
*
FROM
hr.employees
JOIN hr.departments ON
hr.departments.department_id = hr.employees.department_id
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
90 |
経営 |
100 |
1700 |
||
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 00:00:00.000 |
AD_VP |
17000 |
100 |
90 |
90 |
経営 |
100 |
1700 |
|
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 00:00:00.000 |
AD_VP |
17000 |
100 |
90 |
90 |
経営 |
100 |
1700 |
|
103 |
Alexander |
Hunold |
AHUNOLD |
590.423.4567 |
2006-01-03 00:00:00.000 |
IT_PROG |
9000 |
102 |
60 |
60 |
IT |
103 |
1400 |
|
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 00:00:00.000 |
IT_PROG |
6000 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 00:00:00.000 |
IT_PROG |
4800 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 00:00:00.000 |
IT_PROG |
4800 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 00:00:00.000 |
IT_PROG |
4200 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
108 |
Nancy |
Greenberg |
NGREENBE |
515.124.4569 |
2002-08-17 00:00:00.000 |
FI_MGR |
12008 |
101 |
100 |
100 |
ファイナンス |
108 |
1700 |
|
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 00:00:00.000 |
FI_ACCOUNT |
9000 |
108 |
100 |
100 |
ファイナンス |
108 |
1700 |
Snowflake¶
SELECT
*
FROM
hr.employees
INNER JOIN
hr.departments
ON
hr.departments.department_id = hr.employees.department_id
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
SELECT
*
FROM
hr.employees
JOIN
hr.departments
ON
hr.departments.department_id = hr.employees.department_id
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
90 |
経営 |
100 |
1700 |
||
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 |
AD_VP |
17000.00 |
100 |
90 |
90 |
経営 |
100 |
1700 |
|
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 |
AD_VP |
17000.00 |
100 |
90 |
90 |
経営 |
100 |
1700 |
|
103 |
Alexander |
Hunold |
AHUNOLD |
590.423.4567 |
2006-01-03 |
IT_PROG |
9000.00 |
102 |
60 |
60 |
IT |
103 |
1400 |
|
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 |
IT_PROG |
6000.00 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 |
IT_PROG |
4800.00 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 |
IT_PROG |
4800.00 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 |
IT_PROG |
4200.00 |
103 |
60 |
60 |
IT |
103 |
1400 |
|
108 |
Nancy |
Greenberg |
NGREENBE |
515.124.4569 |
2002-08-17 |
FI_MGR |
12008.00 |
101 |
100 |
100 |
ファイナンス |
108 |
1700 |
|
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 |
FI_ACCOUNT |
9000.00 |
108 |
100 |
100 |
ファイナンス |
108 |
1700 |
using句を含む内部結合¶
Oracle¶
SELECT
*
FROM
hr.employees
INNER JOIN hr.departments
USING(department_id)
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
DEPARTMENT_ID |
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
90 |
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
経営 |
100 |
1700 |
||
90 |
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 00:00:00.000 |
AD_VP |
17000 |
100 |
経営 |
100 |
1700 |
|
90 |
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 00:00:00.000 |
AD_VP |
17000 |
100 |
経営 |
100 |
1700 |
|
60 |
103 |
Alexander |
Hunold |
AHUNOLD |
590.423.4567 |
2006-01-03 00:00:00.000 |
IT_PROG |
9000 |
102 |
IT |
103 |
1400 |
|
60 |
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 00:00:00.000 |
IT_PROG |
6000 |
103 |
IT |
103 |
1400 |
|
60 |
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 00:00:00.000 |
IT_PROG |
4800 |
103 |
IT |
103 |
1400 |
|
60 |
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 00:00:00.000 |
IT_PROG |
4800 |
103 |
IT |
103 |
1400 |
|
60 |
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 00:00:00.000 |
IT_PROG |
4200 |
103 |
IT |
103 |
1400 |
|
100 |
108 |
Nancy |
Greenberg |
NGREENBE |
515.124.4569 |
2002-08-17 00:00:00.000 |
FI_MGR |
12008 |
101 |
ファイナンス |
108 |
1700 |
|
100 |
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 00:00:00.000 |
FI_ACCOUNT |
9000 |
108 |
ファイナンス |
108 |
1700 |
Snowflake¶
SELECT
*
FROM
hr.employees
INNER JOIN
hr.departments
USING(department_id)
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
DEPARTMENT_ID |
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
90 |
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
経営 |
100 |
1700 |
||
90 |
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 |
AD_VP |
17000.00 |
100 |
経営 |
100 |
1700 |
|
90 |
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 |
AD_VP |
17000.00 |
100 |
経営 |
100 |
1700 |
|
60 |
103 |
Alexander |
Hunold |
AHUNOLD |
590.423.4567 |
2006-01-03 |
IT_PROG |
9000.00 |
102 |
IT |
103 |
1400 |
|
60 |
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 |
IT_PROG |
6000.00 |
103 |
IT |
103 |
1400 |
|
60 |
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 |
IT_PROG |
4800.00 |
103 |
IT |
103 |
1400 |
|
60 |
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 |
IT_PROG |
4800.00 |
103 |
IT |
103 |
1400 |
|
60 |
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 |
IT_PROG |
4200.00 |
103 |
IT |
103 |
1400 |
|
100 |
108 |
Nancy |
Greenberg |
NGREENBE |
515.124.4569 |
2002-08-17 |
FI_MGR |
12008.00 |
101 |
ファイナンス |
108 |
1700 |
|
100 |
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 |
FI_ACCOUNT |
9000.00 |
108 |
ファイナンス |
108 |
1700 |
クロス内部結合¶
Oracle¶
SELECT
*
FROM
hr.employees
CROSS JOIN hr.departments
ORDER BY department_name, employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
110 |
会計 |
205 |
1700 |
||
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 00:00:00.000 |
AD_VP |
17000 |
100 |
90 |
110 |
会計 |
205 |
1700 |
|
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 00:00:00.000 |
AD_VP |
17000 |
100 |
90 |
110 |
会計 |
205 |
1700 |
|
103 |
Alexander |
Hunold |
AHUNOLD |
590.423.4567 |
2006-01-03 00:00:00.000 |
IT_PROG |
9000 |
102 |
60 |
110 |
会計 |
205 |
1700 |
|
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 00:00:00.000 |
IT_PROG |
6000 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 00:00:00.000 |
IT_PROG |
4800 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 00:00:00.000 |
IT_PROG |
4800 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 00:00:00.000 |
IT_PROG |
4200 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
108 |
Nancy |
Greenberg |
NGREENBE |
515.124.4569 |
2002-08-17 00:00:00.000 |
FI_MGR |
12008 |
101 |
100 |
110 |
会計 |
205 |
1700 |
|
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 00:00:00.000 |
FI_ACCOUNT |
9000 |
108 |
100 |
110 |
会計 |
205 |
1700 |
Snowflake¶
SELECT
*
FROM
hr.employees
CROSS JOIN hr.departments
ORDER BY department_name, employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
110 |
会計 |
205 |
1700 |
||
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 |
AD_VP |
17000.00 |
100 |
90 |
110 |
会計 |
205 |
1700 |
|
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 |
AD_VP |
17000.00 |
100 |
90 |
110 |
会計 |
205 |
1700 |
|
103 |
Alexander |
Hunold |
AHUNOLD |
590.423.4567 |
2006-01-03 |
IT_PROG |
9000.00 |
102 |
60 |
110 |
会計 |
205 |
1700 |
|
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 |
IT_PROG |
6000.00 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 |
IT_PROG |
4800.00 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 |
IT_PROG |
4800.00 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 |
IT_PROG |
4200.00 |
103 |
60 |
110 |
会計 |
205 |
1700 |
|
108 |
Nancy |
Greenberg |
NGREENBE |
515.124.4569 |
2002-08-17 |
FI_MGR |
12008.00 |
101 |
100 |
110 |
会計 |
205 |
1700 |
|
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 |
FI_ACCOUNT |
9000.00 |
108 |
100 |
110 |
会計 |
205 |
1700 |
自然内部結合¶
Oracle¶
SELECT
*
FROM
hr.employees
NATURAL JOIN hr.departments
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
MANAGER_ID |
DEPARTMENT_ID |
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
DEPARTMENT_NAME |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
90 |
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 00:00:00.000 |
AD_VP |
17000 |
経営 |
1700 |
|
100 |
90 |
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 00:00:00.000 |
AD_VP |
17000 |
経営 |
1700 |
|
103 |
60 |
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 00:00:00.000 |
IT_PROG |
6000 |
IT |
1400 |
|
103 |
60 |
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 00:00:00.000 |
IT_PROG |
4800 |
IT |
1400 |
|
103 |
60 |
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 00:00:00.000 |
IT_PROG |
4800 |
IT |
1400 |
|
103 |
60 |
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 00:00:00.000 |
IT_PROG |
4200 |
IT |
1400 |
|
108 |
100 |
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 00:00:00.000 |
FI_ACCOUNT |
9000 |
ファイナンス |
1700 |
|
108 |
100 |
110 |
John |
Chen |
JCHEN |
515.124.4269 |
2005-09-28 00:00:00.000 |
FI_ACCOUNT |
8200 |
ファイナンス |
1700 |
|
108 |
100 |
111 |
Ismael |
Sciarra |
ISCIARRA |
515.124.4369 |
2005-09-30 00:00:00.000 |
FI_ACCOUNT |
7700 |
ファイナンス |
1700 |
|
108 |
100 |
112 |
Jose Manuel |
Urman |
JMURMAN |
515.124.4469 |
2006-03-07 00:00:00.000 |
FI_ACCOUNT |
7800 |
ファイナンス |
1700 |
Snowflake¶
SELECT
*
FROM
hr.employees
NATURAL JOIN
hr.departments
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
MANAGER_ID |
DEPARTMENT_ID |
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
DEPARTMENT_NAME |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
90 |
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 |
AD_VP |
17000.00 |
経営 |
1700 |
|
100 |
90 |
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 |
AD_VP |
17000.00 |
経営 |
1700 |
|
103 |
60 |
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 |
IT_PROG |
6000.00 |
IT |
1400 |
|
103 |
60 |
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 |
IT_PROG |
4800.00 |
IT |
1400 |
|
103 |
60 |
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 |
IT_PROG |
4800.00 |
IT |
1400 |
|
103 |
60 |
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 |
IT_PROG |
4200.00 |
IT |
1400 |
|
108 |
100 |
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 |
FI_ACCOUNT |
9000.00 |
ファイナンス |
1700 |
|
108 |
100 |
110 |
John |
Chen |
JCHEN |
515.124.4269 |
2005-09-28 |
FI_ACCOUNT |
8200.00 |
ファイナンス |
1700 |
|
108 |
100 |
111 |
Ismael |
Sciarra |
ISCIARRA |
515.124.4369 |
2005-09-30 |
FI_ACCOUNT |
7700.00 |
ファイナンス |
1700 |
|
108 |
100 |
112 |
Jose Manuel |
Urman |
JMURMAN |
515.124.4469 |
2006-03-07 |
FI_ACCOUNT |
7800.00 |
ファイナンス |
1700 |
クロス自然結合¶
Oracle¶
SELECT
*
FROM
hr.employees
CROSS NATURAL JOIN hr.departments
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
MANAGER_ID |
DEPARTMENT_ID |
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
DEPARTMENT_NAME |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
90 |
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 00:00:00.000 |
AD_VP |
17000 |
経営 |
1700 |
|
100 |
90 |
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 00:00:00.000 |
AD_VP |
17000 |
経営 |
1700 |
|
103 |
60 |
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 00:00:00.000 |
IT_PROG |
6000 |
IT |
1400 |
|
103 |
60 |
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 00:00:00.000 |
IT_PROG |
4800 |
IT |
1400 |
|
103 |
60 |
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 00:00:00.000 |
IT_PROG |
4800 |
IT |
1400 |
|
103 |
60 |
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 00:00:00.000 |
IT_PROG |
4200 |
IT |
1400 |
|
108 |
100 |
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 00:00:00.000 |
FI_ACCOUNT |
9000 |
ファイナンス |
1700 |
|
108 |
100 |
110 |
John |
Chen |
JCHEN |
515.124.4269 |
2005-09-28 00:00:00.000 |
FI_ACCOUNT |
8200 |
ファイナンス |
1700 |
|
108 |
100 |
111 |
Ismael |
Sciarra |
ISCIARRA |
515.124.4369 |
2005-09-30 00:00:00.000 |
FI_ACCOUNT |
7700 |
ファイナンス |
1700 |
|
108 |
100 |
112 |
Jose Manuel |
Urman |
JMURMAN |
515.124.4469 |
2006-03-07 00:00:00.000 |
FI_ACCOUNT |
7800 |
ファイナンス |
1700 |
Snowflake¶
SELECT
*
FROM
hr.employees
NATURAL JOIN
hr.departments
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
MANAGER_ID |
DEPARTMENT_ID |
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
DEPARTMENT_NAME |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
90 |
101 |
Neena |
Kochhar |
NKOCHHAR |
515.123.4568 |
2005-09-21 |
AD_VP |
17000.00 |
経営 |
1700 |
|
100 |
90 |
102 |
Lex |
De Haan |
LDEHAAN |
515.123.4569 |
2001-01-13 |
AD_VP |
17000.00 |
経営 |
1700 |
|
103 |
60 |
104 |
Bruce |
Ernst |
BERNST |
590.423.4568 |
2007-05-21 |
IT_PROG |
6000.00 |
IT |
1400 |
|
103 |
60 |
105 |
デイビッド |
Austin |
DAUSTIN |
590.423.4569 |
2005-06-25 |
IT_PROG |
4800.00 |
IT |
1400 |
|
103 |
60 |
106 |
Valli |
Pataballa |
VPATABAL |
590.423.4560 |
2006-02-05 |
IT_PROG |
4800.00 |
IT |
1400 |
|
103 |
60 |
107 |
Diana |
Lorentz |
DLORENTZ |
590.423.5567 |
2007-02-07 |
IT_PROG |
4200.00 |
IT |
1400 |
|
108 |
100 |
109 |
Daniel |
Faviet |
DFAVIET |
515.124.4169 |
2002-08-16 |
FI_ACCOUNT |
9000.00 |
ファイナンス |
1700 |
|
108 |
100 |
110 |
John |
Chen |
JCHEN |
515.124.4269 |
2005-09-28 |
FI_ACCOUNT |
8200.00 |
ファイナンス |
1700 |
|
108 |
100 |
111 |
Ismael |
Sciarra |
ISCIARRA |
515.124.4369 |
2005-09-30 |
FI_ACCOUNT |
7700.00 |
ファイナンス |
1700 |
|
108 |
100 |
112 |
Jose Manuel |
Urman |
JMURMAN |
515.124.4469 |
2006-03-07 |
FI_ACCOUNT |
7800.00 |
ファイナンス |
1700 |
自然クロス結合¶
Oracle¶
SELECT
*
FROM
hr.employees
NATURAL CROSS JOIN hr.departments
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
10 |
管理 |
200 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
100 |
ファイナンス |
108 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
90 |
経営 |
100 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
80 |
販売 |
145 |
2500 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
70 |
広報活動 |
204 |
2700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
60 |
IT |
103 |
1400 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
50 |
配送 |
121 |
1500 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
40 |
人事 |
203 |
2400 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
30 |
購買 |
114 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 00:00:00.000 |
AD_PRES |
24000 |
90 |
20 |
マーケティング |
201 |
1800 |
Snowflake¶
SELECT
*
FROM
hr.employees
CROSS JOIN hr.departments
ORDER BY employee_id
FETCH NEXT 10 ROWS ONLY;
結果¶
EMPLOYEE_ID |
FIRST_NAME |
LAST_NAME |
PHONE_NUMBER |
HIRE_DATE |
JOB_ID |
SALARY |
COMMISSION_PCT |
MANAGER_ID |
DEPARTMENT_ID |
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
80 |
販売 |
145 |
2500 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
20 |
マーケティング |
201 |
1800 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
60 |
IT |
103 |
1400 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
70 |
広報活動 |
204 |
2700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
90 |
経営 |
100 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
30 |
購買 |
114 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
10 |
管理 |
200 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
100 |
ファイナンス |
108 |
1700 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
50 |
配送 |
121 |
1500 |
||
100 |
Steven |
King |
SKING |
515.123.4567 |
2003-06-17 |
AD_PRES |
24000.00 |
90 |
40 |
人事 |
203 |
2400 |
既知の問題¶
1.言語間の結果の順序の不一致¶
クエリの結果は両方のデータベースエンジンで同じ内容になりますが、クエリに Order By 句が定義されていない場合、順序が異なる可能性があります。
関連 EWIs¶
関連 EWIs はありません。
外部結合¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
外部結合は単純結合の結果を拡張します。外部結合は、結合条件を満たす全ての行を返し、一方のテーブルから、もう一方のテーブルから結合条件を満たす行がない場合、その一部または全ての行を返します。(Oracle SQL 言語リファレンス外部結合サブセクション)。
Oracle ANSI 構文¶
[ query_partition_clause ] [ NATURAL ]
outer_join_type JOIN table_reference
[ query_partition_clause ]
[ ON condition
| USING ( column [, column ]...)
]
outer_join_type
{ FULL | LEFT | RIGHT } [ OUTER ]
Oracleは、外部結合に使用できる(+)演算子もサポートしています。この演算子は、WHERE 句の列式に追加されます。
column_expression (+)
Snowflake ANSI 構文¶
Snowflakeは、Oracleと同様に OUTER JOINS の ANSI 構文もサポートしています。ただし、(+)演算子を使用した場合の動作は、使用状況によって異なる場合があります。Snowflake結合に関する情報は こちら をご覧ください。
Snowflakeの文法は以下のいずれかです。
SELECT ...
FROM <object_ref1> [
{
INNER
| { LEFT | RIGHT | FULL } [ OUTER ]
}
]
JOIN <object_ref2>
[ ON <condition> ]
[ ... ]
SELECT *
FROM <object_ref1> [
{
INNER
| { LEFT | RIGHT | FULL } [ OUTER ]
}
]
JOIN <object_ref2>
[ USING( <column_list> ) ]
[ ... ]
SELECT ...
FROM <object_ref1> [
{
| NATURAL [ { LEFT | RIGHT | FULL } [ OUTER ] ]
| CROSS
}
]
JOIN <object_ref2>
[ ... ]
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by 句を追加しました。
注釈
結果セットが大きすぎるため、行制限句 が追加されました。これを削除すると、結果セット全体を取得できます。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
注釈
以下の例では、JOIN の種類ごとに結果をより適切に区別するために、これらの挿入と変更ステートメントを実行しました。
INSERT INTO hr.regions VALUES (5, 'Oceania');
ALTER TABLE hr.countries DROP CONSTRAINT countr_reg_fk;
INSERT INTO hr.countries VALUES ('--', 'Unknown Country', 0);
1.ANSI 構文¶
Snowflakeは SQL JOINS の ANSI 構文を完全にサポートしています。どちらのデータベースエンジンでも動作は同じです。
に左外部結合¶
Oracle¶
SELECT * FROM
hr.countries c
LEFT OUTER JOIN hr.regions r ON c.region_id = r.region_id
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
国名不明 |
0 |
||
AR |
アルゼンチン |
2 |
2 |
米州 |
AU |
オーストラリア |
3 |
3 |
アジア |
BE |
ベルギー |
1 |
1 |
ヨーロッパ |
BR |
ブラジル |
2 |
2 |
米州 |
CA |
カナダ |
2 |
2 |
米州 |
CH |
スイス |
1 |
1 |
ヨーロッパ |
CN |
中国 |
3 |
3 |
アジア |
DE |
ドイツ |
1 |
1 |
ヨーロッパ |
DK |
デンマーク |
1 |
1 |
ヨーロッパ |
Snowflake¶
SELECT * FROM
hr.countries c
LEFT OUTER JOIN
hr.regions r ON c.region_id = r.region_id
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
国名不明 |
0.0000000000000000000 |
||
AR |
アルゼンチン |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
AU |
オーストラリア |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
BE |
ベルギー |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
BR |
ブラジル |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
CA |
カナダ |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
CH |
スイス |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
CN |
中国 |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
DE |
ドイツ |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
DK |
デンマーク |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
に右外部結合¶
Oracle¶
SELECT * FROM
hr.countries c
RIGHT OUTER JOIN hr.regions r ON c.region_id = r.region_id
ORDER BY country_id DESC
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
5 |
オセアニア |
||
ZW |
ジンバブエ |
4 |
4 |
中東、アフリカ |
ZM |
ザンビア |
4 |
4 |
中東、アフリカ |
US |
アメリカ合衆国 |
2 |
2 |
米州 |
UK |
英国 |
1 |
1 |
ヨーロッパ |
SG |
シンガポール |
3 |
3 |
アジア |
NL |
オランダ |
1 |
1 |
ヨーロッパ |
NG |
ナイジェリア |
4 |
4 |
中東、アフリカ |
MX |
メキシコ |
2 |
2 |
米州 |
ML |
マレーシア |
3 |
3 |
アジア |
Snowflake¶
SELECT * FROM
hr.countries c
RIGHT OUTER JOIN
hr.regions r ON c.region_id = r.region_id
ORDER BY country_id DESC
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
5.0000000000000000000 |
オセアニア |
||
ZW |
ジンバブエ |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
ZM |
ザンビア |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
US |
アメリカ合衆国 |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
UK |
英国 |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
SG |
シンガポール |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
NL |
オランダ |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
NG |
ナイジェリア |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
MX |
メキシコ |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
ML |
マレーシア |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
に完全外部結合¶
Oracle¶
SELECT * FROM
hr.countries c
FULL OUTER JOIN hr.regions r ON c.region_id = r.region_id
ORDER BY r.region_name DESC, c.country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
国名不明 |
0 |
||
-- |
5 |
オセアニア |
||
EG |
エジプト |
4 |
4 |
中東、アフリカ |
IL |
イスラエル |
4 |
4 |
中東、アフリカ |
KW |
クウェート |
4 |
4 |
中東、アフリカ |
NG |
ナイジェリア |
4 |
4 |
中東、アフリカ |
ZM |
ザンビア |
4 |
4 |
中東、アフリカ |
ZW |
ジンバブエ |
4 |
4 |
中東、アフリカ |
BE |
ベルギー |
1 |
1 |
ヨーロッパ |
CH |
スイス |
1 |
1 |
ヨーロッパ |
Snowflake¶
SELECT * FROM
hr.countries c
FULL OUTER JOIN
hr.regions r ON c.region_id = r.region_id
ORDER BY r.region_name DESC, c.country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
国名不明 |
0.0000000000000000000 |
||
-- |
5.0000000000000000000 |
オセアニア |
||
EG |
エジプト |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
IL |
イスラエル |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
KW |
クウェート |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
NG |
ナイジェリア |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
ZM |
ザンビア |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
ZW |
ジンバブエ |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
BE |
ベルギー |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
CH |
スイス |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
2.自然外部結合¶
OracleもSnowflakeも自然外部結合をサポートしており、動作は同じです。
NATURAL JOIN は、2つのテーブルの共通列の明示的な JOIN と同じですが、共通列は出力に1回だけ含まれます。(自然結合は、異なるテーブルにある同じ名前の列が、対応するデータを含んでいると仮定します。)(Snowflake SQL 言語リファレンス JOIN)
自然左外部結合¶
Oracle¶
SELECT * FROM
hr.countries c
NATURAL LEFT OUTER JOIN hr.regions r
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
REGION_ID |
COUNTRY_ID |
COUNTRY_NAME |
REGION_NAME |
|---|---|---|---|
0 |
-- |
国名不明 |
|
2 |
AR |
アルゼンチン |
米州 |
3 |
AU |
オーストラリア |
アジア |
1 |
BE |
ベルギー |
ヨーロッパ |
2 |
BR |
ブラジル |
米州 |
2 |
CA |
カナダ |
米州 |
1 |
CH |
スイス |
ヨーロッパ |
3 |
CN |
中国 |
アジア |
1 |
DE |
ドイツ |
ヨーロッパ |
1 |
DK |
デンマーク |
ヨーロッパ |
Snowflake¶
SELECT * FROM
hr.countries c
NATURAL LEFT OUTER JOIN
hr.regions r
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
REGION_ID |
COUNTRY_ID |
COUNTRY_NAME |
REGION_NAME |
|---|---|---|---|
0.0000000000000000000 |
-- |
国名不明 |
|
2.0000000000000000000 |
AR |
アルゼンチン |
米州 |
3.0000000000000000000 |
AU |
オーストラリア |
アジア |
1.0000000000000000000 |
BE |
ベルギー |
ヨーロッパ |
2.0000000000000000000 |
BR |
ブラジル |
米州 |
2.0000000000000000000 |
CA |
カナダ |
米州 |
1.0000000000000000000 |
CH |
スイス |
ヨーロッパ |
3.0000000000000000000 |
CN |
中国 |
アジア |
1.0000000000000000000 |
DE |
ドイツ |
ヨーロッパ |
1.0000000000000000000 |
DK |
デンマーク |
ヨーロッパ |
自然右外部結合¶
Oracle¶
SELECT * FROM
hr.countries c
NATURAL RIGHT OUTER JOIN hr.regions r
ORDER BY country_id DESC
FETCH FIRST 10 ROWS ONLY;
結果¶
REGION_ID |
COUNTRY_ID |
COUNTRY_NAME |
REGION_NAME |
|---|---|---|---|
5 |
オセアニア |
||
4 |
ZW |
ジンバブエ |
中東、アフリカ |
4 |
ZM |
ザンビア |
中東、アフリカ |
2 |
US |
アメリカ合衆国 |
米州 |
1 |
UK |
英国 |
ヨーロッパ |
3 |
SG |
シンガポール |
アジア |
1 |
NL |
オランダ |
ヨーロッパ |
4 |
NG |
ナイジェリア |
中東、アフリカ |
2 |
MX |
メキシコ |
米州 |
3 |
ML |
マレーシア |
アジア |
Snowflake¶
SELECT * FROM
hr.countries c
NATURAL RIGHT OUTER JOIN
hr.regions r
ORDER BY country_id DESC
FETCH FIRST 10 ROWS ONLY;
結果¶
REGION_ID |
COUNTRY_ID |
COUNTRY_NAME |
REGION_NAME |
|---|---|---|---|
5.0000000000000000000 |
オセアニア |
||
4.0000000000000000000 |
ZW |
ジンバブエ |
中東、アフリカ |
4.0000000000000000000 |
ZM |
ザンビア |
中東、アフリカ |
2.0000000000000000000 |
US |
アメリカ合衆国 |
米州 |
1.0000000000000000000 |
UK |
英国 |
ヨーロッパ |
3.0000000000000000000 |
SG |
シンガポール |
アジア |
1.0000000000000000000 |
NL |
オランダ |
ヨーロッパ |
4.0000000000000000000 |
NG |
ナイジェリア |
中東、アフリカ |
2.0000000000000000000 |
MX |
メキシコ |
米州 |
3.0000000000000000000 |
ML |
マレーシア |
アジア |
3.USING を使用したベーシック外部結合¶
テーブル列は、 USING キーワードを使用して結合できます。結果は、 ON キーワードを使った基本的な OUTER JOIN と同じになります。
を使用した左外部結合¶
Oracle¶
SELECT * FROM
hr.countries c
LEFT OUTER JOIN hr.regions r USING (region_id)
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
REGION_ID |
COUNTRY_ID |
COUNTRY_NAME |
REGION_NAME |
|---|---|---|---|
0 |
-- |
国名不明 |
|
2 |
AR |
アルゼンチン |
米州 |
3 |
AU |
オーストラリア |
アジア |
1 |
BE |
ベルギー |
ヨーロッパ |
2 |
BR |
ブラジル |
米州 |
2 |
CA |
カナダ |
米州 |
1 |
CH |
スイス |
ヨーロッパ |
3 |
CN |
中国 |
アジア |
1 |
DE |
ドイツ |
ヨーロッパ |
1 |
DK |
デンマーク |
ヨーロッパ |
Snowflake¶
SELECT * FROM
hr.countries c
LEFT OUTER JOIN
hr.regions r USING (region_id)
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
REGION_ID |
COUNTRY_ID |
COUNTRY_NAME |
REGION_NAME |
|---|---|---|---|
0.0000000000000000000 |
-- |
国名不明 |
|
2.0000000000000000000 |
AR |
アルゼンチン |
米州 |
3.0000000000000000000 |
AU |
オーストラリア |
アジア |
1.0000000000000000000 |
BE |
ベルギー |
ヨーロッパ |
2.0000000000000000000 |
BR |
ブラジル |
米州 |
2.0000000000000000000 |
CA |
カナダ |
米州 |
1.0000000000000000000 |
CH |
スイス |
ヨーロッパ |
3.0000000000000000000 |
CN |
中国 |
アジア |
1.0000000000000000000 |
DE |
ドイツ |
ヨーロッパ |
1.0000000000000000000 |
DK |
デンマーク |
ヨーロッパ |
4. (+) Operator¶
OracleとSnowflakeには、外部結合にも使用できる(+)演算子があります。この演算子を使用すると、Snowflakeが正常に動作しない場合があります。
Snowflakeのこの演算子に関する詳細情報については、 こちら をご覧ください。
(+)演算子による左外部結合¶
Oracle¶
SELECT * FROM hr.countries c, hr.regions r
WHERE c.region_id = r.region_id(+)
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
国名不明 |
0 |
||
AR |
アルゼンチン |
2 |
2 |
米州 |
AU |
オーストラリア |
3 |
3 |
アジア |
BE |
ベルギー |
1 |
1 |
ヨーロッパ |
BR |
ブラジル |
2 |
2 |
米州 |
CA |
カナダ |
2 |
2 |
米州 |
CH |
スイス |
1 |
1 |
ヨーロッパ |
CN |
中国 |
3 |
3 |
アジア |
DE |
ドイツ |
1 |
1 |
ヨーロッパ |
DK |
デンマーク |
1 |
1 |
ヨーロッパ |
Snowflake¶
SELECT * FROM
hr.countries c,
hr.regions r
WHERE c.region_id = r.region_id(+)
ORDER BY country_id
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
国名不明 |
0.0000000000000000000 |
||
AR |
アルゼンチン |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
AU |
オーストラリア |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
BE |
ベルギー |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
BR |
ブラジル |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
CA |
カナダ |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
CH |
スイス |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
CN |
中国 |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
DE |
ドイツ |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
DK |
デンマーク |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
(+)演算子による右外部結合¶
Oracle¶
SELECT * FROM hr.countries c, hr.regions r
WHERE c.region_id (+) = r.region_id
ORDER BY country_id DESC
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
5 |
オセアニア |
||
ZW |
ジンバブエ |
4 |
4 |
中東、アフリカ |
ZM |
ザンビア |
4 |
4 |
中東、アフリカ |
US |
アメリカ合衆国 |
2 |
2 |
米州 |
UK |
英国 |
1 |
1 |
ヨーロッパ |
SG |
シンガポール |
3 |
3 |
アジア |
NL |
オランダ |
1 |
1 |
ヨーロッパ |
NG |
ナイジェリア |
4 |
4 |
中東、アフリカ |
MX |
メキシコ |
2 |
2 |
米州 |
ML |
マレーシア |
3 |
3 |
アジア |
Snowflake¶
SELECT * FROM
hr.countries c,
hr.regions r
WHERE c.region_id (+) = r.region_id
ORDER BY country_id DESC
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
|---|---|---|---|---|
-- |
5.0000000000000000000 |
オセアニア |
||
ZW |
ジンバブエ |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
ZM |
ザンビア |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
US |
アメリカ合衆国 |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
UK |
英国 |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
SG |
シンガポール |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
NL |
オランダ |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
NG |
ナイジェリア |
4.0000000000000000000 |
4.0000000000000000000 |
中東、アフリカ |
MX |
メキシコ |
2.0000000000000000000 |
2.0000000000000000000 |
米州 |
ML |
マレーシア |
3.0000000000000000000 |
3.0000000000000000000 |
アジア |
複数のテーブルを(+)で結合した単一テーブル¶
Oracleでは、(+)演算子を使って1つのテーブルと複数のテーブルを結合することができますが、Snowflakeではサポートしていません。この種の外部結合を持つクエリは、 ANSI 構文に変更されます。
Oracle¶
SELECT
c.country_id,
c.country_name,
r.region_id,
r.region_name,
l.location_id,
l.street_address,
l.postal_code,
l.city
FROM
hr.countries c, hr.regions r, hr.locations l
WHERE
c.region_id(+) = r.region_id AND
l.country_id = c.country_id(+)
ORDER BY r.region_id, l.city
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_NAME |
LOCATION_ID |
STREET_ADDRESS |
POSTAL_CODE |
CITY |
|---|---|---|---|---|---|---|---|
1 |
ヨーロッパ |
2000 |
40-5-12 Laogianggen |
190518 |
北京 |
||
CH |
スイス |
1 |
ヨーロッパ |
3000 |
Murtenstrasse 921 |
3095 |
ベルン |
1 |
ヨーロッパ |
2100 |
1298 Vileparle(E) |
490231 |
ボンベイ |
||
CH |
スイス |
1 |
ヨーロッパ |
2900 |
20 Rue des Corps-Saints |
1730 |
ジュネーブ |
1 |
ヨーロッパ |
1300 |
9450 Kamiya-cho |
6823 |
広島 |
||
UK |
英国 |
1 |
ヨーロッパ |
2400 |
8204 Arthur St |
ロンドン |
|
1 |
ヨーロッパ |
3200 |
Mariano Escobedo 9991 |
11932 |
メキシコシティ |
||
DE |
ドイツ |
1 |
ヨーロッパ |
2700 |
Schwanthalerstr.7031 |
80925 |
ミュンヘン |
UK |
英国 |
1 |
ヨーロッパ |
2500 |
Magdalen Centre, The Oxford Science Park |
OX9 に 9ZB |
オックスフォード |
IT |
イタリア |
1 |
ヨーロッパ |
1000 |
1297 Via Cola di Rie |
00989 |
ローマ |
Snowflake¶
SELECT
c.country_id,
c.country_name,
r.region_id,
r.region_name,
l.location_id,
l.street_address,
l.postal_code,
l.city
FROM
hr.regions r
CROSS JOIN hr.locations l
LEFT OUTER JOIN
hr.countries c
ON
c.region_id = r.region_id
AND
l.country_id = c.country_id
ORDER BY r.region_id, l.city
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_NAME |
LOCATION_ID |
STREET_ADDRESS |
POSTAL_CODE |
CITY |
|---|---|---|---|---|---|---|---|
1.0000000000000000000 |
ヨーロッパ |
2000 |
40-5-12 Laogianggen |
190518 |
北京 |
||
CH |
スイス |
1.0000000000000000000 |
ヨーロッパ |
3000 |
Murtenstrasse 921 |
3095 |
ベルン |
1.0000000000000000000 |
ヨーロッパ |
2100 |
1298 Vileparle(E) |
490231 |
ボンベイ |
||
CH |
スイス |
1.0000000000000000000 |
ヨーロッパ |
2900 |
20 Rue des Corps-Saints |
1730 |
ジュネーブ |
1.0000000000000000000 |
ヨーロッパ |
1300 |
9450 Kamiya-cho |
6823 |
広島 |
||
UK |
英国 |
1.0000000000000000000 |
ヨーロッパ |
2400 |
8204 Arthur St |
ロンドン |
|
1.0000000000000000000 |
ヨーロッパ |
3200 |
Mariano Escobedo 9991 |
11932 |
メキシコシティ |
||
DE |
ドイツ |
1.0000000000000000000 |
ヨーロッパ |
2700 |
Schwanthalerstr.7031 |
80925 |
ミュンヘン |
UK |
英国 |
1.0000000000000000000 |
ヨーロッパ |
2500 |
Magdalen Centre, The Oxford Science Park |
OX9 に 9ZB |
オックスフォード |
IT |
イタリア |
1.0000000000000000000 |
ヨーロッパ |
1000 |
1297 Via Cola di Rie |
00989 |
ローマ |
結合されていないテーブルの列と、列以外の値を持つ(+)演算子の使用¶
Oracleでは、(+)演算子を列で使用し、他のテーブルの列ではない値と結合することができます。Snowflakeでも可能ですが、列のテーブルが他のテーブルと結合されていない場合は失敗します。この問題を解決するため、このシナリオが発生した場合はクエリから(+)演算子を削除し、Oracleと同じ結果を得るようにします。
Oracle¶
SELECT * FROM hr.regions r
WHERE
r.region_name (+) LIKE 'A%'
ORDER BY region_id;
結果¶
REGION_ID |
REGION_NAME |
|---|---|
2 |
米州 |
3 |
アジア |
Snowflake¶
SELECT * FROM
hr.regions r
WHERE
r.region_name LIKE 'A%'
ORDER BY region_id;
結果¶
REGION_ID |
REGION_NAME |
|---|---|
2.0000000000000000000 |
米州 |
3.0000000000000000000 |
アジア |
既知の問題¶
サポートされていないすべてのケースについては、関連する EWIs を参照して、推奨事項と可能な回避策を入手してください。
1.外部結合を ANSI 構文に変換すると、列の順序が入れ替わることがあります¶
ANSI 外部結合ではないクエリを ANSI 外部結合に変換すると、変換後のクエリの列の順序が変更されることがあります。この問題を解決するには、列を特定の順序で選択してください。
Oracle¶
SELECT
*
FROM
hr.countries c, hr.regions r, hr.locations l
WHERE
c.region_id(+) = r.region_id AND
l.country_id = c.country_id(+)
ORDER BY r.region_id, l.city
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
LOCATION_ID |
STREET_ADDRESS |
POSTAL_CODE |
CITY |
STATE_PROVINCE |
COUNTRY_ID |
|---|---|---|---|---|---|---|---|---|---|---|
1 |
ヨーロッパ |
2000 |
40-5-12 Laogianggen |
190518 |
北京 |
CN |
||||
CH |
スイス |
1 |
1 |
ヨーロッパ |
3000 |
Murtenstrasse 921 |
3095 |
ベルン |
BE |
CH |
1 |
ヨーロッパ |
2100 |
1298 Vileparle(E) |
490231 |
ボンベイ |
マハーラーシュトラ |
IN |
|||
CH |
スイス |
1 |
1 |
ヨーロッパ |
2900 |
20 Rue des Corps-Saints |
1730 |
ジュネーブ |
ジュネーブ |
CH |
1 |
ヨーロッパ |
1300 |
9450 Kamiya-cho |
6823 |
広島 |
JP |
||||
UK |
英国 |
1 |
1 |
ヨーロッパ |
2400 |
8204 Arthur St |
ロンドン |
UK |
||
1 |
ヨーロッパ |
3200 |
Mariano Escobedo 9991 |
11932 |
メキシコシティ |
ブラジリア連邦直轄区 |
MX |
|||
DE |
ドイツ |
1 |
1 |
ヨーロッパ |
2700 |
Schwanthalerstr.7031 |
80925 |
ミュンヘン |
バイエルン |
DE |
UK |
英国 |
1 |
1 |
ヨーロッパ |
2500 |
Magdalen Centre, The Oxford Science Park |
OX9 に 9ZB |
オックスフォード |
オックスフォード |
UK |
IT |
イタリア |
1 |
1 |
ヨーロッパ |
1000 |
1297 Via Cola di Rie |
00989 |
ローマ |
IT |
Snowflake¶
SELECT
*
FROM
hr.regions r
CROSS JOIN hr.locations l
LEFT OUTER JOIN
hr.countries c
ON
c.region_id = r.region_id
AND
l.country_id = c.country_id
ORDER BY r.region_id, l.city
FETCH FIRST 10 ROWS ONLY;
結果¶
REGION_ID |
REGION_NAME |
LOCATION_ID |
STREET_ADDRESS |
POSTAL_CODE |
CITY |
STATE_PROVINCE |
COUNTRY_ID |
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
|---|---|---|---|---|---|---|---|---|---|---|
1.0000000000000000000 |
ヨーロッパ |
2000 |
40-5-12 Laogianggen |
190518 |
北京 |
CN |
||||
1.0000000000000000000 |
ヨーロッパ |
3000 |
Murtenstrasse 921 |
3095 |
ベルン |
BE |
CH |
CH |
スイス |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
2100 |
1298 Vileparle(E) |
490231 |
ボンベイ |
マハーラーシュトラ |
IN |
|||
1.0000000000000000000 |
ヨーロッパ |
2900 |
20 Rue des Corps-Saints |
1730 |
ジュネーブ |
ジュネーブ |
CH |
CH |
スイス |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
1300 |
9450 Kamiya-cho |
6823 |
広島 |
JP |
||||
1.0000000000000000000 |
ヨーロッパ |
2400 |
8204 Arthur St |
ロンドン |
UK |
UK |
英国 |
1.0000000000000000000 |
||
1.0000000000000000000 |
ヨーロッパ |
3200 |
Mariano Escobedo 9991 |
11932 |
メキシコシティ |
ブラジリア連邦直轄区 |
MX |
|||
1.0000000000000000000 |
ヨーロッパ |
2700 |
Schwanthalerstr.7031 |
80925 |
ミュンヘン |
バイエルン |
DE |
DE |
ドイツ |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
2500 |
Magdalen Centre, The Oxford Science Park |
OX9 に 9ZB |
オックスフォード |
オックスフォード |
UK |
UK |
英国 |
1.0000000000000000000 |
1.0000000000000000000 |
ヨーロッパ |
1000 |
1297 Via Cola di Rie |
00989 |
ローマ |
IT |
IT |
イタリア |
1.0000000000000000000 |
2.複数のテーブルを持つ間隔を持つ外部結合されたBetween述語¶
Between述語は、ANSI OUTER JOINS 以外の場合に使用できます。Oracleでは、間隔内の列は異なるテーブルからのものであっても外部結合できますが、Snowflakeはこれをサポートしていません。このような場合、Between述語はコメントアウトされます。
Oracle¶
SELECT
*
FROM
hr.countries c, hr.regions r, hr.locations l WHERE
l.location_id BETWEEN r.region_id(+) AND c.region_id(+)
ORDER BY r.region_id, l.city
FETCH FIRST 10 ROWS ONLY;
結果¶
COUNTRY_ID |
COUNTRY_NAME |
REGION_ID |
REGION_ID |
REGION_NAME |
LOCATION_ID |
STREET_ADDRESS |
POSTAL_CODE |
CITY |
STATE_PROVINCE |
COUNTRY_ID |
|---|---|---|---|---|---|---|---|---|---|---|
1 |
ヨーロッパ |
2000 |
40-5-12 Laogianggen |
190518 |
北京 |
CN |
||||
1 |
ヨーロッパ |
3000 |
Murtenstrasse 921 |
3095 |
ベルン |
BE |
CH |
|||
1 |
ヨーロッパ |
2100 |
1298 Vileparle(E) |
490231 |
ボンベイ |
マハーラーシュトラ |
IN |
|||
1 |
ヨーロッパ |
2900 |
20 Rue des Corps-Saints |
1730 |
ジュネーブ |
ジュネーブ |
CH |
|||
1 |
ヨーロッパ |
1300 |
9450 Kamiya-cho |
6823 |
広島 |
JP |
||||
1 |
ヨーロッパ |
2400 |
8204 Arthur St |
ロンドン |
UK |
|||||
1 |
ヨーロッパ |
3200 |
Mariano Escobedo 9991 |
11932 |
メキシコシティ |
ブラジリア連邦直轄区 |
MX |
|||
1 |
ヨーロッパ |
2700 |
Schwanthalerstr.7031 |
80925 |
ミュンヘン |
バイエルン |
DE |
|||
1 |
ヨーロッパ |
2500 |
Magdalen Centre, The Oxford Science Park |
OX9 に 9ZB |
オックスフォード |
オックスフォード |
UK |
|||
1 |
ヨーロッパ |
1000 |
1297 Via Cola di Rie |
00989 |
ローマ |
IT |
Snowflake¶
SELECT
*
FROM
hr.countries c,
hr.regions r,
hr.locations l WHERE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0090 - INVALID NON-ANSI OUTER JOIN BETWEEN PREDICATE CASE FOR SNOWFLAKE. ***/!!!
l.location_id BETWEEN r.region_id(+) AND c.region_id(+)
ORDER BY r.region_id, l.city
FETCH FIRST 10 ROWS ONLY;
関連 EWIs¶
[SSC-EWI-OR0090](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/oracleEWI.md#ssc-ewi-or0090):非Ansi外部結合に無効なBetween述語があります。
自己結合¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
自己結合はテーブルとそれ自身との結合です。このテーブルは
FROM句に2回登場し、結合条件の列名を修飾するテーブルエイリアスが続きます。(Oracle SQL 言語リファレンス自己結合サブセクション)
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by 句を追加しました。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
ベーシック自己結合ケース¶
Oracle¶
SELECT e1.last_name||' works for '||e2.last_name
"Employees and Their Managers"
FROM hr.employees e1, hr.employees e2
WHERE e1.manager_id = e2.employee_id
AND e1.last_name LIKE 'R%'
ORDER BY e1.last_name;
結果¶
従業員とそのマネージャー |
|---|
RajsはMourgosのために働く |
RaphaelyはKingのために働く |
RogersはKauflingのために働く |
RusselはKingのために働く |
Snowflake¶
SELECT
NVL( e1.last_name :: STRING, '') || ' works for ' || NVL(e2.last_name :: STRING, '') "Employees and Their Managers"
FROM
hr.employees e1,
hr.employees e2
WHERE e1.manager_id = e2.employee_id
AND e1.last_name LIKE 'R%'
ORDER BY e1.last_name;
結果¶
従業員とそのマネージャー |
|---|
RajsはMourgosのために働く |
RaphaelyはKingのために働く |
RogersはKauflingのために働く |
RusselはKingのために働く |
注釈
以前に証明したように、Oracleの 自己結合 はSnowflakeと機能的に同等です。
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。
準結合¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
準結合は、右側の複数の行がサブクエリの条件を満たす場合、述語の左側の行を重複させることなく、
EXISTSサブクエリにマッチする行を返します。サブクエリがWHERE句のORブランチ上にある場合は、準結合変換を実行できません。(Oracle SQL 言語リファレンス準結合サブセクション)
サンプルソースパターン¶
注釈
結果の順序がOracleとSnowflakeで異なる可能性があるため、Order by 句を追加しました。
注釈
この セクション を確認して、サンプルデータベースをセットアップします。
ベーシック準結合ケース¶
Oracle¶
SELECT * FROM hr.departments
WHERE EXISTS
(SELECT * FROM hr.employees
WHERE departments.department_id = employees.department_id
AND employees.salary > 2500)
ORDER BY department_name;
結果¶
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|---|---|---|---|
110 |
会計 |
205 |
1700 |
10 |
管理 |
200 |
1700 |
90 |
経営 |
100 |
1700 |
100 |
ファイナンス |
108 |
1700 |
40 |
人事 |
203 |
2400 |
60 |
IT |
103 |
1400 |
20 |
マーケティング |
201 |
1800 |
70 |
広報活動 |
204 |
2700 |
30 |
購買 |
114 |
1700 |
80 |
販売 |
145 |
2500 |
50 |
配送 |
121 |
1500 |
Snowflake¶
SELECT * FROM
hr.departments
WHERE EXISTS
(SELECT * FROM
hr.employees
WHERE departments.department_id = employees.department_id
AND employees.salary > 2500)
ORDER BY department_name;
結果¶
DEPARTMENT_ID |
DEPARTMENT_NAME |
MANAGER_ID |
LOCATION_ID |
|---|---|---|---|
110 |
会計 |
205 |
1700 |
10 |
管理 |
200 |
1700 |
90 |
経営 |
100 |
1700 |
100 |
ファイナンス |
108 |
1700 |
40 |
人事 |
203 |
2400 |
60 |
IT |
103 |
1400 |
20 |
マーケティング |
201 |
1800 |
70 |
広報活動 |
204 |
2700 |
30 |
購買 |
114 |
1700 |
80 |
販売 |
145 |
2500 |
50 |
配送 |
121 |
1500 |
注釈
以前に証明したように、Oracleの 準結合 はSnowflakeと機能的に同等です。
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。