[玩转SQL]:06 子查询

  • 子查询


子查询分为单行子查询和多行子查询




单行子查询

一般内部查询语句可以出现在SQL的三个位置:FROM WHERE HVING

语法:

SELECT  select_list
FROM    table
WHERE   expr operator
                     (SELECT  select_list
                      FROM    table);

特点:

  ++ 子查询使用小括号括起来.

  ++ 子查询一般放在比较操作符的右边.

  ++ 子查询有可能返回一条或多条记录.

  ++ 子查询中可以使用组函数.

  ++ 一个SQL语句中可以使用多个子查询.

--比abel工资高的员工(传统方式)
--首先获取abel工资
SELECT employee_id, first_name, last_name, salary
FROM   employees
WHERE  last_name LIKE 'Abel%';
--查询比abel工资高的员工
SELECT employee_id, first_name, last_name, salary
FROM   employees
WHERE  salary > 11000;
--比abel工资高的员工(子查询)
SELECT last_name, salary
FROM   employees
WHERE  salary >
      (SELECT salary
       FROM   employees
       WHERE  last_name = 'Abel');

--查询最低工资大于部门ID为50的最低工资的部门
SELECT   department_id, MIN(salary)
FROM     employees
GROUP BY department_id
HAVING   MIN(salary) >
                      (SELECT MIN(salary)
                       FROM   employees
                       WHERE  department_id = 50);


多行子查询

多行子查询可以使用比较操作符:INANYALL

ANY如果没有返回记录结果为FALSE.

ALL 如果没有返回记录结果为TRUE.

IN

SELECT employee_id, last_name
FROM   employees
WHERE  salary IN 
                (SELECT MIN(salary)
                 FROM   employees
                 GROUP BY department_id);


ANY

  ++  < ANY 相当于小于返回的多行数据里边的最大值.

  ++  > ANY 相当于大于返回的多行数据里边的最小值.

  ++   = ANY 相当于IN.

ANY可以理解为逻辑操作符的or

SELECT employee_id, last_name, job_id, salary
FROM   employees
WHERE  salary > ANY
                   (SELECT salary 
                    FROM   employees
                    WHERE  job_id = 'IT_PROG');


ALL

  ++ < ALL相当于小于返回的多行数据里边的最小值.

  ++  > ALL相当于大于返回的多行数据礼拜的最大值.

  ++  没有= ALL.

  ++  <> ALL相当于NOT IN

ALL相当于逻辑操作符的and

SELECT employee_id, last_name, job_id, salary
FROM   employees
WHERE  salary > ALL
                   (SELECT salary
                    FROM   employees
                    WHERE job_id = 'IT_PROG')
AND    job_id <> 'IT_PROG';


进行子查询是要注意NULL值.

若返回的值中含有NULL值很有可能查询不到预期的结果.


--------------------------------------------------------------------------------------
版权所有,转载时必须以链接方式注明源地址,否则追究法律责任!

QQ    :   413844436
Email  :   softomg@163.com
Blog   :   http://blog.csdn.net/softomg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值