期末复习题里面碰到了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被选择出来ÿ