### SQL语句练习:从基础到进阶
在数据库管理系统中,SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准编程语言,无论是初学者还是经验丰富的数据库管理员,都需要通过不断的练习来加深对SQL语句的理解和应用,本文将通过一系列SQL语句的练习,帮助读者从基础到进阶,逐步掌握SQL的核心概念和操作技巧。
#### 一、基础查询
1. **选择所有列**
查询`students`表中的所有数据。
SELECT * FROM students;
2. **选择特定列**
查询`students`表中的`id`、`name`和`age`列。
SELECT id, name, age FROM students;
3. **条件查询**
查询年龄大于20岁的学生。
SELECT * FROM students WHERE age > 20;
4. **排序查询**
查询所有学生,并按年龄从大到小排序。
SELECT * FROM students ORDER BY age DESC;
5. **限制查询结果**
查询年龄最小的前5名学生。
SELECT * FROM students ORDER BY age ASC LIMIT 5;
#### 二、进阶查询
1. **聚合函数**
计算`students`表中学生的总数。
SELECT COUNT(*) FROM students;
查询平均年龄。
SELECT AVG(age) FROM students;
2. **分组查询**
假设有一个`courses`表,其中包含学生的选课信息,查询每个学生所选课程的数量。
SELECT student_id, COUNT(*) as course_count FROM courses GROUP BY student_id;
在上面的基础上,进一步查询选课数量超过3门的学生。
SELECT student_id, COUNT(*) as course_count FROM courses GROUP BY student_id HAVING COUNT(*) > 3;
3. **连接查询**
假设有两个表:`students`(学生表)和`scores`(成绩表),通过学生ID将两个表连接起来,查询每个学生的姓名和成绩。
SELECT students.name, scores.score FROM students JOIN scores ON students.id = scores.student_id;
在上面的基础上,进一步查询成绩大于80分的学生姓名和成绩。
SELECT students.name, scores.score FROM students JOIN scores ON students.id = scores.student_id WHERE scores.score > 80;
4. **子查询**
查询年龄大于平均年龄的学生。
SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students);
查询选课数量最多的学生ID和选课数量。
SELECT student_id, COUNT(*) as course_count FROM courses GROUP BY student_id ORDER BY course_count DESC LIMIT 1;
或者使用子查询的方式:
SELECT student_id, course_count FROM ( SELECT student_id, COUNT(*) as course_count FROM courses GROUP BY student_id ) AS subquery ORDER BY course_count DESC LIMIT 1;
5. **插入、更新和删除数据**
向`students`表中插入一条新数据。
INSERT INTO students (id, name, age) VALUES (1001, '张三', 22);
更新`students`表中ID为1001的学生的年龄为23岁。
UPDATE students SET age = 23 WHERE id = 1001;
删除`students`表中ID为1001的学生数据。
DELETE FROM students WHERE id = 1001;
#### 三、高级查询技巧
1. **使用通配符进行模糊查询**
查询姓名以“张”开头的学生。
SELECT * FROM students WHERE name LIKE '张%';
查询姓名中包含“三”的学生。
SELECT * FROM students WHERE name LIKE '%三%';
2. **使用IN操作符进行多值匹配**
查询ID为1、3、5的学生的信息。
SELECT * FROM students WHERE id IN (1, 3, 5);
3. **使用CASE语句进行条件判断**
根据年龄将学生分为“小学生”、“中学生”和“大学生”三个类别。
```sql
SELECT name