溺欢

导航

mysql中的重难点

分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum 求和、avg平均值、max、min、count计算个数
特点
1、sum,avg用于处理数值型,max,min,count可以处于任何类型

2、以上分组函数都忽略null值

3、可以和distinct搭配实现去重

4、count函数的单独介绍

5、和分组函数一同查询的字段要求是group by后的字段
6、count计算非空的值

分组查询
语法:
select 聚合函数(max,min这些),列(要求出现在group by后面)
from 表
【where 筛选条件】
group by 分组的列表
【order by】子句
注意: 聚合与分组必须成对出现

特点:
1、分组查询中的筛选条件分为两类(筛选的数据源不同
数据源 位置 关键字
分组前筛选: 原始表 group by子句前面 where
分组后筛选: 分组后的结果集 group by子句后面 having

①分组函数做条件,肯定是放在having子句中
②能用分组前筛选的,优先考虑用分组前筛选

2、group by子句支持单个字段分组,多个字段分组,
(多个字段之间用逗号隔开无顺序要求),表达式或函数(用的较少)

3、可添加排序(放在group by后)
连接查询
含义:又称多表查询,当查询的字段来自多个表,就会用到连接查询

笛卡尔乘积现象:表1有m行,表2有n行,结果=m*n行

发生原因:没有有效的连接条件
如何避免:添加有效的连接条件

sql99标准【推荐】:支持内连接+外连接(左外,右外)+交叉连接

按功能分类:
内连接:等值连接,非等值连接,自连接
外连接:左外连接,右外连接,全外连接
交叉连接

语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名 on 【连接条件】
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】

分类:
内连接:inner
外连接:左外 left 【outer】、右外 right 【outer】、全外 full 【outer】
交叉连接:cross

内连接
语法:
select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件;
分类:等值、非等值、自连接
特点:
①添加排序、分组、筛选
②inner可以省略
③筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
④inner join连接和sql92语法中的等值连接效果一样,都是查询多表的交集
外连接
应用场景:用于查找一个表中有,另一个表中没有的记录
特点:
1、外连接的查询结果为主表中所有的记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表中没有的记录
2、左外连接:left jon左边的是主表
右外连接:right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接结果+表1有但表2没有+表2有但表1没有

posted on 2021-04-18 18:46  溺欢  阅读(247)  评论(0编辑  收藏  举报