SnowConvert: Redshift SELECT INTO ステートメント

SELECT INTO

説明

テーブル、ビュー、ユーザー定義関数から行を返し、新しいテーブルに挿入します。(Redshift SQL 言語リファレンス SELECT ステートメント)

文法構文

 [ WITH with_subquery [, ...] ]
SELECT
[ TOP number ] [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...]
INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ { UNION | INTERSECT | { EXCEPT | MINUS } } [ ALL ] query ]
[ ORDER BY expression
[ ASC | DESC ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
Copy

詳細情報は以下の各リンクをご参照ください。

  1. WITH 句

  2. SELECT リスト

  3. FROM 句

  4. WHERE 句

  5. CONNECT BY 句

  6. GROUP BY 句

  7. HAVING 句

  8. QUALIFY 句

  9. UNION、 INTERSECT、および EXCEPT

  10. ORDER BY 句

  11. LIMIT および OFFSET 句

  12. ローカル変数およびパラメーター

FROM 句

説明

クエリの FROM 句は、データを選択するテーブル参照(テーブル、ビュー、サブクエリ)をリストします。複数のテーブル参照がリストされている場合は、 FROM 句または WHERE 句で適切な構文を使用して、テーブルを結合する必要があります。結合条件が指定されていない場合、システムはクエリをクロス結合として処理します。(Redshift SQL 言語リファレンス FROM 句)

警告

FROM 句 はSnowflakeで部分的にサポートされています。 オブジェクトのピボット解除 は現在サポートされていません。

文法構文

 FROM table_reference [, ...]

<table_reference> ::=
with_subquery_table_name [ table_alias ]
table_name [ * ] [ table_alias ]
( subquery ) [ table_alias ]
table_reference [ NATURAL ] join_type table_reference
   [ ON join_condition | USING ( join_column [, ...] ) ]
table_reference PIVOT ( 
   aggregate(expr) [ [ AS ] aggregate_alias ]
   FOR column_name IN ( expression [ AS ] in_alias [, ...] )
) [ table_alias ]
table_reference UNPIVOT [ INCLUDE NULLS | EXCLUDE NULLS ] ( 
   value_column_name 
   FOR name_column_name IN ( column_reference [ [ AS ]
   in_alias ] [, ...] )
) [ table_alias ]
UNPIVOT expression AS value_alias [ AT attribute_alias ]
Copy

サンプルソースパターン

入力コード:

 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
);
  
INSERT INTO employee(id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

CREATE TABLE department (
    id INT,
    name VARCHAR(50),
    manager_id INT
);

INSERT INTO department(id, name, manager_id) VALUES
(1, 'HR', 100),
(2, 'Sales', 101),
(3, 'Engineering', 102),
(4, 'Marketing', 103);

SELECT e.name AS employee_name, d.name AS department_name
INTO employees_in_department
FROM employee e
INNER JOIN department d ON e.manager_id = d.manager_id;
Copy

EMPLOYEE_NAME

DEPARTMENT_NAME

John

HR

ホルヘ

販売

クワク

販売

リュウ

販売

マテオ

エンジニアリング

ニッキー

マーケティング

パウロ

マーケティング

リチャード

マーケティング

ソフィア

エンジニアリング

出力コード:
 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO employee (id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

CREATE TABLE department (
    id INT,
    name VARCHAR(50),
    manager_id INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO department (id, name, manager_id) VALUES
(1, 'HR', 100),
(2, 'Sales', 101),
(3, 'Engineering', 102),
(4, 'Marketing', 103);

CREATE TABLE IF NOT EXISTS employees_in_department AS
  SELECT e.name AS employee_name, d.name AS department_name
  FROM
    employee e
  INNER JOIN
      department d ON e.manager_id = d.manager_id;
Copy
EMPLOYEE_NAMEDEPARTMENT_NAME
JohnHR
JorgeSales
KwakuSales
LiuSales
MateoEngineering
NikkiMarketing
PauloMarketing
RichardMarketing
SofíaEngineering

既知の問題

既知の問題はありません。

GROUP BY 句

説明

GROUP BY 句は、クエリのグループ化列を識別します。グループ化列は、クエリが SUMAVGCOUNT のような標準関数で集約を計算する時に宣言されなければなりません。(Redshift SQL 言語リファレンス GROUP BY 句)

GROUP BY 句 はSnowflakeで完全にサポートされています。

Grammar Syntax

 GROUP BY expression [, ...]
Copy

Sample Source Patterns

Input Code:

 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
);
  
INSERT INTO employee(id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

SELECT 
    manager_id,
    COUNT(id) AS total_employees
INTO manager_employees
FROM employee
GROUP BY manager_id
ORDER BY manager_id;
Copy

MANAGER_ID

TOTAL_EMPLOYEES

100

1

101

3

102

2

103

3

104

3

1

Output Code:
 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO employee (id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

CREATE TABLE IF NOT EXISTS manager_employees AS
  SELECT
      manager_id,
      COUNT(id) AS total_employees
  FROM
      employee
  GROUP BY manager_id
  ORDER BY manager_id;
Copy

MANAGER_ID

TOTAL_EMPLOYEES

100

1

101

3

102

2

103

3

104

3

1

Known Issues

既知の問題はありません。

Related EWIs.

関連 EWIs はありません。

HAVING 句

Description

HAVING 句は、クエリが返す中間グループ化結果セットに条件を適用します。(Redshift SQL 言語リファレンス HAVING 句)

Snowflakeでは、 HAVING 句 が完全にサポートされています。

文法構文

 [ HAVING condition ]
Copy

サンプルソースパターン

入力コード:

 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
);
  
INSERT INTO employee(id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

SELECT manager_id, COUNT(id) AS total_employees
INTO manager_employees
FROM
employee
GROUP BY manager_id
HAVING COUNT(id) > 2
ORDER BY manager_id;
Copy

MANAGER_ID

TOTAL_EMPLOYEES

101

3

103

3

104

3

出力コード:
 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO employee (id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

CREATE TABLE IF NOT EXISTS manager_employees AS
  SELECT manager_id, COUNT(id) AS total_employees
  FROM
    employee
  GROUP BY manager_id
  HAVING COUNT(id) > 2
  ORDER BY manager_id;
Copy

MANAGER_ID

TOTAL_EMPLOYEES

101

3

103

3

104

3

既知の問題

既知の問題はありません。

関連 EWIs。

関連 EWIs はありません。

LIMIT および OFFSET 句

説明

LIMIT および OFFSET 句は、数値で指定された行数を取得し、スキップします。

Snowflakeでは、 LIMIT および OFFSET 句が完全にサポートされています。

Grammar Syntax

 [ LIMIT { number | ALL } ]
[ OFFSET start ]
Copy

Sample Source Patterns

LIMIT 数値

Input Code:
 SELECT id, name, manager_id, salary
INTO limited_employees
FROM employee
LIMIT 5;
Copy

ID

NAME

MANAGER_ID

SALARY

100

カルロス

120000.00

101

John

100

90000.00

102

ホルヘ

101

95000.00

103

クワク

101

105000.00

104

パウロ

102

110000.00

Output Code:
 CREATE TABLE IF NOT EXISTS limited_employees AS
SELECT id, name, manager_id, salary
FROM
employee
LIMIT 5;
Copy

ID

NAME

MANAGER_ID

SALARY

100

カルロス

120000.00

101

John

100

90000.00

102

ホルヘ

101

95000.00

103

クワク

101

105000.00

104

パウロ

102

110000.00

LIMIT ALL

Input Code:
 SELECT id, name, manager_id, salary
INTO limited_employees
FROM employee
LIMIT ALL;
Copy

ID

NAME

MANAGER_ID

SALARY

100

カルロス

120000.00

101

John

100

90000.00

102

ホルヘ

101

95000.00

103

クワク

101

105000.00

104

パウロ

102

110000.00

105

リチャード

102

85000.00

106

マテオ

103

95000.00

107

リュウ

103

108000.00

108

チョウ

104

95000.00

Output Code:
 CREATE TABLE IF NOT EXISTS limited_employees AS
SELECT id, name, manager_id, salary
FROM
employee
LIMIT NULL;
Copy

ID

NAME

MANAGER_ID

SALARY

100

カルロス

120000.00

101

John

100

90000.00

102

ホルヘ

101

95000.00

103

クワク

101

105000.00

104

パウロ

102

110000.00

105

リチャード

102

85000.00

106

マテオ

103

95000.00

107

リュウ

103

108000.00

108

チョウ

104

95000.00

LIMIT なしの OFFSET

Snowflakeは、 LIMIT なしの OFFSET をサポートしていません。LIMIT は、デフォルトの LIMIT である NULL で変換された後に追加されます。

Input Code:
 SELECT id, name, manager_id, salary
INTO limited_employees
FROM employee
OFFSET 5;
Copy

ID

NAME

MANAGER_ID

SALARY

105

リチャード

102

85000.00

106

マテオ

103

95000.00

107

リュウ

103

108000.00

108

チョウ

104

95000.00

Output Code:
 CREATE TABLE IF NOT EXISTS limited_employees AS
SELECT id, name, manager_id, salary
FROM
employee
LIMIT NULL
OFFSET 5;
Copy

ID

NAME

MANAGER_ID

SALARY

105

リチャード

102

85000.00

106

マテオ

103

95000.00

107

リュウ

103

108000.00

108

チョウ

104

95000.00

Known Issues

既知の問題はありません。

Related EWIs.

関連 EWIs はありません。

ローカル変数とパラメーター

Description

Redshiftでは、ストアドプロシージャ内でステートメントを実行する際に、 SELECT INTO 変数を使用することもできます。

このパターンはSnowflakeで完全にサポートされています。

文法構文

 SELECT [ select_expressions ] INTO target [ select_expressions ] FROM ...;
Copy

サンプルソースパターン

左に式がある SELECT INTO

入力コード:
 CREATE OR REPLACE PROCEDURE test_sp1(out param1 int)
AS $$
DECLARE
    var1 int;
BEGIN
     select 10, 100 into param1, var1;
END;
$$ LANGUAGE plpgsql;
Copy

param1

10

出力コード:
 CREATE OR REPLACE PROCEDURE test_sp1 (param1 int)
RETURNS VARIANT
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "03/03/2025",  "domain": "test" }}'
AS $$
        DECLARE
            var1 int;
BEGIN
     select 10, 100 into
                : param1,
                : var1;
            RETURN OBJECT_CONSTRUCT('param1', :param1);
END;
$$;
Copy

TEST_SP1

{ "param1": 10 }

右に式がある SELECT INTO

入力コード:
 CREATE OR REPLACE PROCEDURE test_sp1(out param1 int)
AS $$
DECLARE
    var1 int;
BEGIN
     select into param1, var1 10, 100;
END;
$$ LANGUAGE plpgsql;
Copy

param1

10

出力コード:

Snowflakeはこの文法を SELECT INTO ではサポートしていないため、式は INTO の左側に移動します。

 CREATE OR REPLACE PROCEDURE test_sp1 (param1 int)
RETURNS VARIANT
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "03/03/2025",  "domain": "test" }}'
AS $$
        DECLARE
            var1 int;
BEGIN
     select
                10, 100
            into
                : param1,
                : var1;
            RETURN OBJECT_CONSTRUCT('param1', :param1);
END;
$$;
Copy

TEST_SP1

{ "param1": 10 }

既知の問題

既知の問題はありません。

関連 EWIs。

関連 EWIs はありません。

ORDER BY 句

説明

ORDER BY 句はクエリの結果セットをソートします。(Redshift SQL 言語リファレンスOrder By句)

Snowflakeでは、 ORDER BY 句 が完全にサポートされています。

Grammar Syntax

 [ ORDER BY expression [ ASC | DESC ] ]
[ NULLS FIRST | NULLS LAST ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
Copy

Sample Source Patterns

Input Code:

 CREATE TABLE employee (
    id INT,
    name VARCHAR(20),
    manager_id INT,
    salary DECIMAL(10, 2)
);

INSERT INTO employee (id, name, manager_id, salary) VALUES
(100, 'Carlos', NULL, 120000.00),
(101, 'John', 100, 90000.00),
(102, 'Jorge', 101, 95000.00),
(103, 'Kwaku', 101, 105000.00),
(104, 'Paulo', 102, 110000.00),
(105, 'Richard', 102, 85000.00),
(106, 'Mateo', 103, 95000.00),
(107, 'Liu', 103, 108000.00),
(108, 'Zhang', 104, 95000.00);

SELECT id, name, manager_id, salary
INTO salaries
FROM employee
ORDER BY salary DESC NULLS LAST, name ASC NULLS FIRST
LIMIT 5                                        
OFFSET 2;
Copy

ID

NAME

MANAGER_ID

SALARY

107

リュウ

103

108000.00

103

クワク

101

105000.00

102

ホルヘ

101

95000.00

106

マテオ

103

95000.00

108

チョウ

104

95000.00

Output Code:
 CREATE TABLE employee (
    id INT,
    name VARCHAR(20),
    manager_id INT,
    salary DECIMAL(10, 2)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO employee (id, name, manager_id, salary) VALUES
(100, 'Carlos', NULL, 120000.00),
(101, 'John', 100, 90000.00),
(102, 'Jorge', 101, 95000.00),
(103, 'Kwaku', 101, 105000.00),
(104, 'Paulo', 102, 110000.00),
(105, 'Richard', 102, 85000.00),
(106, 'Mateo', 103, 95000.00),
(107, 'Liu', 103, 108000.00),
(108, 'Zhang', 104, 95000.00);

CREATE TABLE IF NOT EXISTS salaries AS
    SELECT id, name, manager_id, salary
    FROM
        employee
    ORDER BY salary DESC NULLS LAST, name ASC NULLS FIRST
    LIMIT 5
    OFFSET 2;
Copy

ID

NAME

MANAGER_ID

SALARY

107

リュウ

103

108000.00

103

クワク

101

105000.00

102

ホルヘ

101

95000.00

106

マテオ

103

95000.00

108

チョウ

104

95000.00

Known Issues

既知の問題はありません。

Related EWIs.

関連 EWIs はありません。

SELECT リスト

Description

SELECT リストには、クエリで返したい列、関数、式を指定します。リストはクエリの出力を表します。(Redshift SQL 言語リファレンス SELECT リスト)

クエリ開始オプション はSnowflakeで完全にサポートされています。Snowflakeでは、 DISTINCTALL オプションはクエリの先頭に記述する必要があることに注意してください。

注釈

Redshiftでは、アプリケーションで外部キーや無効な主キーを許可すると、クエリが不正な結果を返すことがあります。例えば、 SELECT DISTINCT クエリは、主キー列が全ての一意な値を含んでいない場合、重複行を返す可能性があります。(Redshift SQL 言語リファレンス SELECT リスト)

文法構文

 SELECT
[ TOP number ]
[ ALL | DISTINCT ] * | expression [ AS column_alias ] [, ...]
Copy

サンプルソースパターン

トップ句

入力コード:
 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
);
  
INSERT INTO employee(id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
  
SELECT TOP 5 id, name, manager_id 
INTO top_employees
FROM employee;

SELECT * FROM top_employees;
Copy

ID

NAME

MANAGER_ID

100

カルロス

null

101

John

100

102

ホルヘ

101

103

クワク

101

110

リュウ

101

出力コード:
 CREATE TABLE employee
(
  id INT,
  name VARCHAR(20),
  manager_id INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO employee (id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

CREATE TABLE IF NOT EXISTS top_employees AS
SELECT TOP 5 id, name, manager_id
  FROM
    employee;

SELECT * FROM
  top_employees;
Copy

ID

NAME

MANAGER_ID

100

カルロス

null

101

John

100

102

ホルヘ

101

103

クワク

101

110

リュウ

101

ALL

入力コード:
SELECT ALL manager_id
INTO manager
FROM employee;
Copy

MANAGER_ID

null

100

101

101

101

102

103

103

103

104

104

102

104

出力コード:
 CREATE TABLE IF NOT EXISTS manager AS
SELECT ALL manager_id
FROM
employee;
Copy

MANAGER_ID

null

100

101

101

101

102

103

103

103

104

104

102

104

DISTINCT

入力コード:
SELECT DISTINCT manager_id
INTO manager
FROM employee;
Copy

MANAGER_ID

null

100

101

102

103

104

出力コード:
 CREATE TABLE IF NOT EXISTS manager AS
SELECT DISTINCT manager_id
FROM
employee;
Copy

MANAGER_ID

null

100

101

102

103

104

既知の問題

既知の問題はありません。

関連 EWIs。

関連 EWIs はありません。

UNION、 INTERSECT、および EXCEPT

説明

UNIONINTERSECTEXCEPT セット演算子 は、2つの別々のクエリ式の結果を比較し、マージするために使用されます。(Redshift SQL 言語リファレンスセット演算子)

Snowflakeでは、 セット演算子 が完全にサポートされています。

Grammar Syntax

 query
{ UNION [ ALL ] | INTERSECT | EXCEPT | MINUS }
query
Copy

Sample Source Patterns

Input Code:

 SELECT id, name, manager_id
INTO some_employees
FROM
employee
WHERE manager_id = 101

UNION

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 102

UNION ALL

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 101

INTERSECT

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 103

EXCEPT

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 104;
Copy

ID

NAME

MANAGER_ID

103

クワク

101

110

リュウ

101

102

ホルヘ

101

106

マテオ

102

201

ソフィア

102

Output Code:
 CREATE TABLE IF NOT EXISTS some_employees AS
SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 101

UNION

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 102

UNION ALL

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 101

INTERSECT

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 103

EXCEPT

SELECT id, name, manager_id
FROM
employee
WHERE manager_id = 104;
Copy

ID

NAME

MANAGER_ID

102

ホルヘ

101

103

クワク

101

110

リュウ

101

106

マテオ

102

201

ソフィア

102

Known Issues

既知の問題はありません。

Related EWIs.

関連 EWIs はありません。

WHERE 句

Description

WHERE 句には、テーブルを結合するか、テーブルの列に述語を適用する条件が含まれます。(Redshift SQL 言語リファレンス WHERE 句)

WHERE 句 はSnowflakeで完全にサポートされています。

文法構文

 [ WHERE condition ]
Copy

サンプルソースパターン

入力コード:

 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
);
  
INSERT INTO employee(id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

SELECT id, name, manager_id
INTO employee_names
FROM employee
WHERE name LIKE 'J%';
Copy

ID

NAME

MANAGER_ID

101

John

100

102

ホルヘ

101

出力コード:
 CREATE TABLE employee (
  id INT,
  name VARCHAR(20),
  manager_id INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO employee (id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

CREATE TABLE IF NOT EXISTS employee_names AS
  SELECT id, name, manager_id
  FROM
    employee
  WHERE name LIKE 'J%' ESCAPE '\\';
Copy

ID

NAME

MANAGER_ID

101

John

100

102

ホルヘ

101

既知の問題

既知の問題はありません。

関連 EWIs。

関連 EWIs はありません。

WITH 句

説明

WITH 句は、クエリで SELECT INTO の前に置かれるオプションの句です。WITH 句は、1つ以上の common_table_expressions を定義します。各共通テーブル式(CTE)は、ビュー定義に似た仮テーブルを定義します。これらの仮テーブルは FROM 句で参照できます。(Redshift SQL 言語リファレンス WITH 句)

Snowflakeでは、 WITH 句 が完全にサポートされています。

Grammar Syntax

 [ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]

--Where common_table_expression can be either non-recursive or recursive. 
--Following is the non-recursive form:
CTE_table_name [ ( column_name [, ...] ) ] AS ( query )

--Following is the recursive form of common_table_expression:
CTE_table_name (column_name [, ...] ) AS ( recursive_query )
Copy

Sample Source Patterns

非再帰形式

Input Code:
 CREATE TABLE orders (
    order_id INT,
    customer_id INT,
    order_date DATE,
    total_amount DECIMAL(10,2)
);


INSERT INTO orders (order_id, customer_id, order_date, total_amount)
VALUES
(1, 101, '2024-02-01', 250.00),
(2, 102, '2024-02-02', 600.00),
(3, 103, '2024-02-03', 150.00),
(4, 104, '2024-02-04', 750.00),
(5, 105, '2024-02-05', 900.00);


WITH HighValueOrders AS (
    SELECT
        order_id,
        customer_id,
        order_date,
        total_amount
    FROM orders
    WHERE total_amount > 500
)
SELECT * INTO high_value_orders FROM HighValueOrders;

SELECT * FROM high_value_orders;
Copy

ORDER_ID

CUSTOMER_ID

ORDER_DATE

TOTAL_AMOUNT

2

102

2024-02-02

600.00

4

104

2024-02-04

750.00

5

105

2024-02-05

900.00

Output Code:
 CREATE TABLE orders (
    order_id INT,
    customer_id INT,
    order_date DATE,
    total_amount DECIMAL(10,2)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "03/03/2025",  "domain": "test" }}';


INSERT INTO orders (order_id, customer_id, order_date, total_amount)
VALUES
(1, 101, '2024-02-01', 250.00),
(2, 102, '2024-02-02', 600.00),
(3, 103, '2024-02-03', 150.00),
(4, 104, '2024-02-04', 750.00),
(5, 105, '2024-02-05', 900.00);

CREATE TABLE IF NOT EXISTS high_value_orders AS
WITH HighValueOrders AS (
    SELECT
        order_id,
        customer_id,
        order_date,
        total_amount
    FROM
        orders
    WHERE total_amount > 500
    )
    SELECT *
    FROM
    HighValueOrders;
    
SELECT * FROM
    high_value_orders;
Copy

ORDER_ID

CUSTOMER_ID

ORDER_DATE

TOTAL_AMOUNT

2

102

2024-02-02

600.00

4

104

2024-02-04

750.00

5

105

2024-02-05

900.00

再帰形式

Input Code:
 CREATE TABLE employee (
   id INT,
   name VARCHAR(20),
   manager_id INT
);

INSERT INTO employee(id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);


WITH RECURSIVE john_org(id, name, manager_id, level) 
AS
( 
   SELECT id, name, manager_id, 1 AS level
   FROM employee
   WHERE name = 'John'
   UNION ALL
   SELECT e.id, e.name, e.manager_id, level + 1 AS next_level
   FROM employee e, john_org j
   WHERE e.manager_id = j.id and level < 4
)
SELECT DISTINCT id, name, manager_id into new_org FROM john_org ORDER BY manager_id;

SELECT * FROM new_org;
Copy

ID

NAME

MANAGER_ID

101

John

100

103

クワク

101

102

ホルヘ

101

110

リュウ

101

106

マテオ

102

201

ソフィア

102

105

リチャード

103

110

ニッキー

103

104

パウロ

103

120

サーンヴィ

104

200

シャーリー

104

205

チョウ

104

Output Code:
 CREATE TABLE employee (
   id INT,
   name VARCHAR(20),
   manager_id INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/06/2025",  "domain": "test" }}';

INSERT INTO employee (id, name, manager_id) VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);

CREATE TABLE IF NOT EXISTS new_org AS
WITH RECURSIVE john_org(id, name, manager_id, level)
AS
(
   SELECT id, name, manager_id, 1 AS level
   FROM
         employee
   WHERE
         RTRIM( name) = RTRIM( 'John')
   UNION ALL
   SELECT e.id, e.name, e.manager_id, level + 1 AS next_level
   FROM
         employee e,
         john_org j
   WHERE e.manager_id = j.id and level < 4
   )
   SELECT DISTINCT id, name, manager_id
   FROM
   john_org
   ORDER BY manager_id;

   
SELECT * FROM
   new_org;
Copy

ID

NAME

MANAGER_ID

101

John

100

103

クワク

101

102

ホルヘ

101

110

リュウ

101

106

マテオ

102

201

ソフィア

102

105

リチャード

103

110

ニッキー

103

104

パウロ

103

120

サーンヴィ

104

200

シャーリー

104

205

チョウ

104

Known Issues

既知の問題はありません。

Related EWIs.

関連 EWIs はありません。