Kodewick
开始学 →

SQL 在线运行

免费,不用装数据库,示例数据都备好了。写完就跑,还能一句一句看查询怎么算。

试试:
SQL 在线运行全屏 · 代码和输出都还在
SQL
学生选课
示例数据库
例子
top-scoresquery.sql
SELECT s.name, c.title, e.score
FROM enroll e
JOIN student s ON s.id = e.sid
JOIN course c ON c.id = e.cid
WHERE e.score >= 90
ORDER BY e.score DESC;
输出

按「运行」看结果

MySQL 8.0第 1 行,第 1 列缩进 4 空格学 SQL →改一改就会存进「我的代码」
不只是运行

看查询怎么算:FROM → JOIN → WHERE → GROUP BY → ORDER BY

SQL 写的顺序和算的顺序不一样。一步一步看:每一句之后表变成什么样,JOIN 怎么配对,WHERE 去掉了哪几行,GROUP BY 分成了哪几组。

▶ 就在这里播放,不用登录
调试和分享

能跑,能停,能回放,能发出去

像在本地用 VS Code 一样顺手,还多了本地没有的:把每一步画出来。

单步

一行一行地跑,每个变量的值都摆在旁边

按「单步」,代码停在每一行:亮的是马上要跑的那行,旁边是此刻每个变量的值。也能往回退,← → 键就能走。

一行一行地跑,每个变量的值都摆在旁边
出错回放

出错了?直接看它是怎么错的

报错下面有「看看怎么错的」:可视化停在出错的那一步,红色标出来,还用人话说清楚原因。前面每一步都能倒回去看。

出错了?直接看它是怎么错的
分享

链接、动图、代码图片,一键发到 X

一个链接打开就是这段代码;也能导出运行过程的动图(浅色 / 深色、横版 / 竖版)和代码图片,发到 X、小红书、群聊,或嵌进博客。

链接、动图、代码图片,一键发到 X
例子

12 个 SQL 例子,点一下就在上面运行

每个都能单步、能可视化,改一改再跑。

SELECT 和 WHERE

选几列,留下想要的行。

SELECT name, class
FROM student
WHERE gender = 'F';

ORDER BY 和 LIMIT

分数最高的三条。

SELECT sid, cid, score
FROM enroll
ORDER BY score DESC
LIMIT 3;

COUNT、AVG、MAX

一行把整张表概括出来。

SELECT COUNT(*) AS n, AVG(score) AS avg_score, MAX(score) AS best
FROM enroll;

GROUP BY 和 HAVING

每门课的平均分,只留平均分 80 以上的。

SELECT c.title, AVG(e.score) AS avg_score
FROM enroll e
JOIN course c ON c.id = e.cid
GROUP BY c.title
HAVING AVG(e.score) > 80
ORDER BY avg_score DESC;

INNER JOIN

谁考了 90 分以上,是哪门课。

SELECT s.name, c.title, e.score
FROM enroll e
JOIN student s ON s.id = e.sid
JOIN course c ON c.id = e.cid
WHERE e.score >= 90
ORDER BY e.score DESC;

LEFT JOIN 和 IS NULL

一门课都没选的学生。

SELECT s.name
FROM student s
LEFT JOIN enroll e ON e.sid = s.id
WHERE e.sid IS NULL;

子查询

比全部平均分高的成绩。

SELECT sid, cid, score
FROM enroll
WHERE score > (SELECT AVG(score) FROM enroll)
ORDER BY score DESC;

CASE WHEN

把分数换成等级。

SELECT sid, score,
  CASE
    WHEN score >= 90 THEN 'A'
    WHEN score >= 75 THEN 'B'
    WHEN score >= 60 THEN 'C'
    ELSE 'F'
  END AS grade
FROM enroll
ORDER BY score DESC;

窗口函数:RANK()

每门课里排名次,又不把行合并掉。

SELECT cid, sid, score,
  RANK() OVER (PARTITION BY cid ORDER BY score DESC) AS rnk
FROM enroll
ORDER BY cid, rnk;

每个顾客花了多少

三张表连起来,按顾客求和(商店数据库)。

SELECT c.name, SUM(p.price * i.qty) AS spent
FROM customer c
JOIN orders o ON o.customer_id = c.id
JOIN order_item i ON i.order_id = o.id
JOIN product p ON p.id = i.product_id
GROUP BY c.name
ORDER BY spent DESC;

自连接:谁是谁的上司

同一张表用两次(公司数据库)。

SELECT e.name AS employee, m.name AS boss
FROM emp e
LEFT JOIN emp m ON m.id = e.manager_id
ORDER BY e.id;

建表、插入、修改、删除

建一张自己的表,改完看结果。「重来」能把示例数据恢复原样。

CREATE TABLE todo (
  id INT PRIMARY KEY,
  task VARCHAR(30),
  done INT DEFAULT 0
);
INSERT INTO todo (id, task) VALUES (1, 'learn SELECT'), (2, 'learn JOIN'), (3, 'learn GROUP BY');
UPDATE todo SET done = 1 WHERE id = 1;
DELETE FROM todo WHERE id = 3;
SELECT * FROM todo;
三步

怎么在线运行 SQL

  1. 1
    写代码,或选一个例子编辑器和 VS Code 一样:自动补全、括号配对、Ctrl+/ 注释。
  2. 2
    点「运行」,或按 Ctrl + Enter结果在旁边的输出里。
  3. 3
    想看过程:点「单步」或「可视化」代码自动存在这个浏览器里,「我的代码」里能找回来。
支持什么

SQL,在你的浏览器里跑

✓ 支持

  • SELECT:JOIN(内、左、右连接)、GROUP BY、HAVING、ORDER BY、LIMIT
  • 子查询、CASE、窗口函数(RANK、ROW_NUMBER、SUM OVER……)
  • CREATE TABLE、INSERT、UPDATE、DELETE
  • 三个示例库:学校、商店、公司
  • 结果和报错与 MySQL 8.0 一样

✕ 暂不支持

  • 存储过程、触发器、用户和权限
  • 其他数据库特有的语法(PostgreSQL、SQL Server……)
  • 连接你自己的数据库
  • 数据长期保存(「重来」会恢复原样)
常见问题

关于 SQL 在线运行

要钱吗?要注册吗?

都不用。打开就能写 SQL,什么都不用装。

用的是什么数据库?

MySQL 8.0 的语法,由我们自己写的引擎在你浏览器里运行;支持的部分,结果和报错都和 MySQL 一样。

有哪些表可以查?

三个示例库,在数据库菜单里切换:学校(student、course、enroll)、商店(customer、product、orders、order_item)、公司(dept、emp)。

能建自己的表吗?

能:CREATE TABLE、INSERT、UPDATE、DELETE 都可以。点「重来」恢复示例数据。

「可视化」能看到什么?

查询按「真正算的顺序」走一遍:FROM、JOIN、WHERE、GROUP BY、HAVING、SELECT、ORDER BY、LIMIT,每一步之后的表都画出来。

适合练面试题吗?

适合:连接、分组、子查询、窗口函数正是常考的,答案不对时一步步看最快找到原因。

手机上能用吗?

能。点一下代码就全屏写,有括号、逗号、引号、* 这些专门的按键。

怎么把查询发给别人?

「分享」→ 复制链接:对方打开就是同一条查询、同一个数据库。也能导出运行过程的动图或代码图片。

还有

另外四种语言,同样能跑、能看