当进行SQL查询时,条件查询、排序查询、聚合函数和分组查询是非常重要的操作,它们能够帮助您更加灵活和高效地获取所需的数据。
我们首先创建一个简单易懂的数据表来辅助学习SQL条件查询与数据过滤的基础知识。
数据表名:students
student_id | name | age | gender | score |
---|---|---|---|---|
1 | Alice | 22 | Female | 85 |
2 | Bob | 21 | Male | 78 |
3 | Charlie | 23 | Male | 92 |
4 | David | 20 | Male | 80 |
5 | Emma | 22 | Female | 88 |
一.条件查询:
WHERE子句用于在SELECT语句中添加条件,从而筛选满足条件的数据行。
可以使用比较运算符(如=、<、>、<=、>=、<>)和逻辑运算符(如AND、OR、NOT)来创建条件。
查询年龄大于等于22岁的学生:
-- 查询年龄大于等于22岁的学生
SELECT * FROM students WHERE age >= 22;
student_id | name | age | gender | score |
---|---|---|---|---|
1 | Alice | 22 | Female | 85 |
3 | Charlie | 23 | Male | 92 |
5 | Emma | 22 | Female | 88 |
查询分数高于85分且为女性的学生:
-- 查询分数高于85分且为女性的学生
SELECT * FROM students WHERE score > 85 AND gender = 'Female';
student_id | name | age | gender | score |
---|---|---|---|---|
1 | Alice | 22 | Female | 85 |
5 | Emma | 22 | Female | 88 |
查询分数在80到90分之间的学生:
-- 查询分数在80到90分之间的学生
SELECT * FROM students WHERE score BETWEEN 80 AND 90;
student_id | name | age | gender | score |
---|---|---|---|---|
1 | Alice | 22 | Female | 85 |
4 | David | 20 | Male | 80 |
5 | Emma | 22 | Female | 88 |
二.排序查询:
ORDER BY子句用于对查询结果进行排序,默认按照指定列的升序排序。
可以指定多个列,并用逗号分隔,也可以使用DESC关键字实现降序排序。
按分数降序排序学生:
-- 按分数降序排序学生
SELECT * FROM students ORDER BY score DESC;
student_id | name | age | gender | score |
---|---|---|---|---|
3 | Charlie | 23 | Male | 92 |
5 | Emma | 22 | Female | 88 |
1 | Alice | 22 | Female | 85 |
4 | David | 20 | Male | 80 |
2 | Bob | 21 | Male | 78 |
按年龄升序排序学生:
-- 按年龄升序排序学生
SELECT * FROM students ORDER BY age;
student_id | name | age | gender | score |
---|---|---|---|---|
4 | David | 20 | Male | 80 |
2 | Bob | 21 | Male | 78 |
1 | Alice | 22 | Female | 85 |
5 | Emma | 22 | Female | 88 |
3 | Charlie | 23 | Male | 92 |
三.聚合函数:
聚合函数用于对数据进行汇总和统计,如SUM、AVG、COUNT等。
SUM函数用于计算某列数据的总和,AVG函数用于计算平均值,COUNT函数用于计算行数或非NULL值的数量。
聚合函数 | 描述 |
---|---|
SUM() | 计算某列的总和 |
AVG() | 计算某列的平均值 |
COUNT() | 计算某列的行数或非空值的个数 |
MAX() | 找出某列的最大值 |
MIN() | 找出某列的最小值 |
GROUP_CONCAT() | 将某列的值连接成字符串 |
计算所有学生的总数:
-- 计算所有学生的总数
SELECT COUNT(*) as total_students FROM students;
total_students |
---|
5 |
计算学生的平均分数:
-- 计算学生的平均分数
SELECT AVG(score) as average_score FROM students;
average_score |
---|
84 |
计算所有学生的总分数:
-- 计算所有学生的总分数
SELECT SUM(score) as total_score FROM students;
total_score |
---|
423 |
四.分组查询:
GROUP BY子句用于将数据按照指定列进行分组,然后对每个组应用聚合函数。
在使用GROUP BY子句时,通常需要结合聚合函数来得到每个组的汇总结果。
按性别分组,并计算每个性别学生的平均分数:
-- 按性别分组,并计算每个性别学生的平均分数
SELECT gender, AVG(score) as average_score FROM students GROUP BY gender;
gender | average_score |
---|---|
Female | 87.67 |
Male | 83.33 |
按年龄分组,并计算每个年龄学生的总数:
-- 按年龄分组,并计算每个年龄学生的总数
SELECT age, COUNT(*) as total_students FROM students GROUP BY age;
age | total_students |
---|---|
20 | 1 |
21 | 1 |
22 | 3 |
23 | 1 |
五.基础知识补充
-
WHERE子句:
- WHERE子句用于在SELECT语句中指定条件,以过滤查询结果。
- 可以使用比较运算符(如=、<、>、<=、>=、<>)和逻辑运算符(如AND、OR、NOT)来创建条件。
- 示例:SELECT * FROM employees WHERE salary > 50000;
-
比较运算符:
- 比较运算符用于比较两个值,并返回布尔值(TRUE或FALSE)。
- 常见的比较运算符包括:=(等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、<>(不等于)。
- 示例:SELECT * FROM products WHERE price > 100;
-
逻辑运算符:
- 逻辑运算符用于组合多个条件,并返回逻辑表达式的结果。
- 常见的逻辑运算符包括:AND(与)、OR(或)、NOT(非)。
- 示例:SELECT * FROM orders WHERE status = 'Shipped' AND total_amount > 1000;
-
通配符:
- 通配符是用于模糊匹配的特殊字符。在条件查询中,可以使用通配符来匹配符合特定模式的数据。
- 常见的通配符包括:%(代表任意字符序列)、_(代表任意单个字符)。
- 示例:SELECT * FROM customers WHERE name LIKE 'J%';
-
IN运算符:
- IN运算符用于指定一个值列表,并检查某个列是否与列表中的任何值匹配。
- 示例:SELECT * FROM products WHERE category IN ('Electronics', 'Appliances');
-
BETWEEN运算符:
- BETWEEN运算符用于检查某个列的值是否在指定的范围内。
- 示例:SELECT * FROM employees WHERE hire_date BETWEEN '2020-01-01' AND '2021-12-31';
-
NULL值:
- 在SQL中,NULL表示缺少值或未知值。
- 可以使用IS NULL或IS NOT NULL来检查列中的NULL值。
- 示例:SELECT * FROM orders WHERE shipping_address IS NULL;
-
聚合函数与HAVING子句:
- 聚合函数(如SUM、AVG、COUNT等)用于对数据进行汇总和统计。
- HAVING子句用于筛选聚合函数的结果。
- 示例:SELECT category, COUNT() as total_products FROM products GROUP BY category HAVING COUNT() > 10;