本文へスキップ

CSVにSQLで問い合わせ

SQL over CSV

置いたCSVやTSVにブラウザ内でSQLを実行し、SELECT・WHERE・GROUP BY/HAVING・ORDER BY・LIMIT・CASEと2表のJOINまで扱います。

CSVを置いて、ブラウザの中でSQLを書いて問い合わせます。何もインストールせず、何もアップロードしません。ファイルを2つ置けばJOINが使えます。対応する文法はページに書き出してあり、「なぜ動かなかったのか」にはエラーメッセージより速く答えます。

🔒 ブラウザの中だけで動きますsqlquerycsvanalysis

CSV・TSV ファイルを置いてください(複数でも構いません)

このタブの中で読みます。アップロードはしません。韓国語・日本語・中国語・欧米版の Excel が保存したファイル(CP949, Shift_JIS, GBK, Windows-1252)を判別します。

SQL

使える文法

SELECT [DISTINCT] 列, 式 [AS 別名], 表.* , *
FROM 表 [別名]
[ [INNER|LEFT] JOIN 表 [別名] ON 条件 ]      -- 表は 2 つまで
[WHERE 条件]
[GROUP BY 式, …] [HAVING 条件]
[ORDER BY 式|別名|番号 [ASC|DESC], …]
[LIMIT n [OFFSET m]]

条件:  = <> < <= > >=   AND OR NOT   IN (…)   LIKE 'Seoul%'   BETWEEN a AND b   IS [NOT] NULL
式:    + - * / %   ||(文字列の連結)   CASE WHEN … THEN … ELSE … END   CAST(x AS INTEGER|REAL|TEXT)
集計:  COUNT(*) COUNT(DISTINCT x) SUM AVG MIN MAX GROUP_CONCAT(x, ',')
関数:  UPPER LOWER LENGTH TRIM LTRIM RTRIM SUBSTR(s, 開始, 長さ) LEFT RIGHT REPLACE INSTR CONCAT
       COALESCE IFNULL NULLIF IIF(条件, a, b) ROUND(x, 桁) ABS FLOOR CEIL SQRT POWER MOD TYPEOF
名前:  日本語の列名はそのまま使えます。空白を含む名前は "名前" か `名前` で囲みます   -- コメント, /* コメント */

NULL はどの比較でも真になりません。LIKE は大文字と小文字を区別せず、0 で割ると NULL になります。集計の問い合わせでは、GROUP BY にない列はそのグループの最初の行の値を取ります(SQLite と同じです)。副問い合わせとウィンドウ関数はありません。

ファイルはこのタブの中で読み、アップロードはしません。列の型はファイルから推定するので、数値の列は数として、文字列の列は文字の並び順で比べます。

使い方

  1. ファイルを1つ以上置きます

    それぞれがファイル名を取ったテーブルになります。名前が打ちにくければ、エディタの上の一覧で付け替えられます。

  2. クエリを書きます

    SELECT、WHERE、HAVINGを伴うGROUP BY、ORDER BY、LIMIT、CASE、そして2表のJOINです。Ctrl+Enterで実行します。入力欄の下の例のボタンを押すと、自分のテーブル名に合わせた動くクエリが入ります。

  3. エラーの位置を読みます

    失敗したクエリは、パーサが止まった行と桁を報告します。たいていは、実際の誤りより1トークン先です。

  4. 結果を書き出します

    Excel向けにBOM付きのCSVか、JSONを読むもの向けにJSONです。

よくある質問

サブクエリやウィンドウ関数に対応していますか。

対応していません。これはSQLiteをWebAssemblyに落としたものではなく、このサイトのために書いたSQLの部分集合です。WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、CASEを伴うSELECTと2表のJOIN、それがすべてです。文法のパネルにある一覧がそのままの範囲です。

データはサーバーに送られますか。

送られません。パーサも評価器もこのタブの中で動きます。機能が本物のデータベースより小さいのはそれが理由ですし、絶対にアップロードしないファイルに向けられるのも同じ理由です。

韓国語の列名を使えますか。

そのまま使えます。空白の入った名前には引用符が要ります。二重引用符かバックティックのどちらかです。

エラーメッセージが韓国語で出ます。

クエリエンジンの25個の構文解析と評価のメッセージは韓国語だけです。どれもテストで一字一句そのまま検証されているからです。エディタの横の構文のパネルは両方の言語で書かれていて、同じ範囲を扱います。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。