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');
  • 相关阅读:
    THUSC2018退役预定
    TAT
    dsu on tree(CF600E Lomsat gelral)
    Bzoj4784: [Zjoi2017]仙人掌
    [APIO2018] Duathlon 铁人两项
    仙人掌基础
    Bzoj3672: [Noi2014]购票
    CF809E Surprise me!
    虚树(Bzoj3611: [Heoi2014]大工程)
    Bzoj3197: [Sdoi2013]assassin
  • 原文地址:https://www.cnblogs.com/moris5013/p/9644581.html
Copyright © 2011-2022 走看看