SQL篇-IN和EXISTS的使用

查询所有选修了“C1”课程的学生名

1.普通IN的SQL查询

SELECT 姓名
FROM 学生表
WHERE 学号 IN (SELECT 学号 FROM 选课表 WHERE 课程号 = 'C1');

2.带EXISTS的SQL查询

SELECT 姓名
FROM 学生表
WHERE EXISTS
(
SELECT *
FROM 选课表
WHERE 学生表.学号 = 选课表.学号 AND 课程号 = 'C1');

相关子查询执行过程:先在外层查询中取“学生表”的第一行记录,用该记录的相关的属性值(在内层WHERE子句中给定的)处理内层查询,若外层的WHERE子句返回“TRUE”值,则这条记录放入结果表中。然后再取下一行记录;重复上述过程直到外层表的记录全部遍历一次为止。

EXISTS语句不关心子查询的具体内容,因此用"SELECT  * ","EXISTS+ 子查询"用来判断该子查询是否返回记录。

  • EXISTS:若子查询的结果集非空时,返回"TRUE";若子查询的结果集为空时,返回"FALSE";

  • NOT EXISTS :若子查询结果为空,返回"TRUE";若子查询的结果集非空时,返回 "FALSE"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值