MySQL进阶查询
-
排序
desc: 升序
asc: 降序
select * from <表的名字> order by <字段1> desc/asc;
-
聚合查询
- 查询结果的总数
select count(*) from <表的名字>;
- 查询结果的最大值
select max(<字段>) from <表的名字> where <条件>;
- 查询结果的最小值
select min(<字段>) from <表的名字> where <条件>;
- 查询结果的和
select sum(<字段>) from <表的名字> where <条件>;
- 查询结果的平均值
select avg(<字段>) from <表的名字> where <条件>;
-
分组
- group by: 查询结果分组
select <字段1> from <表的名字> group by <字段>;
- group by + group_concat: 查询结果分组,并根据分组显示gourp_concat中字段的值,以逗号分割
select <字段1>,group_concat(<字段2>) from <表的名字> group by <字段>;
-
group by + 聚合查询:
- group by + count: 查询每个分组的数量
select <字段1>,count(*) from <表的名字> group by <字段>;
- group by + max: 查询每个分组中最大的值
select <字段1>,max(<字段2>) from <表的名字> group by <字段>;
- group by + min: 查询每个分组中最小的值
select <字段1>,min(<字段2>) from <表的名字> group by <字段>;
- group by + sum: 查询每个分组值的和
select <字段1>,sum(<字段2>) from <表的名字> group by <字段>;
- group by + avg: 查询每个分组值的和
select <字段1>,avg(<字段2>) from <表的名字> group by <字段>;
- group by + having: 对分组之后的结果集进行条件判断,having只能用于group by
select <字段1> from <表的名字> group by <字段> having count<条件>;
-
group by + with rollup: 在结果的最后增加一行,记录列的总和
select <字段1>,<字段2>.... from <表的名字> group by <字段> with rollup;
-
分页查询
-
start: 开始查询的位置,从0开始
-
count: 每页显示的数据数量
select * from <表的名字> limit start,count;
-
分页公式
m: 每页显示的个数
n: 页数
select * from students where is_delete=0 limit (n-1)*m,m;
-
-
连接查询
- 内连接查询: 查询表1,表2都能匹配到的数据
select * from <表1的名字> inner join <表2的名字> on <表1的名字>.<表1的字段> = <表2的名字>.<表2的字段>;
- 右连接查询: 查询只有表2才能匹配到的数据
select * from <表1的名字> right join <表2的名字> on <表1的名字>.<表1的字段> = <表2的名字>.<表2的字段>;
- 左连接查询: 查询只有表1才能匹配到的数据
select * from <表1的名字> left join <表2的名字> on <表1的名字>.<表1的字段> = <表2的名字>.<表2的字段>;
-
自关联 ==> (可以用来做地区的三级联动)
select <别名1>.* from <表1的名字> as <别名1> inner join <表1的名字> as <别名2> on <别名1>.<字段1>=<别名2>.<字段1> where <别名2>.<字段2>=<值>;
-
子查询
- 标量子查询: 子查询只返回一个结果
select * from <表的名字> where <字段1> <比较运算符> <(select avg(字段) from <表的名字>)>;
- 列级子查询: 返回的结果是一列 (一列多行)
select * from <表的名字> where <字段1> <范围查询> <(select 字段 from <表的名字>)>;
- 行级子查询: 返回的结果是一行(一行多列)
select * from <表的名字> where <(字段1,字段2)> = <(select max(字段1),max(字段2) from <表的名字>)>;