• Oracle 学习之exists


    不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询。
    相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带EXISTS 的子查询就是相关子查询
    EXISTS表示存在量词:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”

    示例:三张表,找出选语文课的学生以及没有选语文课的学生

    选课表:学号、课程号
    学生表:学号、姓名
    课程表:课程号、课程名

    1. IN
    SELECT 姓名 
    FROM 学生表 
    WHERE 学号 IN (SELECT 学号 FROM 选课表 WHERE 课程号 = '语文');
    2. EXISTS
    SELECT 姓名
    FROM 学生表
    WHERE EXISTS    
    (
        SELECT * 
        FROM 选课表
        WHERE 学生表.学号 = 选课表.学号 AND 课程号 = '语文' 
    ); 

    相关子查询执行过程:先在外层查询中取“学生表”的第一行记录,用该记录的相关的属性值(在内层WHERE子句中给定的,学生ID)处理内层查询,若外层的WHERE子句返回“TRUE”值,则这条记录放入结果表中,然后再取下一行记录;重复上述过程直到外层表的记录全部遍历一次为止。

    EXISTS语句不关心子查询的具体内容,因此用“SELECT *”,“Exists + 子查询”用来判断该子查询是否返回记录。

    • Exists:若子查询的结果集非空时,返回“True”;若子查询的结果集为空时,返回“False” 。
    • NOT EXISTS :若子查询结果为空,返回“TRUE”值;若子查询的结果集非空时,返回 “FALSE。
    SELECT 姓名
    FROM 学生表
    WHERE NOT EXISTS
    (
        SELECT *
        FROM 选课表
        WHERE 学生表.学号 = 选课表.学号 AND 课程号 = 'C1'
    );
  • 相关阅读:
    模式应用:自定义匹配
    WPF架构学习总结
    脑子是用来想事的,不是记事的
    参加峰会“金点子”的材料
    我所想的GIX4的权限
    Process, Thread, STA, MTA, COM object
    JAVA 游戏分享 “是男人就下100层”
    关于静态方法和实例方法的一些误区。
    软区域
    Dispose, Finalization, and Resource Management
  • 原文地址:https://www.cnblogs.com/sunfie/p/7743515.html
Copyright © 2020-2023  润新知