祈灵工具箱

🪣在线用 SQL 查询 CSV/JSON - 浏览器本地运行,支持 JOIN

手上有几个 CSV 或 JSON 文件,想做筛选、分组汇总或把两张表关联起来,又不想为此装数据库?把文件拖进来,每个文件就是一张表,表名取自文件名,列类型(数字、文本、布尔)自动推断,空单元格视为 NULL,像 00123 这样带前导零的编号保留为文本。然后直接写 SQL:SELECT 表达式和别名、DISTINCT、WHERE 中的 AND/OR/NOT、比较、LIKE、IN、BETWEEN、IS NULL,GROUP BY 配合 COUNT、SUM、AVG、MIN、MAX、COUNT(DISTINCT)、GROUP_CONCAT、MEDIAN,HAVING,多列 ORDER BY(可指定 NULLS FIRST/LAST),LIMIT/OFFSET,INNER/LEFT/CROSS JOIN(等值条件用哈希连接),CASE WHEN、CAST,以及字符串、数学和日期函数(YEAR、MONTH、EXTRACT、STRFTIME、DATE_TRUNC、DATEDIFF 等),FROM 和 IN 里也可以写子查询。NULL 按标准 SQL 的三值逻辑处理。查询引擎是为本工具编写的轻量实现,10 万行的分组统计通常在几十毫秒内完成。出错时会指出具体行列并给出“是不是想写某列”的提示。左侧显示每张表的列和类型,点击即可插入;运行过的查询保存在历史记录里;结果表格虚拟滚动,可导出 CSV(带 BOM,Excel 打开不乱码)或 JSON。文件只在浏览器中读取,不会上传。

免费 · 无需注册 · 浏览器本地处理最后更新:

正在加载工具...

如何使用CSV SQL 查询

  1. 1拖入或选择 CSV、TSV、JSON / NDJSON 文件(可多个),或载入示例数据
  2. 2在查询框里写 SQL,按 Ctrl/⌘ + Enter 运行;点击左侧列名可快速插入
  3. 3查看结果表格,导出为 CSV 或 JSON,历史记录可随时重新运行

常见问题

支持哪些 SQL 语法?
支持单条 SELECT 查询:DISTINCT、表达式与别名、WHERE(AND/OR/NOT、=、<>、<、>、LIKE、IN、BETWEEN、IS NULL、IS DISTINCT FROM)、GROUP BY(可写别名或列序号)、HAVING、ORDER BY(多列、ASC/DESC、NULLS FIRST/LAST)、LIMIT/OFFSET、INNER/LEFT/CROSS JOIN 与 USING、CASE、CAST 或 x::int、FROM/IN 子查询和标量子查询。暂不支持 RIGHT/FULL JOIN、UNION、WITH 和窗口函数,也不支持修改数据的 INSERT/UPDATE。
列类型是怎么判断的?
一列中所有非空值都是数字时为数字列,都是 true/false 时为布尔列,否则为文本列;空单元格为 NULL。带前导零的值(如邮编 00123、编号 007)会让整列保持文本,避免丢掉前导零。日期按文本保存,ISO 格式(2024-03-01)可以直接比较大小,也可以用 YEAR()、DATE_TRUNC() 等函数处理。JSON 中嵌套的对象会展开成“父键_子键”列,数组存为 JSON 文本。
NULL 和排序是怎么处理的?
遵循标准 SQL 的三值逻辑:NULL 与任何值比较结果都是 NULL,WHERE 只保留结果为真的行,所以 salary <> 4000 不会返回 salary 为空的行;NOT IN 的列表里有 NULL 时不返回任何行。COUNT(列) 不计 NULL,SUM/AVG 忽略 NULL,没有行时 SUM 返回 NULL、COUNT 返回 0。升序时 NULL 排在最前、降序时排在最后(与 SQLite、MySQL 一致),可以用 NULLS FIRST / NULLS LAST 改变。排序是稳定的,值相同的行保持原来的顺序。
能处理多大的文件?
所有数据都加载在浏览器内存里,几十万行、几十 MB 的 CSV 通常没有问题:10 万行做分组统计、关联或排序一般在 0.1 秒以内。等值 JOIN 使用哈希连接,没有等值条件的 JOIN 会逐行比较,结果超过 5000 万组合时会拒绝执行。更大的数据建议先用 WHERE 过滤或拆分文件。