where、groupy、having、order by筛选条件
一、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起始排序位置+ 个数限制