相关子查询

原文链接:http://blog.sina.com.cn/s/blog_49cb8da80100nh1r.htm

1.概念:

  子查询分为两种类型:独立子查询和相关子查询

      ①独立子查询是单独执行,其结果参与外层的查询,

         整个查询中子查询只执行一次,执行完后再执行外层查询;

      ②相关子查询是指子查询(内层查询)中引用了外层查询所引用表的字段,

         因此外层查询处理每一条记录时都必须执行一次子查询

         因为子查询中引用的字段的值发生了变化。

2. 例子:

例:找出每个部门中薪水最高的雇员,显示姓和薪水。
SELECT  last_name,salary_amount
FROM     employee ee
WHERE  salary_amount = (SELECT MAX (salary_amount)
FROM     employee em
WHERE  ee.department_number = em.department_number);

该子查询语句的执行过程如下:
1.读取雇员表的一条记录
2.执行子查询,得到该雇员所在部门的最高薪水数目
3.比较该雇员薪水和最高薪水
4.如果相等,输出该行信息
5.转到1

再举一个例子:查找薪水高于部门平均薪水的所有员工,显示姓和薪水。
SELECT    last_name
                ,salary_amount (Format ''$$$,$99.99'')
FROM       employee ee
WHERE    salary_amount > (SELECT AVG (salary_amount)
FROM       employee em
WHERE    ee.department_number = em.department_number);

该子查询的执行过程如下:

 1.读取employee表的一条记录

 2.执行子查询,得到该记录的雇员的所在部门的平均工资

 3.比较该雇员的薪水和部门平均薪水

 4.如果雇员薪水比部门平均薪水高,就输出该行信息

 5.转到1

用相关子查询的例子:
哪些代码的工作没有雇员?
  SELECT job_code
  FROM job
  WHERE job_code NOT IN  (SELECT job_code
                                            FROM employee) ;
 全部取出后  判定是否存在
 

 如果使用NOT EXISTS表达式,可以写成:
  SELECT job_code
  FROM job
  WHERE NOT EXISTS (SELECT *
                                   FROM employee ee
                                   WHERE ee.job_code = job.job_code);

l
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值