zoukankan      html  css  js  c++  java
  • sql中的exists用法

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

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

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

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

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

    SELECT sname  FROM student  WHERE sno  in  (
    
    SELECT sc.sno  FROM  sc   GROUP BY  sc.sno  HAVING  count(1) =  (SELECT count(1) 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(11) NOT NULL DEFAULT '0',
      `cname` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`cno`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
    
    INSERT INTO `course` VALUES ('20', '数学');
    INSERT INTO `course` VALUES ('21', '语文');
    INSERT INTO `course` VALUES ('22', '外语');
    
    --课程学生表
    CREATE TABLE `sc` (
      `sno` int(11) NOT NULL DEFAULT '0',
      `cno` int(11) NOT NULL DEFAULT '0',
      PRIMARY KEY (`sno`,`cno`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
    
    INSERT INTO `sc` VALUES ('10', '20');
    INSERT INTO `sc` VALUES ('10', '21');
    INSERT INTO `sc` VALUES ('11', '20');
    INSERT INTO `sc` VALUES ('11', '21');
    INSERT INTO `sc` VALUES ('11', '22');
    INSERT INTO `sc` VALUES ('12', '22');
    
    --学生表
    CREATE TABLE `student` (
      `sno` int(11) NOT NULL DEFAULT '0',
      `sname` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`sno`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
    
    INSERT INTO `student` VALUES ('10', 'zhangsan');
    INSERT INTO `student` VALUES ('11', 'lisi');
    INSERT INTO `student` VALUES ('12', 'wangwu');
  • 相关阅读:
    C#--SqlDependency监控数据库表的变化
    C#--尝试读取或写入受保护的内存,这通常指示其他内存已损坏。
    C#--lock线程锁
    C#--抽象类(转载)
    ArrayList源码分析
    多线程编程bug起源分析
    Linux-CentOS-Nginx安装
    记一次springMVC的跨域解决方案
    Linux下压缩工具gzip和归档工具tar及其实战shell应用
    Docker在Centos 7上的部署
  • 原文地址:https://www.cnblogs.com/moris5013/p/9644581.html
Copyright © 2011-2022 走看看