SQL中EXISTS的使用

SQL中EXISTS的使用1.简介不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询。相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带EXISTS的子查询就是相关子查询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 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154297.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • nessus安装教程_kali安装nessus

    nessus安装教程_kali安装nessus(Windows安装教程)step1.官网下载对应操作系统安装包https://www.tenable.com/downloads/nessus1.pngstep2.正常双击程序安装等到最后一步finish完成后等会自动跳转出一个注册页面,或者打开浏览器输入https://localh…

    2022年10月10日
  • googlenet优点_googlenet提出的inception结构优势

    googlenet优点_googlenet提出的inception结构优势googlenet是2014年imagenet的冠军,同年还有VGG。因此在说googlenet之前,先回顾下VGG。之前介绍过fasterRCNN,fasterRCNN底层的模型官方支持了VGG和ZF,同样在K80下,ZF大概是8fps的速度,而VGG大概是3fps,这无疑就说明了VGG有些重。再给个直观的感受,通常我们VGG的fasterRCNN模型大概是400M左右,而goog…

  • RedFlag Linux 5.0桌面版安装oralce10[通俗易懂]

    RedFlag Linux 5.0桌面版安装oralce10[通俗易懂] 本文中描述的步骤可能有些不是必须的,但笔者没有进一步验证,故将安装过程中的所有步骤均列出在此。—www.bianceng.cn1.安装RedflagLinux5.0桌面版2.安装前得准备,打几个补丁1).redhatlinux9下第一张光盘下的RedHat/RPMS/compat-libstdc++-7.3-2.96.118.i386.rpm(安装方法rpm-ivh

  • 启动马达接线实物图_电动机星三角换接起动原理图解

    启动马达接线实物图_电动机星三角换接起动原理图解采用星三角换接起动,此方式起动为降压起动方式的一种。三角形起动即电动机正常工作时定子接成三角形,起动时接成星形,起动完毕后转速接近额定值时再换成三角形。这样做起动时就把定子每相绕组上的电压降到额定电压的1/√3起动电流降低到1/3额定电流,起动转矩也降低到1/3额定转矩。1、控制电路设计图星三角降压起动2、的讲解:(1)本设计采用220v控制380v电动机工作,电动机定子绕组起动时为星形,在…

  • C语言再学习 — 段错误(核心已转储)

    参看:Linux下的段错误产生的原因及调试方法参看:Linux环境下段错误的产生原因及调试方法小结参看:维基百科–Segmentationfault参看:LINUX内核段错误调试详细指南精品培训PPT讲义一、什么是段错误?一旦一个程序发生了越界访问,cpu就会产生相应的保护,于是segmentationfault就出现了,通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要

  • java 生成注释文档

    java 生成注释文档

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号