mysql(DOL数据查询语言)

199 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章

DQL(数据查询语言)

  1. 查询多个字段(as 设置别名,可省略as)
select 字段1[as 别名], 字段2[as 别名], ... from 表名;
  1. 查询表中所有字段
select * from 表名;
  1. 去除重复记录(过滤掉字段一样的值)
select distinct 字段列表 from 表名;

DQL-条件查询

select 字段列表 from 表名 where 条件列表;
条件列表

比较运算符:
> (大于)  >= (大于等于)   < (小于)  <= (小于等于) = (等于)
<>!= (不等于)   between...and... (在某个范围之间(含最小值,最大值))
in(...) (多选一)   like 占位符 (模糊匹配(_: 匹配单个字符, %: 匹配任意个字符))
is null (为nullis 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 分页参数