事实上查询的频次要远远高于增删改的频次.
语法基础
DQL语法
select 字段列表
from 表名列表
where 条件列表
group by 分组字段列表
having 分组后条件列表
order by 排序字段列表
limit 分页参数
基础查询
查指定字段
select 字段列表 from 表名;
查所有字段
select * from 表名;
实际开发中尽量不要写*
为什么?
一个是不直观, 一个是影响效率
给字段起别名
select workaddr as 别名 from 表名;
as是可以省略的
去重
select distinct 字段 from emp;
条件查询
条件运算符:
>
>=
<
<=
=
<>/!=
between .. and ..
in(...)
like 占位符
: (_
下划线匹配单个字符,%
百分号匹配任意字符)
is null
逻辑运算符
and 或者 &&
or 或者 ||
not 或者 !
查询例子
查询年龄等于88的员工:
select * from emp where age = 88;
查询年龄小于22的员工:
select * from emp where age < 22;
查询没有身份证号的员工信息:
select * from emp where idnum is null;
查询有身份证号的员工信息:
select * from emp where idnum not is null;
查询年龄不等于88的员工:
select * from emp where age != 88;
select * from emp where age <> 88;
查询年龄在15岁(包含)到20岁(包含)之间的员工:
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;
查询年龄等于20或者40或者80的员工:
select * from emp where age = 20 or age =40 or age = 80;
select * from emp where age in (18,20,40);
查询名字只有两个字的员工:
select * from emp where name like '__';
查询身份证号最后一位是X的员工:
select * from emp where idnum like '%X';
聚合函数查询
什么是聚合函数
将一列数据作为一个整体, 进行纵向的计算;
常见的聚合函数
count: 统计纵向的记录数(也叫做统计元组群数), 不用指定字段.
max: 找到纵向的记录中最大的一个或者好多个元组, 用指定字段.
min: 找到纵向的记录中最小的一个或者好多个元组, 用指定字段.
avg: 计算元组群中某个字段数据的平均数, 要指定字段.
sum: 计算元组群中某个字段数据的总和, 要指定字段.
注意点
null值不参与所有的聚合函数运算.
分组查询
基本语法
select 字段列表 from 表名
[where 条件]
Group by 分组字段名 [having 分组之后过滤条件] ;
where和having的不同
执行时机不同: where是分组之前进行过滤, 不满足where的条件不参与分组, 而having是分组之后对结果进行过滤.
where并不能对聚合函数进行判断, 但是having可以.
查询例子
根据性别分组, 统计男员工和女员工的数量.
select gender, count() from emp group by gender;
根据性别分组, 统计男员工和女员工的平均年龄:
select gender, avg(age) from emp group by gender;
查询年龄小于45的员工, 并根据工作地址分组, 获取员工数量大于等于3的员工地址:
select addr, count() from emp where age < 45 group by addr having count(*) >= 3;
注意点
一般使用分组查询使用其他字段是没有任何意义的, 只会出来第一个, 所以一般都是查询分组的字段和聚合函数.
排序查询
实际开发中是十分常见的
基本语法
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2 ;
排序方式只有两种:
升序: (默认)ASC
降序: desc
注意点
如果是多字段排序, 当第一个字段值相同时, 才会根据第二个字段进行排序.
分页查询
基本语法
select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
注意点
起始索引是从0开始的, 它的计算规则是= (查询页码-1) * 每页的显示条数.
分页查询是数据库的方言, 不同的数据库有不同的语法, mysql中就是limit.
如果查询的是第一页, 起始索引可以省略.
执行顺序
注意注意
最上边的语法基础讲的是编写顺序
而真正的执行顺序是这样的
最先的是将表确定, 再将where条件确定, 最后再补充上having条件
此时, 再来确定查询的字段列表
最后将字段列表进行排序
最最后, 看是否需要分页操作