SQL笔试经典40题
2024-02-02 07:10:48
SQL 查询的宝典:40 个经典查询示例
简介
SQL(结构化查询语言)是用于管理和检索关系型数据库中数据的强大工具。本文汇集了 40 个经典的 SQL 查询示例,这些示例涵盖了从基本信息检索到复杂数据分析的广泛任务。通过这些示例,您将掌握编写有效的 SQL 查询所需的技能,从而释放数据的全部潜力。
1. 基本信息检索
示例: 查询所有学生的信息,包括姓名、年龄和性别。
SELECT name, age, gender
FROM student;
2. 条件过滤
示例: 查询所有成绩大于 90 分的学生的姓名和成绩。
SELECT name, score
FROM student
WHERE score > 90;
3. 聚合函数
示例: 查询所有学生的平均成绩。
SELECT AVG(score)
FROM student;
示例: 查询所有学生的最高成绩。
SELECT MAX(score)
FROM student;
4. 组和排序
示例: 查询所有学生的平均年龄,并按性别分组。
SELECT gender, AVG(age)
FROM student
GROUP BY gender;
示例: 查询所有学生的姓名、成绩和成绩等级,并按成绩降序排列。
SELECT name, score, CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score >= 60 THEN 'D'
ELSE 'F'
END AS grade
FROM student
ORDER BY score DESC;
5. 子查询
示例: 查询所有成绩高于平均成绩的学生的姓名。
SELECT name
FROM student
WHERE score > (SELECT AVG(score) FROM student);
示例: 查询与特定课程相关的所有学生的姓名和成绩。
SELECT name, score
FROM student
WHERE course_id IN (SELECT id FROM course WHERE name = 'Math');
6. 连接和关联
示例: 查询所有学生和他们的老师的信息。
SELECT student.name AS student_name, teacher.name AS teacher_name
FROM student
JOIN teacher ON student.teacher_id = teacher.id;
示例: 查询所有成绩高于平均成绩的学生的课程名称。
SELECT course.name AS course_name
FROM student
JOIN course ON student.course_id = course.id
WHERE student.score > (SELECT AVG(score) FROM student);
7. 特殊运算符
示例: 查询所有名称中包含“John”的学生的姓名。
SELECT name
FROM student
WHERE name LIKE '%John%';
示例: 查询所有成绩为奇数的学生的姓名。
SELECT name
FROM student
WHERE score % 2 = 1;
8. 窗口函数
示例: 查询每个课程中成绩最高的 10% 的学生。
SELECT name, score
FROM (
SELECT name, score, ROW_NUMBER() OVER (PARTITION BY course_id ORDER BY score DESC) AS row_num
FROM student
) AS ranked_students
WHERE row_num <= 0.1 * (SELECT COUNT(*) FROM student GROUP BY course_id);
示例: 查询每个班级的平均成绩。
SELECT course_id, AVG(score) OVER (PARTITION BY course_id) AS average_score
FROM student;
9. 日期和时间函数
示例: 查询所有出生日期在 1990 年 1 月 1 日之后的学生的姓名。
SELECT name
FROM student
WHERE birth_date > '1990-01-01';
示例: 查询所有在过去 30 天内注册的学生的姓名。
SELECT name
FROM student
WHERE registration_date >= DATE('now', '-30 days');
10. 数据修改
示例: 向“student”表中插入一条新记录。
INSERT INTO student (name, age, gender)
VALUES ('Jane Doe', 20, 'female');
示例: 更新“student”表中所有学生的姓名。
UPDATE student
SET name = 'New Name';
结论
这些 SQL 查询示例为您提供了强大的工具,可以从您的关系型数据库中提取有意义的信息。通过了解这些基本的和高级的查询技术,您可以释放数据的全部潜力,并为您的业务或个人项目做出明智的决策。
常见问题解答
1. 如何优化 SQL 查询?
- 使用索引以提高查询速度。
- 避免使用“*”来选择所有列。
- 尽可能使用连接而不是子查询。
2. 如何调试 SQL 查询?
- 检查语法错误并使用“EXPLAIN”命令分析查询计划。
- 使用调试工具(例如 SQL Server Profiler)来查看查询执行的详细信息。
3. 如何将 SQL 查询导出到 CSV 文件?
- 使用“INTO OUTFILE”命令将结果导出到 CSV 文件。
4. 如何在 SQL 查询中处理空值?
- 使用“IS NULL”或“COALESCE”函数来处理空值。
5. 如何防止 SQL 注入攻击?
- 使用参数化查询并对用户输入进行清理。