sql中的exists⽤法
查询选修语⽂(cno=21)的学⽣名单
SELECT sname FROM student WHERE EXISTS ( SELECT 1 FROM sc WHERE sco = 21 AND sc.sno = student.sno )
查询没有选修语⽂(cno=21)的学⽣名单
SELECT sname FROM student WHERE NOT EXISTS ( SELECT 1 FROM sc WHERE sco = 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 so= sco )
)
当有课程没有选修时,下⾯的查询有返回的记录数。当全部课程都选择时,返回空
( select * from course s where not exists
(select * from sc where t.sno=sc.sno and so= sco )
)
数据库表结构
--课程表
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',
exists的用法`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');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论