検索
tee / insights
LEARNING / SQLHOME
DATA → QUERY → RESULT

SQL文法マップ

検索・集計からCOPY INTO、データ更新、表の定義、権限管理まで、目的からSQLを探せます。SnowflakeとBigQueryの書き方・前提・状態変化を比較できます。

SQL方言

収録範囲と公式リファレンス

検索・分析23グループと操作22項目を収録しています。表の「操作例あり」は代表例の収録を示します。全オプションや製品の全コマンドを網羅した一覧ではありません。

操作例の仕様確認:2026-10-06

収録範囲と公式リファレンス
領域扱う構文・機能収録状態公式資料
検索・分析SELECT / JOIN / GROUP BY / WINDOW代表例ありSnowflake · BigQuery
取り込み・書き出しCOPY INTO / LOAD DATA / EXPORT DATA代表例ありSnowflake · BigQuery
データ更新INSERT / UPDATE / DELETE / MERGE / TRUNCATE代表例ありSnowflake · BigQuery
オブジェクト定義TABLE / VIEW / SCHEMA / FUNCTION / PROCEDURE代表例ありSnowflake · BigQuery
トランザクション・権限・手続きTRANSACTION / GRANT / REVOKE / DECLARE / INFORMATION_SCHEMA代表例ありSnowflake · BigQuery
自動化・パイプラインPIPE / STREAM / TASK / DYNAMIC TABLE / scheduled queries公式資料への参照のみSnowflake · BigQuery
外部表・特殊な表EXTERNAL TABLE / ICEBERG / SNAPSHOT / CLONE / MATERIALIZED VIEW公式資料への参照のみSnowflake · BigQuery
アカウント・計算資源ACCOUNT / USER / ROLE / WAREHOUSE / IAM / reservations公式資料への参照のみSnowflake · BigQuery
セキュリティ・共有POLICY / MASKING / ROW ACCESS / sharing / connections公式資料への参照のみSnowflake · BigQuery
機械学習・製品拡張ML / Cortex / search indexes / vector indexes / applications公式資料への参照のみSnowflake · BigQuery

SQLの全体像

検索・分析と主要な操作コマンドを扱います。収録表で代表例と公式資料への参照範囲を確認できます。

入力を作る

出所を決める

FROMは処理対象の表・結果を指定する。

名前を付ける / 入れ子にする

WITHとFROM内のsubqueryは、同じ中間結果を表現できる。

横につなぐ:どの行を残す?

一致 / 左を全部 / 両方を全部 / 全組み合わせ。

結合条件 / 結合後の除外

LEFT JOINでは条件を置く場所で残る行が変わる。

ネストした値を行へ

複合値の要素を取り出し、行数を増やす。

行を絞る

いつ絞る?

WHERE=集計前、HAVING=集計後、QUALIFY=window後。

行をまとめる

N行 → 1値

COUNTは何を数えるか、他の集約は何を求めるかで選ぶ。

集約の中で並べる / 分位点を求める

WITHIN GROUPは集約する値の並び順を決める。BigQueryの集約では関数内にORDER BYを書く。

集約に渡す値を選ぶ

重複・NULL・最大値の行・入力件数は、集約関数の内側で制御する。

集約単位 / 重複除去

GROUP BYは集約単位を作り、DISTINCTは選んだ列全体の重複を消す。

行数を保って分析する

まとめる / 各行に付ける

Aggregate=N行→グループごとに1行。Window=N行→N行。

順位:同点の扱い

連番 / 同順位で次を飛ばす / 同順位で次を詰める。

NULLを飛ばす / 並べる

IGNORE・RESPECT NULLSは関数が見る値を変え、NULLS FIRST・LASTは並べる位置を変える。

応用:行位置 / 同じ値の範囲

ROWSは行位置、RANGEは並べ替え値で範囲を決める。

値を作る

比較する / 条件を組む

比較はTRUE / FALSE / NULLを返し、論理演算で組み合わせる。

欠損を判定 / 補う

NULLとの等号比較は不明になる。IS NULLで判定する。

汎用分岐 / 二択の短縮形

CASEは複数条件、IF / IFFは二択を簡潔に書ける。

通常変換 / 安全に変換

変換できない値:CASTはエラー、安全版はNULL。

符号を外す / 丸める

ABSは絶対値、ROUNDは指定桁への丸め。

変換 / 抽出 / 結合

同じ文字列に4種類の操作を当てる。

現在 / 加算 / 差 / 粒度化

日付の作用は共通。引数の順番と単位の置き方が違う。

ネストした値 / SQLの文字列

見た目が7でも、返る型が違う。

集合を組み替える

縦につなぐ:重複をどう扱う?

同じA・Bで、重複を保持 / 除去 / 共通 / 左だけを比較する。

応用:列名で合わせる

位置が違っても、同じ列名を対応させる。

結果を整える

最後に整える

重複を消す → 並べる → 先頭を飛ばす → 件数を取る。

ファイルを入出力する

ファイルから表へ取り込むCOPY INTO <table>ファイルの行を表に取り込みます。取り込み結果と対象行を確認します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

空のorders表と、id,amountのヘッダーがあるCSVを用意します。Snowflakeは内部ステージcsv_stageへアップロード済み、BigQueryは同じロケーション条件を満たすCloud Storage上に置き、YOUR_BUCKETを置換します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
COPY INTO tbi_lab.orders
FROM @tbi_lab.csv_stage/orders.csv
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
ON_ERROR = 'ABORT_STATEMENT';

実行後の変化

ファイルの行を表に取り込みます。取り込み結果と対象行を確認します。

確認方法

確認方法
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

ON_ERRORはエラー時の扱いです。ABORT_STATEMENTは文を中止します。COPYのロード履歴によって再実行時に既存ファイルが省略される場合があります。FORCE=TRUEは重複取り込みにつながり得ます。

公式資料 · Snowflake 1

# load-files
表からファイルへ書き出すCOPY INTO <location>検索結果をCSVファイルとして出力します。保存先のファイルを確認します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

2行入りorders表と書き込み権限のある保存先を用意します。Snowflakeはcsv_stage、BigQueryはYOUR_BUCKETを置換したCloud Storageを使います。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
COPY INTO @tbi_lab.csv_stage/export_run/
FROM (SELECT id, amount FROM tbi_lab.orders)
FILE_FORMAT = (TYPE = CSV)
HEADER = TRUE;

実行後の変化

検索結果をCSVファイルとして出力します。保存先のファイルを確認します。

確認方法

確認方法
LIST @tbi_lab.csv_stage/export_run/;

毎回新しい出力先を使ってください。出力は複数ファイルになる場合があります。保存先でファイル数と内容を確認します。

公式資料 · Snowflake 1

# unload-files
ステージとファイル形式を用意するCREATE STAGE · CREATE FILE FORMAT · PUT · LISTSnowflakeでは空の内部ステージとCSV形式の定義ができます。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_labと必要な作成・参照権限を用意します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
CREATE FILE FORMAT tbi_lab.csv_format
  TYPE = CSV SKIP_HEADER = 1;
CREATE STAGE tbi_lab.csv_stage
  FILE_FORMAT = (FORMAT_NAME = 'tbi_lab.csv_format');

実行後の変化

Snowflakeでは空の内部ステージとCSV形式の定義ができます。

確認方法

確認方法
LIST @tbi_lab.csv_stage;

ステージの作成だけではファイルは入りません。Snowsightのアップロード画面かPUT対応クライアントでorders.csvを置きます。PUTは内部ステージ向けです。

公式資料 · Snowflake 1 · Snowflake 2 · Snowflake 3

# stage-format
取り込み前にファイルを検証するVALIDATION_MODE · RETURN_ERRORS · ON_ERROR · COPY INTOSnowflakeでは表に行を追加せず、ファイルのエラーを返します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

空のorders表と、id,amountのヘッダーがあるCSVを用意します。Snowflakeは内部ステージcsv_stageへアップロード済み、BigQueryは同じロケーション条件を満たすCloud Storage上に置き、YOUR_BUCKETを置換します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
COPY INTO tbi_lab.orders
FROM @tbi_lab.csv_stage/orders.csv
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
VALIDATION_MODE = 'RETURN_ERRORS';

実行後の変化

Snowflakeでは表に行を追加せず、ファイルのエラーを返します。

確認方法

確認方法
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

VALIDATION_MODEは検証だけを行います。変換SELECT付きCOPYでは使えません。返されたエラーを直してから通常のCOPYを実行します。

公式資料 · Snowflake 1

# validate-load

保存したデータを更新する

行を追加するINSERT INTO · INSERT SELECTid=3、amount=300の行を追加します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
INSERT INTO tbi_lab.orders (id, amount)
VALUES (3, 300);

実行後の変化

id=3、amount=300の行を追加します。

確認方法

確認方法
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

公式資料 · Snowflake 1

# insert-rows
条件に合う行を更新するUPDATE · SET · WHEREid=1のamountが150になります。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
UPDATE tbi_lab.orders SET amount = 150 WHERE id = 1;

実行後の変化

id=1のamountが150になります。

確認方法

確認方法
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

変更前に同じWHERE条件のSELECTで対象行を確認してください。BigQueryのUPDATE/DELETEはWHEREが必要です。

公式資料 · Snowflake 1

# update-rows
条件に合う行を削除するDELETE FROM · WHEREid=2の行を削除します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
DELETE FROM tbi_lab.orders WHERE id = 2;

実行後の変化

id=2の行を削除します。

確認方法

確認方法
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

変更前に同じWHERE条件のSELECTで対象行を確認してください。BigQueryのUPDATE/DELETEはWHEREが必要です。

公式資料 · Snowflake 1

# delete-rows
一致する行を更新し、新しい行を追加するMERGE INTO · WHEN MATCHED · WHEN NOT MATCHEDid=1を150に更新し、id=3を300で追加します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
MERGE INTO tbi_lab.orders AS t
USING (SELECT 1 AS id, 150 AS amount
       UNION ALL SELECT 3, 300) AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET amount = s.amount
WHEN NOT MATCHED THEN INSERT (id, amount)
  VALUES (s.id, s.amount);

実行後の変化

id=1を150に更新し、id=3を300で追加します。

確認方法

確認方法
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

更新対象のキーに複数の入力行が一致しないよう、入力を確認します。複数一致時の扱いは製品・処理内容で異なります。

公式資料 · Snowflake 1

# merge-rows
全行を削除し、表の定義を残すTRUNCATE TABLE表の行数が0になります。列の定義は残ります。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
TRUNCATE TABLE tbi_lab.orders;

実行後の変化

表の行数が0になります。列の定義は残ります。

確認方法

確認方法
SELECT COUNT(*) AS rows_left FROM tbi_lab.orders;

全行が対象です。行を選ぶWHEREは付けられません。

公式資料 · Snowflake 1

# truncate-table

表・ビュー・関数を定義する

列と型を指定して表を作るCREATE TABLE · TEMPORARY TABLEidとamountの2列を持つ空の表ができます。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_labがあり、作成するオブジェクト名が未使用であることを確認します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
CREATE TABLE tbi_lab.orders (id INTEGER, amount NUMBER(12,2));

実行後の変化

idとamountの2列を持つ空の表ができます。

確認方法

確認方法
DESCRIBE TABLE tbi_lab.orders;

既存データを置き換えるOR REPLACEはこの例では使いません。

公式資料 · Snowflake 1

# create-table
検索結果を新しい表へ保存するCREATE TABLE AS SELECT · CTASamountが200以上の行を新しい表に保存します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

tbi_labがあり、作成するオブジェクト名が未使用であることを確認します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
CREATE TABLE tbi_lab.large_orders AS
SELECT id, amount FROM tbi_lab.orders WHERE amount >= 200;

実行後の変化

amountが200以上の行を新しい表に保存します。

確認方法

確認方法
SELECT * FROM tbi_lab.large_orders ORDER BY id;

既存データを置き換えるOR REPLACEはこの例では使いません。

公式資料 · Snowflake 1

# create-as-select
検索をビューとして保存するCREATE VIEW · ALTER VIEW · DROP VIEW条件付きの検索を保存します。通常のビューは結果行の複製を保持しません。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

tbi_labがあり、作成するオブジェクト名が未使用であることを確認します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
CREATE VIEW tbi_lab.large_orders_view AS
SELECT id, amount FROM tbi_lab.orders WHERE amount >= 200;

実行後の変化

条件付きの検索を保存します。通常のビューは結果行の複製を保持しません。

確認方法

確認方法
SELECT * FROM tbi_lab.large_orders_view ORDER BY id;

ALTER VIEWやDROP VIEWはビューの定義を変更・削除します。元の表との依存を確認してください。

公式資料 · Snowflake 1

# create-view
既存の表に列を追加するALTER TABLE · ADD COLUMN · DROP COLUMN · RENAMEnote列が追加されます。既存の行ではNULLになります。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
ALTER TABLE tbi_lab.orders ADD COLUMN note VARCHAR;

実行後の変化

note列が追加されます。既存の行ではNULLになります。

確認方法

確認方法
DESCRIBE TABLE tbi_lab.orders;

この例は列追加です。列削除や型変更は別の操作で、既存データ・依存先の確認が必要です。

公式資料 · Snowflake 1

# alter-table
表を削除するDROP TABLE · IF EXISTS表の定義とデータを削除します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
DROP TABLE tbi_lab.orders;

実行後の変化

表の定義とデータを削除します。

確認方法

確認方法
SHOW TABLES LIKE 'ORDERS' IN SCHEMA tbi_lab;

復元できるかどうかは製品の保持設定等に依存します。復元を前提に実行しないでください。

公式資料 · Snowflake 1

# drop-table
スキーマ・データセットを作るCREATE SCHEMA · USE DATABASE · USE SCHEMA表などを配置するtbi_labを作ります。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
CREATE SCHEMA tbi_lab;
USE SCHEMA tbi_lab;

実行後の変化

表などを配置するtbi_labを作ります。

確認方法

確認方法
SELECT CURRENT_DATABASE(), CURRENT_SCHEMA();

現在のデータベース内にスキーマを作成します。USE SCHEMAで以後の既定の参照先を切り替えます。

公式資料 · Snowflake 1 · Snowflake 2

# namespace
独自のSQL関数を作るCREATE FUNCTION · UDF呼び出すと入力に1を加える関数ができます。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_labがあり、作成するオブジェクト名が未使用であることを確認します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
CREATE FUNCTION tbi_lab.add_one(x INTEGER)
RETURNS INTEGER LANGUAGE SQL
AS $$ x + 1 $$;

実行後の変化

呼び出すと入力に1を加える関数ができます。

確認方法

確認方法
SELECT tbi_lab.add_one(2) AS result;

公式資料 · Snowflake 1

# user-function
処理を手続きとして保存するCREATE PROCEDURE · CALL呼び出すと3を返す手続きができます。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_labがあり、作成するオブジェクト名が未使用であることを確認します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
CREATE PROCEDURE tbi_lab.answer()
RETURNS INTEGER LANGUAGE SQL
AS $$
BEGIN
  RETURN 3;
END;
$$;

実行後の変化

呼び出すと3を返す手続きができます。

確認方法

確認方法
CALL tbi_lab.answer();

公式資料 · Snowflake 1

# procedure

処理・権限・状態を管理する

変更を確定する・取り消すBEGIN TRANSACTION · COMMIT · ROLLBACKこの例は更新を取り消すため、id=1のamountは100のままです。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_lab.orders(id, amount)に(1,100)、(2,200)の2行がある状態から始めます。各例を続けて実行せず、元の状態に戻して試してください。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
BEGIN TRANSACTION;
UPDATE tbi_lab.orders SET amount = 150 WHERE id = 1;
ROLLBACK;

実行後の変化

この例は更新を取り消すため、id=1のamountは100のままです。

確認方法

確認方法
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

COMMITで確定、ROLLBACKで取り消します。SnowflakeのDDLは実行中のトランザクションを暗黙にコミットするため、この例にDDLを混ぜません。

公式資料 · Snowflake 1

# transaction
読み取り権限を付与するGRANT · TO ROLE指定した受け手に、対象表を読むための権限を付与します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

orders表と権限を変更できる管理者権限が必要です。Snowflakeのtbi_readerロール、BigQueryの受け手のグループを事前に用意・確認します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
GRANT SELECT ON TABLE tbi_lab.orders TO ROLE tbi_reader;

実行後の変化

指定した受け手に、対象表を読むための権限を付与します。

確認方法

確認方法
SHOW GRANTS ON TABLE tbi_lab.orders;

表のSELECT権限だけでは不十分な場合があります。データベース・スキーマのUSAGE、使用するwarehouse等の権限も確認します。

公式資料 · Snowflake 1

# permissions-grant
直接付与した権限を取り消すREVOKE · FROM ROLE指定した直接の付与を取り消します。他の経路で得た権限は残る場合があります。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

orders表と権限を変更できる管理者権限が必要です。Snowflakeのtbi_readerロール、BigQueryの受け手のグループを事前に用意・確認します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
REVOKE SELECT ON TABLE tbi_lab.orders FROM ROLE tbi_reader;

実行後の変化

指定した直接の付与を取り消します。他の経路で得た権限は残る場合があります。

確認方法

確認方法
SHOW GRANTS ON TABLE tbi_lab.orders;

他のロールや上位のリソースから継承したアクセスは、このREVOKEだけでは取り消せません。実効権限を確認します。

公式資料 · Snowflake 1

# permissions-revoke
表と列の定義を調べるSHOW TABLES · DESCRIBE TABLE · INFORMATION_SCHEMA参照できる表・列の定義を返します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

tbi_labと必要な作成・参照権限を用意します。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
SHOW TABLES IN SCHEMA tbi_lab;

実行後の変化

参照できる表・列の定義を返します。

確認方法

確認方法
DESCRIBE TABLE tbi_lab.orders;

公式資料 · Snowflake 1 · Snowflake 2

# inspect-objects
変数と複数の文を使うDECLARE · BEGIN · END · EXECUTE IMMEDIATE変数を2から3に変え、3を返します。

Snowflake · 選択した製品の環境で実行するSQL例です。このページでは実行しません。公式仕様と照合済みですが、クラウドでの実行は未検証です。

実行前の前提

Snowflakeは使用するデータベースを選択済み、BigQueryは使用するプロジェクトを選択済みとします。tbi_labは練習用のスキーマ/データセットです。

権限のある練習用環境で、表名・保存先・受け手を確認して使ってください。クラウドの実行・保存に料金がかかる場合があります。

独立した操作例
EXECUTE IMMEDIATE $$
DECLARE n INTEGER DEFAULT 2;
BEGIN
  RETURN n + 1;
END;
$$;

実行後の変化

変数を2から3に変え、3を返します。

確認方法

上の状態変化と、実行環境の結果・権限設定・保存先を照合してください。

BEGIN…ENDは処理のブロックです。BEGIN TRANSACTIONによるトランザクションの開始とは区別します。

公式資料 · Snowflake 1 · Snowflake 2

# script

JOINで行数が増える理由を試す

同じ顧客に注文が3件あれば、その顧客は結合結果に3回現れます。注文数とSQLを変えて、対応する行を確かめましょう。

入力データを見る

SELECTまたはWITHで始まる読み取り用のSQLを1文実行できます。表名はcustomersとordersです。最大200行を表示します。

例を選ぶかSQLを編集して、実行してください。

このSQLを言葉で読む

まず、FROMで顧客の表customersを読み込み、AS cで、このクエリ内ではcustomersをcと呼ぶことにします。

次に、INNER JOINで注文の表ordersを組み合わせます。AS oでordersをoと呼び、ON c.id = o.customer_idにより、顧客の番号c.idと注文の顧客番号o.customer_idが等しい組だけを残します。同じ顧客に注文が複数あれば、その数だけ行ができます。

SELECTで、顧客番号c.id、名前c.name、注文番号o.idを取り出します。o.idにはAS order_idで出力列名order_idを付けます。

最後に、ORDER BY c.id, o.idで顧客番号の小さい順に並べ、同じ顧客の中では注文番号の小さい順に並べます。

c.idなどの「.」は表の別名と列名をつなぎ、「,」は列や式の区切り、「;」はSQL文の終わりを示します。

理解を確認する
LEFT JOINで注文のないCaraの注文数を0にするには?

この実行欄はSQLiteです。上のSnowflake / BigQuery切替とは独立しています。架空のデータだけを使い、SQLはブラウザ内で実行します。入力は保存・送信されません。初回実行時に外部CDNから実行エンジンを読み込みます。

JOINの種類を比較する · SQLite公式のSELECT・JOIN仕様