1.DQL语法
select 字段列表
from 表名列表 #DQL是可以进行多表查询的
where 条件列表
group by 分组字段列表
having 分组后条件列表
order by 排序字段列表
limit 分页参数
2.基本查询(select)
2.1查询多字段
select 字段1,字段2,字段3,......from 表名;select * from 表名;
#显示表内所有数据
#这条命令最好不要用,影响执行效率
2.2设置别名
select 字段1 [as] 别名1,字段2 [as] 别名2,字段3 [as] 别名3......from 表名;
#这条语句的作用就是,让查询结果中的字段名显示为别名,看起来更清晰
#as可以省略

2.3去除重复记录
select distinct 字段列表 from 表名;
3.条件查询(where)
select 字段列表 from 表名 where 条件列表;
where后的条件列表有很多种
| 比较运算符 | > | 大于 |
| < | 小于 | |
| >= | 大于等于 | |
| <= | 小于等于 | |
| <>或!= | 不等于 | |
| = | 等于 | |
| in(...) | 括号内的值多选一,类似于多个或运算 | |
| like 占位符 | 模糊匹配。 _匹配单个字符,%匹配多个字符 | |
| is null | 查询为空的数据 | |
| between A and B | 在A到B的范围内(包含A、B,A必须>B) | |
| 逻辑运算符 | and或&& | 与,多个条件同时成立 |
| or或|| | 或,多个条件任意一个成立 | |
| not或! | 非,条件不成立 |
(1)between...and...

(2)in(...)

(3)like 占位符

4.聚合函数(count、max、min、avg、sum)
select 聚合函数(字段名) from 表名;
| 聚合函数 | 功能 |
| count | 统计数量 |
| max | 求最大值 |
| min | 求最小值 |
| avg | 求平均值 |
| sum | 求和 |
聚合函数是不对null值进行运算的(包括count)
5.分组查询(group by、having)
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
#where条件是在分组前生效的,having条件是对分组后的字段生效的
#where不可以对聚合函数进行判断,having可以对聚合函数进行判断


上图语句中的第一个gender使结果出现了"男、女",如果省略掉,则只会得到2个数值
count(*)可以当做被检索的目标,因此也就代替了select后的*,也就是字段列表。也就是说,当有聚合函数出现时,select后面就不再跟字段列表了
分组查询往往配合聚合函数进行使用

select workaddress,count(*) from emp group by workaddress;
#这条语句会显示每个地址的人数select workaddress,count(*) from emp where age < 45 group by workaddress;
#这条语句会显示每个地址下年龄小于45的人数select workaddress,count(*) from emp where age < 45 group by workaddress having count(*) >= 3;
#对于每个地址下年龄小于45的人数,这条语句会显示这个人数大于等于3的地址与人数
执行顺序是where > 聚合函数 > having
6.排序查询
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2......;
#排序方式有2种:ASC、DESC,分别代表升序和降序。如果不填,则默认为升序
#order by后出现多个字段排序时,会在第一个字段相同时,再对第二个字段进行排序

7.分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
*起始索引=(查询页码-1)*每页显示记录数
*分页查询的关键词在不同的数据库中是不同的,mysql的关键词是limit
*如果查询的是第一页数据,起始索引可以省略


8.执行顺序
如下图所示,蓝色关键字代表语法顺序,红色圈数字代表执行顺序
