SQL关于相关子查询与EXISTS的简单总结

期末复习题里面碰到了SQL查询有关 相关子查询 的内容,经过网上各种资料各种看,下面整理于此。

我们先看下面一道题。

建表格如下:


查询:给出被所有学生借阅过的图书类别(类别,catname),注意类别为c1的显示为“计算机”,其它类别显示“其他”。

答案:

select case catid when 'c1' then '计算机' else '其它' end as 类别,catname from category where not exists(
	select stuid from student where not exists(
		select stuid from borrow,book 
		where borrow.bookid=book.bookid and book.catid=category.catid
		and student.stuid=borrow.stuid
	)
)

要理解这个查询语句,我们考察以下几个问题:

       1. exists子查询的逻辑:

         各种文字版网上到处都有,这里就简单拿高级语言伪代码整理一下:

SELECT COLUMN
	FROM TABLE
	WHERE EXISTS(CONDITION);
等价于:

IF(CONDITION != NULL)
	THEN ANSWER += COLUMN
	ELSE CONTINUE;

即,当EXISTS子查询结果非空,则当前COLUMN被选择出来ÿ

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值