欢迎光临散文网 会员登陆 & 注册

where、groupy、having、order by筛选条件

2021-09-15 08:58 作者:海鸥之道  | 我要投稿

一、where子句

where字句中可以使用

  • 比较运算符: >、 <、 = 、!=  、<= 、>=

  • between 80 and 100  值在80~100之间

  • in(80.90,100) 值是 80或90或100

  • like 'auto_inc%':(pattem可以是%或_、 %表示任意多字符、 _表示一个字符)

  • 逻辑运算符:在多个条件直接可以使用逻辑运算符 ,and or not

1、单条件查询:

null 不等于 ‘’   空字符,判断null用 post_comment is Null;

2、模糊匹配

二、group by

单表查询:

1、group by

首先找到表,然后根据约束条件where过滤出想要的,在运行group by 分组查询打印

首先明确,分组发生在where之后,即分组时基于where之后得到的记录进行的。

2、什么是分组?

就是把一张表中的记录按照相同的字段进行分类。

分组一般找重复内容多的字段进行

3、为何要分组?

取每个部门的最高工资;

取每个部门的员工数;

取男人数和女人数;

小窍门: ‘每’这个字后面的字段。就是我们分组的依据

4、可以按照任意字段分组,但是分组完毕后,比如groupy by post,只能看post字段,如果想查看组内信息,需要借助与聚合函数。

实例1:

此时,只是取出每个post分组类型的第一个人,这样运行没有意义

处理办法:

exit 重新登录生效

在运行 select * from employee group by post;

发现严格按照分组模式进行,只能得到分组依据,得不到数据

聚合函数:

实例2:每个职位有多少个员工

求部门员工最大工资、部门平均工资、部门工资总和如下:

分组一般不选unique字段, 没有意义

分组之后,只能取分组的字段,以及每个组聚合的结果

没有group by 则默认整体算作一组,所以也可以用聚合函数

如:取所有员工的最高工资

group_concat

功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

上述只能显示分组依据的post和聚合函数的结果数值,如果想查询分组下面的name,直接这样:

发现会报错,那么该如何查询name呢?这时,group_concat就派上用场:

功能:将每个部门的post和name拼接成一个虚拟表,显示如下:

将每个部门的职位、最大工资、员工名字查询出来

查询秘书部门的员工名字和最高工资

练习:

1、查看岗位名称以及岗位包含所有员工的名字

2、查询岗位名字机翼岗位内员工个数

3、查询公司男员工和女员工的员工个数

4、查询岗位名字以及岗位的平均工资

5、查询岗位名字以及各岗位的最高薪资

6、查询岗位名字以及各岗位的最低薪资

7、查询男员工与男员工的平均薪资,女员工与女员工的平均薪资

三、having

与where区别:

  • having过滤是在分组之后过滤

  • where是在分组之前过滤

  • where不能用聚合函数当作条件

  • having 可以用聚合函数

实例;

1、查询各岗位包含的员工个数小于2的岗位名、岗位内包含员工名字、个数

2、查询各岗位平均薪资大于1005的岗位名、平均工资

3、查询各岗位平均薪资大于1000且小于1004的岗位名,平均工资

四、order by排序

表中排序默认是按照id字段升序排列

实例: 表中按照年纪升序 排列

select max(salary) from employee; 这是是对的, 分组采用默认,可以用聚合函数

select max(salary) from employee where max(salary)>1000; 是错的where运行时候,分组还没运行,不能用聚合函数。

limit

用来限制最终打印到屏幕上的条数

实例:

取出工资最高的人的详细信息

分页功能:  limit 0,5起始排序位置+ 个数限制


where、groupy、having、order by筛选条件的评论 (共 条)

分享到微博请遵守国家法律