MySQL数据库的子查询
1. 子查询
- 定义:子查询即一个查询语句嵌到另一个查询语句的子句中;可以出现在另一个查询的列中,where子句中,from子句中等。
例如:通过子查询实现一个自身连接的功能,显示员工与领导的关系
自身连接:
mysql> select A.ename 员工 , B.ename 领导 from EMP A, EMP B where A.mgr = B.empno;
子查询:
mysql> select ename 员工 ,(select ename from EMP where empno = e.mgr) 领导 from EMP e;
| xxxx | CLARK |
| SMITH | FORD |
| ALLEN | BLAKE |
| WARD | BLAKE |
| JONES | KING |
| MARTIN | BLAKE |
| BLAKE | KING |
| CLARK | KING |
| SCOTT | JONES |
| TURNER | BLAKE |
| ADAMS | SCOTT |
| JAMES | BLAKE |
| FORD | JONES |
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
例如:查找出工资大于SMITH的员工
1. 先查找出SMITH的工资
select sal from EMP where ename = 'SMITH';
2. 在查找出所有工资
select * from EMP where sal;
3. 将sal和SMITH的工资作比较
select * from EMP where sal > (select sal from EMP where ename = 'SMITH');
2. any/all
例如:查询工资小于销售员某个员工的信息
mysql> select * from EMP where sal < any (select sal from EMP where job = 'SALESMAN');
例如:查询工资大于所有销售员的信息
mysql> select * from EMP where sal > all(select sal from EMP where job = 'SALESMAN');
3. exists
- exists 存在性条件判断
- 若内层查询非空,则外层的where子句返回真值,否则返回假。not exists相反。
例如:列出与Scott从事相同工作的所有员工
mysql> select * from EMP e where exists (select * from EMP where ename = 'SCOTT' and e.job = job);