day038MySQL之单表查询,各种条件详解
本节内容:
1、单表查询的语法
2、关键字的执行优先级(重点)
3、简单查询
4、where约束(重点)
5、group by 分组查询(重点)
6、having 过滤(重点)
7、order by 查询排序(重点)
8、limit 限制查询的记录数(重点)
9、使用正则表达式查询
一、单表查询的语法
查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,
然后打开文件,按照你的查询条件来找出你需要的数据。
下面是完整的一个单表查询的语法
二、关键字的执行优先级(重点)
1、关键字的执行优先级:重点中的重点
详见:
三、简单查询
注意一点,在查询语句里面select 字段 from 表,这几项是必须要有的,
其他的什么where、group by等等都是可有可无的
先创建一个表,为后面执行查询操作演示
1、查询操作
相关查询操作
fe:小练习
1 查出所有员工的名字,薪资,格式为
<名字:egon> <薪资:3000>
2 查出所有的岗位(去掉重复)
3 查出所有员工名字,以及他们的年薪,年薪的字段名为annual_year
答案
select concat('<名字:',name,'> ','<薪资:',salary,'>') from employee;
select distinct depart_id from employee;
select name,salary*12 annual_salary from employee;
四、where约束
1、where的约束条件
1、where不能使用聚合函数,原因:(对照having)
Where 发生在分组group by之前,因而Where中可以有任意字段,
但是绝对不能使用聚合函数。
1、比较运算符:> < >= <= <> !=
fe: where id=1
2、between 80 and 100 # 值在80到100之间数
fe: where age between 1 and 10
3、in (80,90,100) # 值是80或90或100的数
fe: where age in (80,90,100)
4、like "egon%" # 根据开头模糊查询,最后一个字符是模糊查询的pattern,%是所有字符都匹配,_只匹配一个
fe: where like "eg%" # 查找所有eg开头的内容,
5、逻辑运算符
多个条件组合查询,使用and or not
fe: where post="teacher" and salary>10000
具体的查询代码示例
2、where条件及select执行的顺序
以下面这条sql语句为例:
select id,name,age from employee where id>7;
执行步骤:
1、首先from找到employee这个表
2、mysql根据where后面的条件,把符合id大于7的一整条数据,交给select
3、select按照自己的条件,只拿id,name,age这个三个字段的数据,打印出来
每条数据执行一遍这个流程,直到把所有数据过滤一遍,才结束。
fe:where小练习
答案
五、group by : 分组查询
1、在where之后使用,即分组是基于where之后得到的记录而进行的分组
2、分组:指的是根据某个相同的字段进行分类。
3、分组的作用: 以组为单位进行一些数据统计,或是进行一些计算
取每个部门的最高工资
取每个部门的员工数
取男人数和女人数
4、大前提:
可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,
如果想查看组内信息,需要借助于聚合函数
1、根据post分组的结果分析
2、ONLY_FULL_GROUP_BY
代码示例
3、group by的使用及配合聚合函数
4、聚合函数
强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组
5、小练习
答案
六、having过滤(也是筛选的效果)
1、在group by 后使用。
2、having的语法格式和where是一模一样的,
3、having可以使用聚合函数,原因:(对照where)
Having发生在分组group by之后,因而Having中可以使用分组的字段,
无法直接取到其他字段,having是可以使用聚合函数
4、having不能单独使用,having必须跟在group by后面使用,
1、having的简单测试
2、小练习
答案
六.五、distinct 去重
1、将查询的结果进行去重:select distinct post from employee;
2、注意distinct去重要写在查询字段的前面,不然会报错,
3、distinct不能返回其他的字段,只能返回目标字段
七、order by 查询排序
1、单列排序
2、多列排序
数据在第一个排序条件相同的情况下,进行下一个条件排序
3、小练习
1. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序
2. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列
3. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列
答案
八、limit 限制查询的记录数
1、分页显示,每页显示5条数据
好多的网站都可以看到一个分页的功能。
九、正则表达式的查询
之前我们用like做模糊匹配,只有%和_,局限性比较强,所以我们说一个正则,
之前我们是不是学过正则匹配,你之前学的正则表达式都可以用,正则是通用的