查询选修语文(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. [POI 2009]Lyz

    Description 题库链接 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的溜冰鞋.有 \(m\ ...

  2. 迭代器模式(Iterator)

    1.概念 迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示,属于行为模式的一种 2.模式结构 抽象迭代器(Iterator):此抽象角色定义出遍历元素所需的接口 具体 ...

  3. HDU1559

    最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. Ubuntu 切换键盘布局(colemak / workman / norman)

    首先找出所有可选的布局(layout)方案: $ man xkeyboard-config 可以看到 us 下有很多常见的布局方案(以下为节选): LAYOUTS ┌───────────────── ...

  5. 纯小白入手 vue3.0 CLI - 3.1 - 路由 ( router )

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  6. VUE 实现复制内容到剪贴板功能

    注: 依赖第三方插件 clipboard 一.安装插件 npm install vue-clipboard2 --save 二.全局注入(main.js) import VueClipboard fr ...

  7. Apex单元测试

    单元测试类 Salesforce中为Apex语言提供了完整的单元测试流程,包括单元测试类.测试的运行和结果分析等. 单元测试类是一种特殊的Apex类,基本语法和普通的Apex类一样. 单元测试类的结构 ...

  8. 基于Jmeter和Testlink的自动化测试框架研究与实施

    关于测试框架搭建的详细过程,会在另一篇文章中详细介绍:http://www.cnblogs.com/leeboke/p/6145977.html 摘 要 目前基于Jmeter的接口自动化测试框架,大多 ...

  9. 使用windows命令和iconv.exe批量转换文件编码

    iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt ...

  10. C#获取H5页面上传图片代码

    基于上一篇的H5压缩上传图片,由于图片是以二进制字符流blob的形式传过来的,所以应该想将其转成bytes类型再进行转换 public void ProcessRequest(HttpContext ...