sqlserver中,将下列语句转换为使用exist语句完成的语句: SELECT Sno FROM SC,Course where SC.Cno=Course.Cno Group by Sno having count(*)=(select count(*) from Course)
时间: 2024-01-26 11:02:07 浏览: 78
以下是使用EXISTS语句完成的SQL语句:
```
SELECT Sno
FROM SC
WHERE EXISTS (
SELECT 1
FROM Course
WHERE SC.Cno = Course.Cno
HAVING COUNT(DISTINCT Course.Cno) = (SELECT COUNT(*) FROM Course)
)
GROUP BY Sno;
```
这个查询的做法是,在SC表中对每个学生进行分组,然后检查是否存在一个子查询,该子查询返回的是所有课程的数量。子查询中的计数是基于Course表中不同的课程号进行的,而SC表中具有相同课程号的行将被聚合在一起并计数。如果在SC表中找到的课程数量等于Course表中的课程数量,则该学生被认为是所需学生的一部分,并且将包括在查询结果中。
相关问题
SELECT SNAME FROM S WHERE Sno NOT IN (SELECT Sno FROM SC WHERE Cno = '002') 改用exist
可以使用 EXISTS 替换 NOT IN,将查询重写为:
```
SELECT SNAME FROM S
WHERE NOT EXISTS (
SELECT * FROM SC
WHERE SC.Sno = S.Sno AND SC.Cno = '002'
);
```
这将返回一个结果集,其中包含没有选修编号为 '002' 的课程的学生名字。在这个查询中,使用了 EXISTS 子查询,该子查询返回一个布尔值(即真或假),表示是否存在与学生表 S 中的 Sno 对应的 SC 表中的 Sno,同时选课号为 '002'。如果子查询返回的值为 false,则学生被包含在结果集中。
本题目要求编写SQL语句, 检索出没有选修'C语言'课程的学生记录,输出结果集按照学号升序排序。 要求使用not exist语句实现。 表结构: 请在这里写定义表结构的SQL语句。例如: CREATE TABLE `stu` ( `sno` char(4) NOT NULL, `sname` char(8) NOT NULL, `sex` tinyint(1) DEFAULT NULL, `mno` char(2) DEFAULT NULL, `birdate` datetime DEFAULT NULL, `memo` text, PRIMARY KEY (`sno`) ); CREATE TABLE `cou` ( `cno` char(4) NOT NULL, `cname` varchar(30) NOT NULL, `credit` smallint(6) DEFAULT NULL, `ptime` char(5) DEFAULT NULL, `teacher` char(10) DEFAULT NULL, PRIMARY KEY (`cno`) ) ; CREATE TABLE `sc` ( `sno` char(4) NOT NULL, `cno` char(4) NOT NULL, `grade` decimal(6,1) DEFAULT NULL, PRIMARY KEY (`sno`,`cno`), CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`), CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`) );
CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `cou` (
`cno` char(4) NOT NULL,
`cname` varchar(30) NOT NULL,
`credit` smallint(6) DEFAULT NULL,
`ptime` char(5) DEFAULT NULL,
`teacher` char(10) DEFAULT NULL,
PRIMARY KEY (`cno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);
SELECT sno, sname
FROM stu
WHERE NOT EXISTS (
SELECT *
FROM sc
WHERE stu.sno = sc.sno AND cno = 'C语言'
)
ORDER BY sno ASC;
阅读全文