PL/SQL循序渐进全面学习教程--课程五 子查询

课程五 子查询
  
  本课重点:
  1、在条件未知的情况下采用嵌套子查询
  2、用子查询做数据处理
  3、子查询排序[@more@]课程五 子查询
  
  本课重点:
  1、在条件未知的情况下采用嵌套子查询
  2、用子查询做数据处理
  3、子查询排序
  
  注意:以下实例中标点均为英文半角
  
  一、概述:
  子查询是一种SELECT句式中的高级特性,就是一个SELECT语句作为另一个语句的一个段。我们可以利用子查询来

在WHERE字段中引用另一个查询来攻取值以补充其无法事先预知的子结果。
  子查询可以用在WHERE子句,HAING子句,SELECT或DELETE语句中的FROM 子句。
  注意:1、子查询必须在一对圆括号里。
  2、比较符号:>, =, 或者 IN.
  3、子查询必须出现在操作符的右边
  4、子查询不能出现在ORDER BY里  (试题中有时出现找哪行出错)
  二、子查询的执行过程:
  NESTED QUERY   MAIN QUERY
  SQL> SELECT dept_id            SQL> SELECT last_name, title
  2 FROM s_emp              2 FROM s_emp
  3 WHERE UPPER(last_name)=’BIRI’;   3 WHERE dept_id =
  这里 ,每个查询只运行一次。当然,子查询要首先被执行,大家设想一下,如果子查询中有一个以上的人的

LASTNAME为BIRI,会如何?-----会出错,因为不能用=来连接。
  ORA-1427: single-row subquery returns more than
  one row
  以上的查询也被称之为 单行子查询。
  DELECT子查询实例:
  delete from new_table where cata_time > to_date('19990901','yyyymmdd') and pro_name=(
  select pro_name from new_product where pro_addr in ('bj','sh'))
  三、子查询中的GROUP 函数的应用
  实例 1:
  SQL> SELECT last_name, title, salary
  2 FROM s_emp
  3 WHERE salary <
  4 (SELECT AVG(salary)
  5 FROM s_emp);
  实例2:
  选择出工资最高的员工的家庭住址:
  select emp_addr from employees where salary =
  (select max(salary) from employees);
  这是一个简单实用的例子,可以衍生出很多情况,在实际应用经常出现,请大家多多思考。
  实例3:
  SQL> SELECT dept_id, AVG(salary)
  2 FROM s_emp
  3 GROUP BY dept_id
  4 HAVING AVG(salary) >
  5 (SELECT AVG(salary)
  6 FROM s_emp
  7 WHERE dept_id = 32);
  子查询被多次执行,因为它出现在HAVING 子句中。
  SQL> SELECT title, AVG(salary)
  2 FROM s_emp
  3 GROUP BY title
  4 HAVING AVG(salary) =
  5 (SELECT MIN(AVG(salary))
  6 FROM s_emp
  7 GROUP BY title);
  对子查询,我们了解这么多在理论上已经覆盖了所有的知识点,对于UPDATE 和DELETE的子查询,不作为重点,但

也要练习掌握。今天到这,谢谢大家。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/34329/viewspace-916780/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/34329/viewspace-916780/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值