我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章
DQL(数据查询语言)
- 查询多个字段(as 设置别名,可省略as)
select 字段1[as 别名], 字段2[as 别名], ... from 表名;
- 查询表中所有字段
select * from 表名;
- 去除重复记录(过滤掉字段一样的值)
select distinct 字段列表 from 表名;
DQL-条件查询
select 字段列表 from 表名 where 条件列表;
条件列表
比较运算符:
> (大于) >= (大于等于) < (小于) <= (小于等于) = (等于)
<> 或 != (不等于) between...and... (在某个范围之间(含最小值,最大值))
in(...) (多选一) like 占位符 (模糊匹配(_: 匹配单个字符, %: 匹配任意个字符))
is null (为null)is not null (不为null)
逻辑运算符:
and 或 && (并且) or 或 || (或者) not 或 ! (非,不是)
-- 例:查询姓名为2个字符的名字
select * from 表名 where name like '__';
-- 例:查询身份证号最后一位是X
select * from 表名 where idCard like '%X';
DQL-聚合函数
将一列数据作为一个整体,进行纵向计算
count (统计数量) max (最大值) min (最小值)
avg (平均数) sum (求和)
注意: null值不参与聚合函数运算
select 聚合函数(字段列表) from 表名;
DQL-分组查询
where与having区别
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
-- 例:统计男性员工和女性员工的数量
select gender, count(gender) from employee group by gender;
-- 例:查询年龄小于45,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(id) from 表名 where age < 45 group by workaddress having count(id) >= 3;
注意:
- 执行顺序:where > 聚合函数 > having。
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
DQL-排序查询
排序方式
- ASC(asc):升序(默认值,从小到大)
- DESC(desc):降序(从大到小)
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;
-- 例:根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from 表名 order by age, enterDate desc;
注意:
- 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
DQL-分页查询
限制条件
- limit 起始索引, 查询记录数(写在sql语句的最后面)
select 字段列表 from 表名 limit 起始索引, 查询记录数;
-- 例:查询第二页员工数据,每页显示10条数据
select * from 表名 limit 10, 10;
注意:
- 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数。
- 分页查询是数据库的方言,不同数据库有不同的实现,Mysql是limit。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
综合案例
-- 例:查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果安年龄升序排序,年龄相同按入职时间升序排序。
select * from 表名 where gender = '男' and (age between 20 and 40) order by age asc, enterDate asc limit 5;
DQL-执行顺序
编写顺序
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后的条件列表
order by 排序字段列表 limit 分页参数
执行顺序:
from 表名列表 => where 条件列表 => group by 分组字段列表 => having 分组后条件列表 =>
select 字段列表 => order by 排序字段列表 => limit 分页参数