複数行INSERT INTO VALUES構文を解析する

複数行VALUES構文 — INSERT INTO table VALUES (...), (...), (...) — を使用するSQL INSERT文を適切にフォーマットされたCSV行に変換します。

Multi-Row INSERT

詳細な説明

複数行VALUES — コンパクトなINSERTフォーマット

現代のSQLデータベースは、カンマ区切りの値タプルを使用して単一のINSERT文で複数行を挿入することをサポートしています。これは個別のINSERT文よりも効率的で、pg_dumpmysqldumpなどのツールのデフォルト出力フォーマットです。

SQLの例

INSERT INTO inventory (sku, product_name, quantity, unit_price, warehouse) VALUES
  ('SKU-001', 'Widget A', 500, 4.99, 'West'),
  ('SKU-002', 'Widget B', 1200, 3.49, 'East'),
  ('SKU-003', 'Gadget C', 75, 29.99, 'West'),
  ('SKU-004', 'Gadget D', 200, 19.99, 'East'),
  ('SKU-005', 'Component E', 3000, 0.99, 'Central');

生成されるCSV

sku,product_name,quantity,unit_price,warehouse
SKU-001,Widget A,500,4.99,West
SKU-002,Widget B,1200,3.49,East
SKU-003,Gadget C,75,29.99,West
SKU-004,Gadget D,200,19.99,East
SKU-005,Component E,3000,0.99,Central

解析の詳細

パーサーは複数行インサートを以下のように処理します:

  1. VALUESキーワードを検出
  2. 残りを最上位の括弧レベルで個別の(...)タプルに分割
  3. 各タプル内で、クォートされた文字列を尊重しながらカンマで分割
  4. 式内のネストされた括弧を処理(ほとんどのINSERT値は単純なリテラル)

これにより、単一の文に何百もの値タプルがあっても、個別のCSV行に正しく分割されます。行数は出力パネルの上の情報バーに表示されます。

ユースケース

pg_dumpやmysqldumpの拡張インサート構文を使用する出力ファイルからデータを抽出し、pandasやRなどのデータ分析ツール用のCSVに変換する。

試してみる — SQL to CSV Converter

フルツールを開く