SQL 沙箱练习
一个随时可跑的示例表与 10 个由易到难的练习 SQL,第一周常驻使用。
0. 怎么用这个沙箱
先准备一个能跑 SQL 的环境,任选其一:
- 在线工具:SQLite Online、DB Fiddle 等(选 MySQL 模式);
- 本地:装好 MySQL 后执行
mysql -u root -p。
然后执行下面的建表与插入语句,得到一张 students 示例表:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
score INT
);
INSERT INTO students (id, name, age, score) VALUES
(1, 'Alice', 20, 92),
(2, 'Bob', 18, 78),
(3, 'Cathy', 22, 85),
(4, 'David', 19, 65),
(5, 'Eve', 21, 95);
1. 十个练习(由易到难)
先自己写,写不出来再看提示,最后跑一遍验证。
练习 1:查看整张表
SELECT * FROM students;
练习 2:只查姓名和分数
提示:SELECT name, score FROM ...
练习 3:查年龄大于 19 的学生
提示:WHERE age > 19
练习 4:按分数从高到低排序
提示:ORDER BY score DESC
练习 5:只显示前 3 条
提示:LIMIT 3
练习 6:统计一共有多少人
提示:COUNT(*)
练习 7:查分数最高的学生
提示:ORDER BY score DESC LIMIT 1,或 MAX(score)
练习 8:查平均分
提示:AVG(score)
练习 9:按年龄段统计人数
提示:GROUP BY age + COUNT(*)
练习 10:组合查询——查年龄大于 18 的学生姓名,按分数降序取前 3
提示:SELECT name FROM students WHERE age > 18 ORDER BY score DESC LIMIT 3
2. 参考答案
-- 练习 2
SELECT name, score FROM students;
-- 练习 3
SELECT * FROM students WHERE age > 19;
-- 练习 4
SELECT * FROM students ORDER BY score DESC;
-- 练习 5
SELECT * FROM students LIMIT 3;
-- 练习 6
SELECT COUNT(*) FROM students;
-- 练习 7
SELECT * FROM students ORDER BY score DESC LIMIT 1;
-- 练习 8
SELECT AVG(score) FROM students;
-- 练习 9
SELECT age, COUNT(*) FROM students GROUP BY age;
-- 练习 10
SELECT name FROM students WHERE age > 18 ORDER BY score DESC LIMIT 3;
3. 进阶挑战
- 给表加一列
gender并插入数据; - 再建一张
courses表,练习INNER JOIN; - 用
UPDATE把某个学生的分数加 5 分,注意带WHERE; - 用
DELETE删除一条记录,注意带WHERE。
一句话记住:先建表、再插入、然后随便查;每句 SQL 都亲手敲一遍。
扩展学习
- 查询语法:DQL 数据查询;
- 建表:数据类型与约束;
- 术语:术语表(零基础版);
- 第一课:数据库设计与 MySQL 概述。