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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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
Copy
結果

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;
Copy
結果

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;
Copy
結果1

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果1

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果1

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy

既知の問題

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;
Copy
結果

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;
Copy
結果

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
}
Copy

サンプルソースパターン

注釈

結果の順序が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;
Copy
結果

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

DEPARTMENT_ID

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

DEPARTMENT_ID

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

MANAGER_ID

DEPARTMENT_ID

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

MANAGER_ID

DEPARTMENT_ID

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

MANAGER_ID

DEPARTMENT_ID

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

MANAGER_ID

DEPARTMENT_ID

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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;
Copy
結果

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

EMAIL

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 ]...)
 ]
Copy
outer_join_type
{ FULL | LEFT | RIGHT } [ OUTER ]
Copy

Oracleは、外部結合に使用できる(+)演算子もサポートしています。この演算子は、WHERE 句の列式に追加されます。

column_expression (+)
Copy

Snowflake ANSI 構文

Snowflakeは、Oracleと同様に OUTER JOINS の ANSI 構文もサポートしています。ただし、(+)演算子を使用した場合の動作は、使用状況によって異なる場合があります。Snowflake結合に関する情報は こちら をご覧ください。

Snowflakeの文法は以下のいずれかです。

SELECT ...
FROM <object_ref1> [
                     {
                       INNER
                       | { LEFT | RIGHT | FULL } [ OUTER ]
                     }
                   ]
                   JOIN <object_ref2>
  [ ON <condition> ]
[ ... ]
Copy
SELECT *
FROM <object_ref1> [
                     {
                       INNER
                       | { LEFT | RIGHT | FULL } [ OUTER ]
                     }
                   ]
                   JOIN <object_ref2>
  [ USING( <column_list> ) ]
[ ... ]
Copy
SELECT ...
FROM <object_ref1> [
                     {
                       | NATURAL [ { LEFT | RIGHT | FULL } [ OUTER ] ]
                       | CROSS
                     }
                   ]
                   JOIN <object_ref2>
[ ... ]
Copy

サンプルソースパターン

注釈

結果の順序が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);
Copy

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

REGION_ID

REGION_NAME

2

米州

3

アジア

Snowflake
SELECT * FROM
hr.regions r
WHERE
r.region_name LIKE 'A%'
ORDER BY region_id;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy
結果

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;
Copy

関連 EWIs

  1. [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;
Copy
結果

従業員とそのマネージャー

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;
Copy
結果

従業員とそのマネージャー

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;
Copy
結果

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;
Copy
結果

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 はありません。