MySQL数据库的子查询

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子句返回查询结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值