查询选修语文(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. WCF返回表datatable时的解决

    在WCF中有时返回值类型是一张表,就会遇到反序列化的问题.解决该问题我归纳了两种方法: 1.根据Model层的类,在服务器端将Table转化成List,在客户端再将List转化为table /// 将 ...

  2. 《深入理解Java虚拟机》(五)JVM调优 - 工具

    JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监 ...

  3. MVC架构介绍-Model的开发

    需要在派生类实现lEntity,IEntity的两个属性EntityId和IsDeleteInDataBase,以显式方式实现 Model的所有属性存入数据库以前都要确保有相应的默认值,不要依赖数据库 ...

  4. 【Java深入研究】7、ThreadLocal详解

    ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量. 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线 ...

  5. 第一篇 Spring boot 配置文件笔记

    spring boot 不需要配置太多文件程序便可正常运行,特殊情况需要我们自己配置文件. 项目以IDEA写实例,系统会默认在src/main/java/resources目录下创建applicati ...

  6. Matlab Euler's method

    % matlab script to test efficiency of % Euler's method, classical Runge-Kutta, and ode45 % on Arenst ...

  7. Bootstrap 、AngularJs

    SPA 全称:single-page application单页面应用 说明:类似原生客户端软件更流畅的用户体验的页面.所有的资源都是按需加载到页面上. JSR 全称:Java Specificati ...

  8. 【代码笔记】Web-ionic-Range

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. C# 6 元组应用 Part 1:方便的字典工厂方法

    首先是简单的实现: public static class CollectionExtensions { public static IDictionary<TKey, TValue> M ...

  10. Ubuntu 中卸载软件的几种命令

    1.在终端里 apt-get安装的软件:安装软件sudo  apt-get install softname1 softname2softname3--卸载软件 sudo apt-get remove ...