zoukankan      html  css  js  c++  java
  • SQL中EXISTS的使用

    1.简介

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

    2.表结构

    选课表:学号、课程号

    学生表:学号、姓名

    课程表:课程号、课程名

    3.查询所有选修了“C1”课程的学生名。

    普通SQL查询:

    SELECT 姓名 
    FROM 学生表 
    WHERE 学号 IN (SELECT 学号 FROM 选课表 WHERE 课程号 = 'C1'); 
    

    带EXISTS的SQL查询:

    SELECT 姓名
    FROM 学生表
    WHERE EXISTS    
    (
        SELECT * 
        FROM 选课表
        WHERE 学生表.学号 = 选课表.学号 AND 课程号 = 'C1' 
    );
    

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

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

    • Exists:若子查询的结果集非空时,返回“True”;若子查询的结果集为空时,返回“False” 。
    • NOT EXISTS :若子查询结果为空,返回“TRUE”值;若子查询的结果集非空时,返回 “FALSE。

    4.查询没有选C1课程的学生的学号、姓名

    SELECT 姓名
    FROM 学生表
    WHERE NOT EXISTS
    (
        SELECT *
        FROM 选课表
        WHERE 学生表.学号 = 选课表.学号 AND 课程号 = 'C1'
    );
    

    5.查询选修了所有课程的学生的姓名(续)

    SELECT 姓名
    FROM 学生表
    WHERE NOT EXISTS
    (
        SELECT *
        FROM 课程表
        WHERE NOT EXISTS
        (
           SELECT *
           FROM 选课表
           WHERE 学生表.学号 = 选课表.学号 AND 课程表.课程号 = 选课表.课程号
        )
    );
    

    6.查询至少选修了S1所选的全部课程的学生名

    SELECT 姓名
    FROM 学生表
    WHERE NOT EXISTS                     
    ( 
        SELECT *
        FROM 选课表 AS 选课表X            
        WHERE 选课表X.学号='s1' AND NOT EXISTS            
        (
            SELECT *
            FROM 选课表 AS 选课表Y
            WHERE  学生表.学号 = 选课表Y.学号 AND 选课表X.课程号 = 选课表Y.课程号
        )
    );
    

    7.在FROM语句中使用子查询,对查询结果定义表名及列名 例:求平均成绩超过80分的学号及平均成绩

    SELECT 学号, AVG_G
    FROM        
    (
        SELECT 学号, AVG(Grade)
        FROM 选课表
        GROUP BY 学号 
    ) AS RA(学号, AVG_G)
    WHERE AVG_G > 80 
    
  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/rainman/p/4475357.html
Copyright © 2011-2022 走看看