练习题库
通过实战练习巩固SQL知识,提升数据库操作能力
查询所有学生
从students表中查询所有学生的姓名、年龄和年级信息。
-- 提示:使用SELECT语句
SELECT name, age, grade FROM students;
条件查询
查询年龄大于20岁的所有学生信息。
-- 提示:使用WHERE子句
SELECT * FROM students WHERE age > 20;
排序查询
查询所有学生,按年龄从大到小排序。
-- 提示:使用ORDER BY
SELECT * FROM students ORDER BY age DESC;
模糊查询
查询姓名中包含"明"字的学生。
-- 提示:使用LIKE
SELECT * FROM students WHERE name LIKE '%明%';
统计学生人数
统计每个年级的学生人数,并按人数降序排列。
-- 提示:使用GROUP BY和COUNT
SELECT grade, COUNT(*) as count
FROM students
GROUP BY grade
ORDER BY count DESC;
计算平均分
计算每个科目的平均分,只显示平均分大于75的科目。
-- 提示:使用GROUP BY和HAVING
SELECT subject, AVG(score) as avg_score
FROM exam_results
GROUP BY subject
HAVING AVG(score) > 75;
多条件查询
查询年龄在18到22岁之间,且年级为大二或大三的学生。
-- 提示:使用AND、OR和BETWEEN
SELECT * FROM students
WHERE age BETWEEN 18 AND 22
AND grade IN ('大二', '大三');
字符串处理
将学生的姓和名连接成全名,并转换为大写。
-- 提示:使用CONCAT和UPPER
SELECT UPPER(CONCAT(first_name, ' ', last_name)) as full_name
FROM students;
复杂统计
查询每个年级的学生人数、平均年龄、最高分和最低分。
-- 提示:使用多个聚合函数
SELECT grade,
COUNT(*) as student_count,
AVG(age) as avg_age,
MAX(score) as max_score,
MIN(score) as min_score
FROM students
GROUP BY grade;
条件分类
根据分数将学生分为优秀(>=90)、良好(80-89)、及格(60-79)、不及格(<60)四个等级。
-- 提示:使用CASE WHEN
SELECT name, score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END as grade
FROM exam_results;
排名查询
查询每个年级成绩前3名的学生。
-- 提示:使用子查询或窗口函数
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY grade ORDER BY score DESC) as rank
FROM students
) t WHERE rank <= 3;
数据去重
查询选修了至少3门课程的学生姓名和选修课程数。
-- 提示:使用GROUP BY和HAVING
SELECT student_name, COUNT(DISTINCT course_id) as course_count
FROM enrollments
GROUP BY student_name
HAVING COUNT(DISTINCT course_id) >= 3;