mysql从入门到精通《三》
二、命令行脚本(以乌班图为操作系统)接上篇
12、分组
(group by)
group by 的含义:指将查询结果按照一个或者多个字段进行分组,字段值相同的为一组,它可以用作单个字段分组,也可以用于多个字段查询
(1),根据性别分组
select gender from students group by gender;
(group by +group_concat())
group_concat(字段名)可以作为一个输出字段来使用
表示分组以后,根据分组结果使用group_concat()来放置每一组的某字段的值的集合
select gender,group_concat(name) from students group by gender;
select gender,group_concat(id) from students group by gender;
(group by +聚合函数)
分别统计不同性别的人的年龄平均值
select gender,avg(age) from students group by gender;
分别统计不同性别的人的个数
select gender count(*) from students group by gender;(group by +having)
having条件表达式:用来分组查询后指定一些条件来输出查询结果
having的作用和where一样,但是只能作用与group by
查询不同性别人的数量,输出数量大于2的性别
select gender,count(*) from students group by gender having count(*) >2;
(group by +with rollup)
with rollup 的作用是在最后新增一行,来记录当前列里所有记录的总和
select gender ,count(*) from students group by gender with rollup;
13、分页
当数据量过大时,在一页中查看数据是意见非常麻烦的事
select * from 表名 limit start,count;
查询前三行男生信息
select *from students where gender =1 limit 0,3;
查询第N页的数据:
select * from students where id>3 limit(n-1)*m, m;
14、连接查询
当查询的结果的列来源与多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
mysql 支持三种类型的连接查询,分别如下:
(1)、内连接查询:查询的结果为两个表匹配到的数据,即两个表的公共数据
使用内连接查询班级表与学生表
select * from students inner join classes on students.cls_id=classes.id;
查询学生姓名及班级名称
select s.name,c.name from students as s inner join classes as c on s.cls_id=c.id;
(2)、左连接查询:查询的结果为两个表匹配到的数据,对于右表中不存在的数据使用null填充
使用左连接 查询班级表与学生表
select *from students as s left join classes as c on s.cls_id =c.id;
(3)、右连接查询:查询的结果为两个表匹配到的数据,对于左表中不存在的数据使用null填充
使用右连接查询班级表与学生表
select * from students as s right join classses as c on s.cls_id=c.id;
15、子查询
在一个select 语句中,嵌入了另外一个select语句,那么被嵌入的select 语句称为子查询语句
子查询和主查询的关系:
子查询是嵌入到主查询中的
子查询是辅助主查询的,要么充当条件,要么充当数据源
子查询是可以独立存在的,是一条完整的select语句
子查询的分类:
标量子查询:子查询返回的结果是一个数据(一行一列)
如:查询ban
select * from students where age>(select avg(age) from students);
列子查询:子查询返回的是一列(一列多行)
如:查询班级内还有学生的班级的名称
select name from classes where id in (select cls_id from students);
行子查询:子查询返回的是一行(一行多列)
如:查询班级年龄最大,身高最高的学生信息
select *from students where (height,age) =(select max(height),max(age) from students);