mysql从入门到精通《三》

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);




猜你喜欢

转载自blog.csdn.net/weixin_40612082/article/details/80307280