MySQL 高级使用

本文深入解析SQL查询语言的关键功能,包括使用DISTINCT去重、分组函数如COUNT、MAX、MIN、AVG和SUM,以及GROUP BY和HAVING进行数据分组与过滤。同时,介绍了ORDER BY和LIMIT实现结果排序与分页,涵盖子查询和表连接技术,如INNER JOIN、LEFT JOIN和RIGHT JOIN,帮助读者掌握高效的数据检索与分析方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DISTINCT 用于对查询的记录去重

分组函数:
COUNT(*) 用于获取查询的记录总数

COUNT(DISTINCT xxx) 用于获取查询的记录中不重复内容的总数

MAX(xxx) 用于获取查询记录中的最大值
MIN(xxx) 用于获取查询记录中的最小值
AVG(xxx) 用于获取查询记录中的平均值

SUM(xxx) 对于查询记录中的数据求和

GROUP BY xxx 把数据按照指定列进行分组
分组后只能:
1. 查询分组条件字段
2. 使用分组函数对每一组内的数据进行计算
对 GROUP BY 的结果进行过滤,使用 HAVING

ORDER BY xxx 把查询结果按照指定列进行排序
多个排序条件使用 , 分隔
ASC:默认,升序
DESC:降序

按照学号降序排列,学号相同按照成绩升序排列
	SELECT * FROM score ORDER BY stu_id DESC, grade;

LIMIT x,y 获取查询结果中的一部分记录
从 x 开始取 y 条,如果不足 y 条,就取所有剩余记录
LIMIT 0, 4 从 0 开始取 4 条
LIMIT 4, 4 从 4 开始取 4 条

SELECT 字段列表
FROM 表名
WHERE 过滤条件
GROUP BY 分组条件
HAVING 过滤分组计算结果
ORDER BY 排序条件
LIMIT x,y 分页

前两个必须写,后五个可选,顺序不能错乱

对于数字类的查询结果,可以进行四则运算
但是一旦 NULL 参与了运算,得到的结果比为 NULL

IFNULL(subsidy, 0) 如果 subsidy 值为 NULL,使用 0 代替

WHERE subsidy IS NULL 为 NULL 的判断

WHERE subsidy IS NOT NULL 不为 NULL 的判断

SELECT MAX() MIN() … post FROM xxx GROUP BY post

SELECT MAX(salary) FROM xxx

id      post         salary
| 1003 | Coder      |   6000 |
| 1005 | Coder      |   7000 |
| 1000 | Coder      |  12000 |
| 1001 | Coder      |   3480 |
| 1004 | Programmer |   9400 |
| 1006 | DBA        |  10030 |
| 1007 | DBA        |   5000 |

**子查询:**使用另外一个 SQL 作为查询的 字段,表,条件等等
用于合并需要多步完成的查询操作

**连接:**用于从多张表中查询数据

表连接必须为表起一个别名,方便使用

两张表的笛卡儿积:(会导致拼接结果暴增,效率低,不常用)
SELECT a.name, b.name
FROM employee as a, dept as b
WHERE a.dept_id = b.id;

	1000		1000
	1001        1001

						1000   1000
						1000   1001
						1001   1000
						1001   1001

内连接(INNER JOIN):(只拼接关联的部分)
SELECT a., b.
FROM employee as a INNER JOIN dept as b
ON a.dept_id = b.id;

	1000   1000
	1001   1001
	1002   1003
	
	                  1000  1000
					  1001  1001

左外连接(LEFT JOIN):
SELECT a., b.
FROM employee as a LEFT JOIN dept as b
ON a.dept_id = b.id;

	1000   1000
	1001   1001
	1002   1003
	
	                  1000  1000
					  1001  1001
					  1002  NULL

右外连接(RIGHT JOIN):
SELECT a., b.
FROM employee as a RIGHT JOIN dept as b
ON a.dept_id = b.id;

	1000   1000
	1001   1001
	1002   1003
	
	                  1000  1000
					  1001  1001
					  NULL  1003
					  
					  
					1000  1000
					1001  1001       左
					1002  NULL
	1000   1000
	1001   1001     1000  1000       内
	1002   1003     1001  1001
	
	                1000  1000
					1001  1001       右
					NULL  1003						  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值