Skip to content

DQL 数据库查询语言

数据查询语言 DQL

数据查询语言 DQL 基本结构是由 select 子句,from 子句,where 子句组成的查询块: select<字段名表> from <表或视图名> where<查询条件>

查询语句

mysql>select*from 表名;

mysql> select 字段 1,字段 2,...... from 表名;

mysql>select distinct 字段 1,字段 2,....from 表名;

mysql>select 字段 1,字段 2,.....from 表名 where 限制条件;

where 是用于分组前筛选

区间查询

关键词

​ is null

​ is not null

比较操作符

​ <=> 当<=>左右两边的字段的值相等或者都是 null 时,<=>的结果是 true,则返回满足条件的数据

模糊查询

通配符:

​ %,代表不限个数个字符

​ _,代表一个字符

语法

sql
select*from 表名 where 字段 like '%k';

解释: 查询字段中数据是以 k 为末尾的数据

查询不存在,

sql
select * from emp where ename not like '%s%';

离散查询

in,not in 关键词

in(数据 1,数据 2,..)

语法

sql
mysql>select*from 表名 where 字段 in(数据1,数据2....);

排序查询

语法( order by 字段名 asc/desc;)

sql
mysql>select*from 表名 where order by 字段 asc(或者 desc);

默认是升序,asc 升序 desc 降序

分组查询(有坑)

(根据结果来进行分组)

使用关键词 group by,

限制语句是用 having,是在分组后进行筛选

比如 查询每个部门的平均工资

sql
select d.department_id,avg(e.salary) as '平均'
from employees e
join departments d
on e.department_id=d.department_id
GROUP BY d.department_name

根据部门名称或者部门 id 来进行分租,然后求出每个组的平均工资,最后整理得每个部门的平均工资

子查询

可以把前一次查询的结果作为第二次查询时的表、条件等使用

比如 查询工资高于公司平均工资的员工姓名和工资

1.先查平均工资

2.再查高于平均工资的

sql
select first_name,salary
from employees
where salary>(select avg(salary)
			from employees)

再比如 用子查询查询所有不在美国工作的员工的姓名

1.查询出所有在美国的部门 id 2.用部门 id 过滤员工信息

sql
select first_name
from employees
where department_id not in (select d.department_id
                            from locations l
                            join departments d
                            on l.location_id=d.location_id
                            where l.country_id='US')
sql
工资高于10000的员工的平均工资
select avg(salary)
from (select first_name,last_name,salary
	from employees
	where salary>10000) e

分页查询

在指定的条件下只显示一部分数据

索引从 0 开始计算

关键词 limit 参数 1(开始索引),参数 2(数量)

联合查询

把多次查询的结果竖着放一起显示,多次查询的列的数量和类型要一致 查询 1

union

查询 2

union 去重

union all 不会会去重

常见函数

单行函数

select length(参数);

select concat(字段 1,“链接符”,字段 2,) from 表名;

聚合函数

count(字段);

​ select count(字段)from 表名;

max();

​ selcet max(字段)from 表名;

min();

​ select min(字段)from 表名;

sum();

​ select sum(字段)from 表名;

avg();

​ select avg(字段)from 表名;

数学函数

round();

ceil();

floor();

多表查询

内连接(inner) join

》select 查询字段

》from 表名

》inner join 另一个表名

》on 表名.关联字段= 另一个表名.关联字段;

左连接

》select 查询字段

》from 表名

》left join 另一个表名

》on 表名.关联字段= 另一个表名.关联字段;

等于左外连接

右链接

》select 查询字段

》from 表名

》right join 另一个表名

》on 表名.关联字段= 另一个表名.关联字段;

if 函数

类似 Java 三元表达式

if(参数 1,参数 2,参数 3)

去重

distinct

sql
select distinct sal+ifnull(comm,0)*12 总工资 from emp;

<ALL 表示小于最小

所有数据。

any 任何

任何一个数据

>ANY 表示大于最小值