ITPub博客

首页 > 数据库 > Oracle > 使用子查询来解决问题

使用子查询来解决问题

原创 Oracle 作者:x辛诺x 时间:2016-01-12 23:41:06 0 删除 编辑

目标:

         1、了解子查询

         2、了解子查询能解决哪些问题

         3、了解子查询类型

         4、学会使用单行子查询和多行子查询

Agenda

         一、子查询:类型、语法和原则

         二、单行子查询

                  ---子查询中的组函数

                  ---HAVING子句中的子查询中

         三、多行子查询

                  ---学会使用ALL或者ANY操作

         四、了解子查询中的NULL值

 

 

 

一、子查询:类型、语法和原则

子查询语法



inner query ---> 可以使用在WHERE子句、FROM子句和HAVING子句中 


内部查询先执行,结果被主查询使用



示例:查询比“Abel”薪资高的员工




子查询原则

1、用括号将子查询括起来

2、将子查询放在右边,提高阅读性

3、学会使用子查询的单行操作符和多行操作符

 

Single-row subquery




Multiple-row subquery



单行子查询

1、返回一行

2、可以使用单行操作符



示例:





二、单行子查询

子查询中使用组函数

示例:列出公司最低薪资员工



在HAVING子句中使用子查询

1、首先执行子查询

2、子查询结果返回到主查询

示例:列出各部门最低薪资,且大于部门编号为50的部门



示例:列出不同岗位中平均薪资中的最低薪资岗位


注意不能使用单行操作符操作多行记录

示例:



示例:修改上面的错误



子查询一般会返回三个结果,一个是单行,一个是多行,另一个就是空,但是如果子查询返回的结果是NULL值的话,那么整个的查询返回的结果都是NULL

示例1:



示例2:





显然,当NULL参与算术运算的时候,整个式子都是NULL



三、多行子查询

1、返回多行记录

2、使用多行操作符



如果最后返回的结果是“no rows selected”,最终会是FALSE

如果最后返回的结果是“no rows selected”,最终会是TURE

 

“< ANY是小于子查询到的最大值”

“> ANY是大于子查询到的最小值”

“= ANY是相当于IN”

示例:(ANY)把薪资是小于程序员最大值的员工列出来,且不是程序员岗位的












“< ALL是小于子查询到的最小值”

“> ALL是大于子查询到的最大值”

示例:(ALL)








四、了解子查询中的NULL值

示例:列出不是经理的员工


“not in”在返回的结果有NULL值的情况下,查询的结果是NULL,相当于“<> ALL”

而“in”不同,“in”相当于“= ANY”


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

上一篇: 休息一天
下一篇: 使用set操作符
请登录后发表评论 登录
全部评论

注册时间:2015-04-08

  • 博文量
    21
  • 访问量
    12537