【数据库初阶】表的查询语句和聚合函数
🎉博主首页:
有趣的中国人
🎉专栏首页:
数据库初阶
🎉其它专栏:
C++初阶 |
C++进阶 |
初阶数据结构
亲爱的小伙伴们,大家好!在这篇文章中,我们将深入浅出地为大家讲解 表的查询语句和聚合函数 帮助您轻松入门,快速掌握核心概念。
如果文章对您有所启发或帮助,请别忘了 点赞 👍、收藏 🌟、留言 📝 支持!您的每一份鼓励,都是我持续创作的源动力。让我们携手前行,共同进步!
文章目录
- @[toc]
- 1. SELECT 基本用法
- 🐱🏍1.1 基础语法🐱🏍
- 🐱🏍1.2 基础查询🐱🏍
- ✨查询所有列✨
- ✨查询特定列✨
- 🐱🏍1.3 条件过滤(WHERE)🐱🏍
- ✨比较运算符✨
- ✨逻辑运算符(AND/OR/NOT)✨
- 🐱🏍1.4 结果排序(ORDER BY) 🐱🏍
- 🐱🏍1.5 限制结果数量(LIMIT) 🐱🏍
- 🐱🏍1.6 去重(DISTINCT)🐱🏍
- 🐱🏍1.7 别名(AS)🐱🏍
- 🐱🏍1.8 模糊查询(LIKE)🐱🏍
- 🐱🏍1.9 范围查询🐱🏍
- ✨BETWEEN✨
- ✨IN✨
- 2. 聚合函数
- 🐱🏍2.1 什么是聚合函数🐱🏍
- 🐱🏍2.2 常用聚合函数列表🐱🏍
- 🐱🏍2.3 详细用法及示例🐱🏍
- ✨`COUNT()`:统计行数✨
- ✨`SUM()`:计算总和✨
- ✨`AVG()`:计算平均值✨
- ✨`MAX() / MIN()`:极值查询✨
- ✨`GROUP_CONCAT()`:合并字符串✨
- 🐱🏍2.4 分组统计(GROUP BY)🐱🏍
- 🐱🏍2.5 过滤分组结果(HAVING)🐱🏍
- 🐱🏍2.6 关键注意事项🐱🏍
- ✨COUNT(*) vs COUNT(列名)✨
- ✨分组字段限制✨
- ✨执行顺序✨
文章目录
- @[toc]
- 1. SELECT 基本用法
- 🐱🏍1.1 基础语法🐱🏍
- 🐱🏍1.2 基础查询🐱🏍
- ✨查询所有列✨
- ✨查询特定列✨
- 🐱🏍1.3 条件过滤(WHERE)🐱🏍
- ✨比较运算符✨
- ✨逻辑运算符(AND/OR/NOT)✨
- 🐱🏍1.4 结果排序(ORDER BY) 🐱🏍
- 🐱🏍1.5 限制结果数量(LIMIT) 🐱🏍
- 🐱🏍1.6 去重(DISTINCT)🐱🏍
- 🐱🏍1.7 别名(AS)🐱🏍
- 🐱🏍1.8 模糊查询(LIKE)🐱🏍
- 🐱🏍1.9 范围查询🐱🏍
- ✨BETWEEN✨
- ✨IN✨
- 2. 聚合函数
- 🐱🏍2.1 什么是聚合函数🐱🏍
- 🐱🏍2.2 常用聚合函数列表🐱🏍
- 🐱🏍2.3 详细用法及示例🐱🏍
- ✨`COUNT()`:统计行数✨
- ✨`SUM()`:计算总和✨
- ✨`AVG()`:计算平均值✨
- ✨`MAX() / MIN()`:极值查询✨
- ✨`GROUP_CONCAT()`:合并字符串✨
- 🐱🏍2.4 分组统计(GROUP BY)🐱🏍
- 🐱🏍2.5 过滤分组结果(HAVING)🐱🏍
- 🐱🏍2.6 关键注意事项🐱🏍
- ✨COUNT(*) vs COUNT(列名)✨
- ✨分组字段限制✨
- ✨执行顺序✨
上一篇文章中,博主介绍了 :
表的增删改语句可以将上一篇文章看完之后再来看这篇文章,链接如下:
【数据库初阶】表的增删改语句那么接下来正文开始:
1. SELECT 基本用法
🐱🏍1.1 基础语法🐱🏍
SELECT 列名1, 列名2, ...
FROM 表名
[WHERE 条件]
[ORDER BY 排序列 [ASC|DESC]]
[LIMIT 行数];
🐱🏍1.2 基础查询🐱🏍
✨查询所有列✨
SELECT * FROM employees; -- 返回表中所有行和列
✨查询特定列✨
SELECT id, name, department FROM employees; -- 仅返回指定列
🐱🏍1.3 条件过滤(WHERE)🐱🏍
✨比较运算符✨
-- 查询薪资大于 8000 的 IT 部门员工
SELECT * FROM employees
WHERE department = 'IT' AND salary > 8000;
✨逻辑运算符(AND/OR/NOT)✨
-- 查询 IT 或 HR 部门,且年龄小于 50 的员工
SELECT * FROM employees
WHERE (department = 'IT' OR department = 'HR') AND age < 50;
🐱🏍1.4 结果排序(ORDER BY) 🐱🏍
-- 按薪资降序排序,薪资相同则按入职日期升序排序
SELECT name, salary, hire_date
FROM employees
ORDER BY salary DESC, hire_date ASC;
🐱🏍1.5 限制结果数量(LIMIT) 🐱🏍
-- 返回前 5 条记录
SELECT * FROM employees LIMIT 5;
-- 分页查询:跳过前 10 条,返回接下来的 5 条
SELECT * FROM employees LIMIT 10, 5;
SELECT * FROM employees LIMIT 5 OFFSET 10;
🐱🏍1.6 去重(DISTINCT)🐱🏍
-- 返回不重复的部门名称
SELECT DISTINCT department FROM employees;
🐱🏍1.7 别名(AS)🐱🏍
SELECT
id AS '员工ID',
name AS '姓名',
salary * 12 AS '年薪'
FROM employees;
🐱🏍1.8 模糊查询(LIKE)🐱🏍
-- 查询名字以 "张" 开头的员工
SELECT * FROM employees
WHERE name LIKE '张%';
-- 查询名字包含 "小" 的员工
SELECT * FROM employees
WHERE name LIKE '%小%';
🐱🏍1.9 范围查询🐱🏍
✨BETWEEN✨
-- 查询年龄在 30 到 40 岁之间的员工
SELECT * FROM employees
WHERE age BETWEEN 30 AND 40;
✨IN✨
-- 查询 IT 或 HR 部门的员工
SELECT * FROM employees
WHERE department IN ('IT', 'HR');
2. 聚合函数
🐱🏍2.1 什么是聚合函数🐱🏍
- 聚合函数用于对一组值执行计算,并返回单个汇总值。它们通常与
GROUP BY
子句结合使用,实现分组统计,但也可以直接用于整张表的汇总。
🐱🏍2.2 常用聚合函数列表🐱🏍
函数 | 描述 | 是否忽略 NULL 值 |
---|---|---|
COUNT() | 统计行数或非 NULL 值的数量 | 是 |
SUM() | 计算数值列的总和 | 是 |
AVG() | 计算数值列的平均值 | 是 |
MAX() | 返回列中的最大值 | 是 |
MIN() | 返回列中的最小值 | 是 |
GROUP_CONCAT() | 将多行的值连接成单个字符串 | 是 |
🐱🏍2.3 详细用法及示例🐱🏍
✨COUNT()
:统计行数✨
-- 统计表中总行数(包括 NULL 行)
SELECT COUNT(*) AS total_rows FROM employees;
-- 统计某列非 NULL 值的数量
SELECT COUNT(salary) AS non_null_salaries FROM employees;
-- 统计去重后的数量
SELECT COUNT(DISTINCT department) AS unique_departments FROM employees;
✨SUM()
:计算总和✨
-- 计算 IT 部门的总薪资
SELECT SUM(salary) AS total_salary
FROM employees
WHERE department = 'IT';
✨AVG()
:计算平均值✨
-- 计算平均年龄(忽略 NULL 值)
SELECT AVG(age) AS average_age FROM employees;
-- 保留两位小数
SELECT ROUND(AVG(salary), 2) AS avg_salary FROM employees;
✨MAX() / MIN()
:极值查询✨
-- 查询最高和最低薪资
SELECT
MAX(salary) AS max_salary,
MIN(salary) AS min_salary
FROM employees;
✨GROUP_CONCAT()
:合并字符串✨
-- 将同一部门的员工姓名合并为逗号分隔的字符串
SELECT
department,
GROUP_CONCAT(name ORDER BY hire_date ASC SEPARATOR ', ') AS employees_list
FROM employees
GROUP BY department;
🐱🏍2.4 分组统计(GROUP BY)🐱🏍
- 聚合函数常与
GROUP BY
结合,按指定列分组汇总:
-- 按部门统计人数、平均薪资、最高薪资
SELECT
department,
COUNT(*) AS headcount,
AVG(salary) AS avg_salary,
MAX(salary) AS max_salary
FROM employees
GROUP BY department;
🐱🏍2.5 过滤分组结果(HAVING)🐱🏍
HAVING
用于对聚合后的结果进行过滤(类似WHERE
,但作用于分组后):
-- 筛选平均薪资超过 10000 的部门
SELECT
department,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING avg_salary > 10000; -- 必须使用聚合结果或分组列
🐱🏍2.6 关键注意事项🐱🏍
✨COUNT(*) vs COUNT(列名)✨
COUNT(*)
:统计所有行数(包括NULL
行)COUNT(列名)
:统计该列非NULL
值的数量。
✨分组字段限制✨
SELECT
中的 非聚合列必须出现在GROUP BY
中。
错误示例:
-- department 未在 GROUP BY 中,但出现在 SELECT
SELECT name, AVG(salary) FROM employees; -- 报错!
✨执行顺序✨
SQL
子句的实际执行顺序为:
- 1.FROM → 2. WHERE → 3. GROUP BY → 4. HAVING → 5. SELECT → 6. ORDER BY → 7. LIMIT