sql语言 含有包含关系的查询 (含mysql 和sql sever)

时间:2022-05-31 03:38:26

一、sql中查询包含关系的查询

sql语句中包含关系可以使用 in 和exist,但有些时候仅仅用这两个是不够的,还有表示方法是  not exist(b expect a )可以表示a包含b。

二、这里举一个例子

查询中涉及2个表,一个student表,一个sc表(用来储存每个学生的id和对应的选课id还有该学生该课的成绩)

具体表的内容如下(不全):

student表:                                                                             sc表:

sql语言 含有包含关系的查询 (含mysql 和sql sever)         sql语言 含有包含关系的查询 (含mysql 和sql sever)

问题:查询至少选修了学号为“31401”的学生所选修的所有课程的学生的学号和姓名。

emmmm...

如果套用之前的公式:

 select sno,sname
from student as s1
where not exists(
(select cno
from sc
where sno='')
except
(select sc.cno
from sc,student as s2
where sc.sno=s2.sno and s1.sname=s2.sname));

然而遗憾的是,mysql不能使用except语句,那么我们使用另一种解决方法

 -- 找出学号为31401的同学所选课程的集合a
CREATE OR REPLACE VIEW a as
select sc.cno
from sc
where sno=31401; -- 找出其他同学选修了集合a里的学生id和课程id的集合
CREATE OR REPLACE VIEW b as
select a.cno,sno
from a left join sc on a.cno=sc.cno; -- 得出结果
select sno, sname
from student
where sno in(select sno
from b group by sno having count(distinct cno)=3);