MySQL--查询

group By

将数据根据指定字段进行分组,之后进行统计

用法:group by 字段名,这个不会显示所有,只保留每组第一条记录

利用统计函数来(聚合函数)做:

count()统计每组中数量,如果目标为null不统计,如果为*表示统计记录

avg(),max(),min()

eg:求每班人数,最大南陵,最矮身高,平均年龄

select  class_id,count(*),max(stu_age),min(stu_height),acg(stu_age)from my_student group by class_id;


group by多分组

group by 字段1,字段2 ……,将数据按照字段一分组之后,再根据字段2来分组

分组默认是有排序的,是升序【可以用desc来改为降序】

回溯统计

基本语法:group by  字段[asc|desc] with rollup

如:select  class_id,count(*)from my_student group by class_id with rollup;将每班人数得出,然后回溯一次,统计总人数

多分组回溯类似、

having  

having 本质和while一样,

多使用在group by之后,可以针对分组数据进行统计筛选,可以使用聚合函数或者字段别名,但是where不行

select  class_id,count(*) as number from my_student group by class_id having number>2

--查找班级人数大于2的班级和人数

having在group by之后,group by 在where之后,where之后所有操作都是内存操作

order by

语法:order by 字段 [asc|desc]

也可以多字段排序:order by 字段一  [asc|desc],字段二  [asc|desc]

limit

限制数量

limit n:获得前n条数据

limit m,n  : 从m条开始n条

二.联合查询

select 语句 union [distinct|all] select 语句将两个语句合起来

永远只保留第一个句子所对应的语句

如果要使用order by ,每个语句必须用括号括起来,必须配合limit来使用

交叉连接

语法:语句一 cross join  语句二

两个语句进行笛卡尔积,所有字段都拼接起来、

内连接

从第一张表中,取出记录,再从另一张表中匹配。

语法:表1 [inner] join 表2 on 条件

内连接必须保证两边都可以匹配到,才可以取到

外连接outer join(左连接或者右连接)

按照某一张表作为主表,然后根据条件连接到另一张表来取到数据

左连接:坐标为主表,右连接同理

语法:表1 left/right join 表2 on 条件

using 关键字,在连接中,代替on

using对应的两张表中查询的字段是同名的,对于同名字段,在结果中只能保留一个

表1 left/right join 表2 using(名字)

三.子查询


in:主查询 where in(列子查询)

any:与in类似

<>any:表示不存在

some:与any一样

all:等于里面所有,<>all:不等于里面所有

例子:

MySQL--查询_第1张图片

行子查询:语法:基本语句 where (数据一,数据二)=(语句,可以使用函数)

eg: 

exit :

语法:基本语句 where exists(条件)#exists返回0或者1

你可能感兴趣的:(MySQL--查询)