分组查询
mysql数据库学习笔记,来源:bilibili,尚硅谷mysql入门到精通。
select 查询的字段,按什么分组
from 表
# where 筛选条件(分组前筛选)
group by 分组的字段
# having 筛选条件(分组后筛选)
特点:
1、可以按单个字段分组
2、和分组函数一同查询的字段最好是分组后的字段
3、分组筛选
分组前筛选: 原始表 group by的前面 where
分组后筛选: 分组后的结果集 group by的后面 having
①分组函数做分组肯定放在having后面。
②能用分组前的筛选就用分组前的。
4、可以按多个字段分组,字段之间用逗号隔开
5、可以支持排序,排序order by放在最后
6、having后可以支持别名
连接查询
笛卡尔乘积:如果连接条件省略或无效则会出现
解决办法:添加上连接条件
分类
1、按年代分
sql92标准:只支持内连接
sql99标准:支持内连接+外连接(左外和右外)+交叉连接
2、 按功能分
①内连接:等值连接、非等值连接、自连接
②外连接:左外连接、右外连接、全外连接
③交叉连接。
sql92标准
等值连接
select 查询字段2,查询字段2
from 表1,表2
where 等值
1.等值连接的结果 = 多个表的交集
2.n表连接,至少需要n-1个连接条件
2、为表取别名:
①提高语句的简洁度
②区分多个重名的字段
3、两个表的顺序可以转换
4、可以加筛选:
select 查询字段2,查询字段2
from 表1,表2
where 等值连接
and 筛选条件
5、可以加分组
6、可以添加排序
非等值连接
不等值也可以创造一个判断条件,用法跟上面一样
自连接
将一张表当做两张表来用,上面一样
sql99标准
语法:
select 查询列表
from 表1 别名
【连接类型 inner|left outer|right outer|full outer|cross】
join 表2
on 连接条件
【连接类型 inner|left outer|right outer|full outer|cross】
join 表3
on 连接条件
【where 筛选条件】
【group by 分组字段】
【having 分组后的筛选条件】
【order by 排序的字段或表达式】
外连接:
左右外连接:
1、一般用于一个表有一个表没有的情况
2、特点:外连接的结果相当于显示主表中的所有记录,如果有匹配,显示匹配值,反之显示null;
3、left outer join的左边,right outer join的右边是主表
4、外连接的效果=内连接效果+表1 中有但是表2中没有的
5、左外和右外交换两个表的顺序可以实现同样的效果
全外连接:
6、全外连接的效果=内连接效果+表1 中有但是表2中没有的+表12中有但是表1中没有的
交叉连接:
相当于做笛卡尔
子查询
含义:
出现在其他语句中的select语句
外部的查询语句,成为主查询或者外查询
分类:
1、按子查询出现的位置:
select后面:只支持标量子查询
from后面:支持表子查询
where或having后面:支持标量子查询、列子查询、表子查询
exisits后面(相关子查询):支持标量子查询
2、按结果集的不同行数的不同:
标量子查询(结果集只有一行一列)、单行子查询
列子查询(结果集只有一列多行)
行子查询(结果集有多行多列)
表子查询(一般为多行多列)
特点:
1、子查询都放在小括号内
2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
3、子查询优先于主查询执行,主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
① 单行子查询
结果集只有一行
一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
a、子查询的结果为一组值
b、子查询的结果为空
② 多行子查询
结果集有多行
一般搭配多行操作符使用:any、all、in、not in
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替
分页查询
应用场景:
实际的web项目中需要根据用户的需求提交对应的分页查询的sql语句
语法:
select 字段|表达式,...
from 表
【where 条件】
【group by 分组字段】
【having 条件】
【order by 排序的字段】
limit 【起始的条目索引】条目数;
limit offset,size
特点:
1.起始条目索引从0开始
2.limit子句放在查询语句的最后
3.公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage
假如:
每页显示条目数sizePerPage
要显示的页数 page