在上一篇博客里我们详细的介绍了MySQL语言的DDL(数据定义语言) 和 DML(数据操作语言),那么在这篇博客中我们要对上次的DML进行补充;同时我们要介绍DCL(数据控制语言);
子查询
在学习子查询的开始我们由这样一个问题来引出;
我们现在有一张员工表emp,该表中包含员工的编号,姓名,薪资,入职日期等等信息;
假如我们现在想在这张表中查询最高薪资员工的员工信息,那按照我们之前学的知识来说,我们可能会这么写:
select max(sal),e.* from emp e;
乍一看这么写没什么错,我们获得最高工资和最高工资的人的所有信息,可是实际上它是有问题的,会报错;我们想一下,如果我们的表中有两个人同时有着最高的工资,那我们按照上面的语句查询就会发现我们获得的最高工资是一行,而对应的人信息却需要输出两行;这显然是不行的;这时候我们就需要用到子查询了;
-
子查询定义:
子查询允许把一个查询嵌套在另一个查询当中。
子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。
子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或 者do。
说的通俗一点,子查询就是把一个查询语句的结果当作另一个查询语句的条件; -
子查询的分类
根据子查询返回值的数量,将子查询可以分为标量子查询和多值子查询。
- 标量子查询:返回单一值的标量,最简单的形式。
也就是将子查询的结果当作一个值 - 表子查询:返回的结果集是 N 行 N 列
也就是将子查询的结果当作一张表
标量子查询
这时候我们再看上面的问题,用了子查询我们就可以这么做:
首先我们要获得表中的最高工资是多少;
select max(sal) from emp;
这句话获得了表中的最高工资,我们看到是5000;
那现在我们想获得工资是500