返回

SQL笔试经典40题

后端

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 注入攻击?

  • 使用参数化查询并对用户输入进行清理。