数据库实验 --嵌套查询--查询选修了“c1”课程但没有选修“c2”课程的学生学号--三种方法--- in 的方法---exists方法-----集合操作 : INTERSECT

数据库实验 --查询选修了“c1”课程但没有选修“c2”课程的学生学号

问题:

查询选修了“c1”课程但没有选修“c2”课程的学生学号。
查询中嵌套查询语法格式,及使用IN,ANY,ALL,EXISTS操作符和比较运算符对数据库进行嵌套查询的操作。

方法一:采用 in 的方法

select s_num as 学号
from  selectCourse A
where A.c_num = 'C1' and  s_num  not in (select  s_num from selectCourse
                                      where  c_num ='C2' )

方法二:采用exists方法

select s_num as 学号
from  selectCourse A
where A.c_num = 'C1' and  not exists (select * from selectCourse B
                                      where A.s_num=B.s_num  and  c_num ='C2' )

方法三:采用 集合操作 : INTERSECT 返回多个查询结果中相同的部分

select   s_num as 学号 from selectCourse
								       where  s_num  not  in
								        (
										select  s_num  from  selectCourse
										where  c_num ='C2'   
										) 
NTERSECT  
select   s_num as 学号 from selectCourse
								      where  s_num   in
										(
										 (select  s_num  from  selectCourse
										where  c_num ='C1')  
										) 	

实验数据

在这里插入图片描述

实验结果

在这里插入图片描述

补充说明:

方法一:采用 in 的方法
方法二:采用exists方法
具体in和 exists区别请看SQL中IN和EXISTS用法的区别

方法三: 采用 集合操作 : INTERSECT 返回多个查询结果中相同的部分-----------------也就是数学中的交集

补充:

集合操作
在这里插入图片描述

数据如下所虚的相关代码:

--创建选课表
create table selectCourse
(
 s_num  int,
 c_num varchar(20),
 score numeric(3,1)   ,
 primary key (s_num,c_num),
 foreign key ( s_num) references student(s_num),
 foreign key (c_num) references course(c_num),
)
drop table selectCourse
--插入数据

insert into  selectCourse(s_num, c_num, score) 
                                    values(1815001,'C1',93),
									         (1815002,'C1',90),
											 (1815003,'C1',99),
											 (1815004,'C1',96),								
			                                 (1815001,'C2',80),
											 (1815001,'C3',90),
											 (1815001,'C4',78),
											 (1815001,'C5',88),
											 (1815001,'C6',98),
											 (1815005,'C3',88),							   
											 (1815004,'C3',98)
insert into  selectCourse(s_num, c_num ) 
                               			  values(1815005,'C4')
  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值