MySQL数据库的子查询

来源:互联网 发布:pythonpath linux 编辑:程序博客网 时间:2024/06/05 08:07

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  || MILLER | CLARK  |+--------+--------+

例如:查找出工资大于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

  • 小于any,小于子查询中的某个值。等价于
例如:查询工资小于销售员某个员工的信息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);//当exists后的语句(内层查询)非空,则外层where子句返回查询结果。
0 0
原创粉丝点击