查询选修语文(cno=21)的学生名单

SELECT sname  FROM student  WHERE  EXISTS ( SELECT  FROM  sc  WHERE sc.cno =  AND  sc.sno  =  student.sno )

查询没有选修语文(cno=21)的学生名单

SELECT sname  FROM student  WHERE NOT EXISTS ( SELECT  FROM  sc  WHERE sc.cno =  AND  sc.sno  =  student.sno )

选修全部课程的学生名单  (子查询)

SELECT sname  FROM student  WHERE sno  in  (

SELECT sc.sno  FROM  sc   GROUP BY  sc.sno  HAVING  count() =  (SELECT count() from course)

)

选修全部课程的学生名单 (exists)

select * from student t where not exists
( select * from course s where not exists
(select * from sc where t.sno=sc.sno and s.cno= sc.cno )
)

 当有课程没有选修时,下面的查询有返回的记录数。当全部课程都选择时,返回空

( select * from course s where not exists
      (select * from sc where t.sno=sc.sno and s.cno= sc.cno )
)

数据库表结构

--课程表
CREATE TABLE `course` (
`cno` int() NOT NULL DEFAULT '',
`cname` varchar() DEFAULT NULL,
PRIMARY KEY (`cno`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; INSERT INTO `course` VALUES ('', '数学');
INSERT INTO `course` VALUES ('', '语文');
INSERT INTO `course` VALUES ('', '外语'); --课程学生表
CREATE TABLE `sc` (
`sno` int() NOT NULL DEFAULT '',
`cno` int() NOT NULL DEFAULT '',
PRIMARY KEY (`sno`,`cno`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; INSERT INTO `sc` VALUES ('', '');
INSERT INTO `sc` VALUES ('', '');
INSERT INTO `sc` VALUES ('', '');
INSERT INTO `sc` VALUES ('', '');
INSERT INTO `sc` VALUES ('', '');
INSERT INTO `sc` VALUES ('', ''); --学生表
CREATE TABLE `student` (
`sno` int() NOT NULL DEFAULT '',
`sname` varchar() DEFAULT NULL,
PRIMARY KEY (`sno`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; INSERT INTO `student` VALUES ('', 'zhangsan');
INSERT INTO `student` VALUES ('', 'lisi');
INSERT INTO `student` VALUES ('', 'wangwu');

sql中的exists用法的更多相关文章

  1. SQL中distinct的用法

    SQL中distinct的用法   1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...

  2. sql中binary_checksum(*)的用法

    sql中binary_checksum(*)的用法(转) binary_checksum(*)可以用来检查修改过的行. 同一行在update后,该行的binary_checksum(*)就不同. 如 ...

  3. SQL中Merge的用法

    SQL中Merge的用法 Merge的用法 Merge可以完成以下功能: 1.  两个表之间数据的更新 2.  进行进销存更新库存 3.  进行表之间数据的复制 语法说明: 1.  在语句结束后一定要 ...

  4. SQL中Truncate的用法(转)

    转自:http://www.studyofnet.com/news/555.html 本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所 ...

  5. sql中 decode() 的用法

    sql中 decode() 的用法 SELECT ID,DECODE(inParam,'Param','value1' ,'value2') name FROM yytj2018 如果 inParam ...

  6. SQL中Truncate的用法

    SQL中Truncate的用法转自:http://www.studyofnet.com/news/555.html本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE ...

  7. SQL中CASE 的用法 转载

    sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.              例如,下面的语句显示中文年月 select getdat ...

  8. sql server if exists用法

    if exists用法     if exists 判断表中的内容是否存在     IF EXISTS(SELECT FROM proprice_sheet WHERE vndcode = @vndc ...

  9. SQL中CONVERT()函数用法详解

    SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft® SQL Server ...

随机推荐

  1. #16 os&sys模块

    前言 在编写Python程序的时候,可能需要和操作系统进行交互,比如获取某个目录下的内容.更改运行目录.更改环境变量等操作.在Python中有两个模块将这些问题完美解决,一起看看哇! 一.os模块 o ...

  2. 基于vue框架手写一个notify插件,实现通知功能

    简单编写一个vue插件,当点击时触发notify插件,dom中出现相应内容并且在相应时间之后清除,我们可以在根组件中设定通知内容和延迟消失时间. 1. 基础知识 我们首先初始化一个vue项目,删除不需 ...

  3. 【学习笔记】AJAX内容拓展

    题记——近期回顾<javaScript高级程序设计>ajax章节,发现书中对封装一个ajax库并不完美,结合之前看到博客,对ajax库做一点点的优化. 参考博客:如何去封装一个ajax库 ...

  4. 判断使用设备是PC还是phone

    <script type="text/javascript"> //如果是手机设备,则.. if(/Android|webOS|iPhone|iPod|BlackBer ...

  5. centos每天自动备份mysql数据库

    #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH #数据库用户名 db ...

  6. csharp: Setting the value of properties reflection

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. HDU4278

    Faulty Odometer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. sublime3安装ctags追踪插件

    sublime3经常要用到函数追踪插件,怎做的?下面看安装步骤: 1.安装package control 按快捷键 ctrl+shift+p 2.安装搜索 ctags插件 3.下载ctags可执行程序 ...

  9. Linux 中的命令链接操作符

    && 与 || 配合 eg: cat test.sh #!/bin/bash [ -e /etc/hosts ] && echo "ok" || e ...

  10. BZOJ2820: YY的GCD(反演)

    题解 题意 题目链接 Sol 反演套路题.. 不多说了,就是先枚举一个质数,再枚举一个约数然后反演一下. 最后可以化成这样子 \[\sum_{i = 1}^n \frac{n}{k} \frac{n} ...