sql语句练习

admin 15 0

### 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