Oracle数据库中子查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Youth_Mr6/article/details/81461741

子查询:要加()
    子查询可以出现在以下字句中:
        1)from字句
        2)where字句
        3)having字句:当查询条件中有分组查询
        
    分类:
        1)嵌套子查询:
            1-1)单行子查询:结果是单行单列
            1-2)多行子查询:结果是多行单列
            1-3)多列子查询:结果是多行多列
        2)相关子查询:

单行子查询:单行单列
    运算符: =  <>  >  >=  <  <=

多行子查询:多行单列
    运算符: in  any   all   
        1)in:判断是否与子查询的任意一个返回值相等
        2)any:任意的  
            2-1)<any:小于最大值
            2-2)>any:大于最小值
            2-3)=any:与in相同
        3)all:所有的
            3-1)<all:小于最小值
            3-2)>all:大于最大值
            3-3)=all:无意义
    
多列子查询:多行多列(不常用) 一般与in运算符一起使用

子查询中的空值null:
    子查询结果集中有null值,不能使用not in运算符,因为所有的条件和空值比较结果都是空值;如果需要使用,则进行空值处理
    
from字句:子查询在from字句中,相当于该子查询是一张表
    所有的多列子查询都可以用from字句完成

    
相关子查询:主查询执行一行,子查询执行一次    //for循环??
    条件:子查询引用了父查询中的一列
    
    EXISTS和NOT EXISTS操作符:
        相关子查询还可使用EXISTS和NOT EXISTS操作符来进行操作
        EXISTS判断是否"存在",具体操作如下:
            1)子查询中如果有记录找到,子查询语句不会继续执行,返回值为TRUE;
            2)子查询中如果到表的末尾也没有记录找到,返回值为FALSE
            3)EXISTS子查询并没有确切记录返回,只判断是否有记录存在,而且只要找到相关记录,子查询就不需要再执行,然后再进行下面的操作.这样大大提高了语句的执行效率.
            4)NOT EXISTS正好相反,判断子查询是否没有返回值.如果没
            有返回值,表达式为真,如果找到一条返回值,则为假.

    PS:
        1)在相关子查询中,当父查询的列在子查询中使用时,一定要进行特别的标注(父表名.父查询的列),不能直接使用父查询的列名,查询结果是错误的.
        2)因为EXISTS子句中,并没有确切记录返回,只返回真或假.所以select后面只需写'1'占位用即可,无实际意义
        3) NOT EXISTS操作符因为运算方法与NOT IN不同,只会返回TRUE或FALSE,不会返回空值,所以不需要考虑子查询去除空值的问题
    

猜你喜欢

转载自blog.csdn.net/Youth_Mr6/article/details/81461741
今日推荐