子查询与相关子查询

  子查询本质上是嵌套进其他SELECT,UPDATE,INSERT,DELETE语句的一个被限制的SELECT语句,在子查询中,只有下面几个子句可以使用
  1.SELECT子句(必须)
  2.FROM子句(必选)
  3.WHERE子句(可选)
  4.GROUP BY(可选)
  5.HAVING(可选)
  6.ORDER BY(只有在TOP关键字被使用时才可用)

 

 

    子查询也可以嵌套在其他子查询中,这个嵌套最多可达32层。
 
  子查询的语法规则
 
  1、子查询的select查询总是使用圆括号括起来。
 
  2、不能包括compute或for.browse子句。
 
  3、如果同时指定top子句,则可能只包括order by子句。
 
  4、子查询最多可以嵌套到32层。个别查询可能会不支持32层嵌套。
 
  5、任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。
 
  6、如果某个表只出现在子查询中二不出现在外部查询中,那么该表的列就无法包含在输出中。

 


  子查询作为数据源使用:

       当子查询在外部查询的FROM子句之后使用时,子查询被当作一个数据源使用,即使这时子查询只返回一个单一值(Scalar)或是一列值(Column),在这里依然可以看作一个特殊的数据源,即一个二维数据表(Table).作为数据源使用的子查询很像一个View(视图),只是这个子查询只是临时存在,并不包含在数据库中。

 

 

  嵌套子查询的执行不依赖与外部的查询。执行过程:

  (1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。
 
  (2)执行外部查询,并显示整个结果。

  嵌套子查询一般可以分为:返回 单值的子查询 和 返回一个列表的子查询

 

  exists嵌套查询
  语法:
 
  exists是sql中的逻辑运算符号。如果子查询有结果集返回,那么就为True。exists代表“存在”的意义,它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找。


 
  exists 子查询        
   其中子查询是一个首先的select语句,不允许有compute子句和into关键字。
 
     exists 的意思是,子查询是否有结果集返回。


  子查询中还有一类很重要的查询是相关子查询(Correlated subquery),也叫重复子查询

 

  相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。执行过程:
 
  (1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。
 
  (2)执行内层查询,得到子查询操作的值。
 
  (3)外查询根据子查询返回的结果或结果集得到满足条件的行。


    相关子查询实际上会执行N次(N取决与外部查询的行数),外部查询每执行一行,都会将对应行所用的参数传到子查询中,如果子查询有对应值,则返回TRUE(既当前行被选中并在结果中显示),如果没有,则返回FALSE。然后重复执行下一行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值