SELECT 和 WHERE
选几列,留下想要的行。
SELECT name, class
FROM student
WHERE gender = 'F';免费,不用装数据库,示例数据都备好了。写完就跑,还能一句一句看查询怎么算。
SQL 写的顺序和算的顺序不一样。一步一步看:每一句之后表变成什么样,JOIN 怎么配对,WHERE 去掉了哪几行,GROUP BY 分成了哪几组。
像在本地用 VS Code 一样顺手,还多了本地没有的:把每一步画出来。
按「单步」,代码停在每一行:亮的是马上要跑的那行,旁边是此刻每个变量的值。也能往回退,← → 键就能走。

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

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

每个都能单步、能可视化,改一改再跑。
选几列,留下想要的行。
SELECT name, class
FROM student
WHERE gender = 'F';分数最高的三条。
SELECT sid, cid, score
FROM enroll
ORDER BY score DESC
LIMIT 3;一行把整张表概括出来。
SELECT COUNT(*) AS n, AVG(score) AS avg_score, MAX(score) AS best
FROM enroll;每门课的平均分,只留平均分 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;谁考了 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;一门课都没选的学生。
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;把分数换成等级。
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;每门课里排名次,又不把行合并掉。
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,什么都不用装。
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,每一步之后的表都画出来。
适合:连接、分组、子查询、窗口函数正是常考的,答案不对时一步步看最快找到原因。
能。点一下代码就全屏写,有括号、逗号、引号、* 这些专门的按键。
「分享」→ 复制链接:对方打开就是同一条查询、同一个数据库。也能导出运行过程的动图或代码图片。