高级子查询 子查询(subquery)
知识点一: 多表连接之间的关系
例如 希望知道哪种种类的书籍已经借出去了。
select distinct c.parent_catagory, c.sub_category
from category c, bookshelf b, bookshelf_checkout bc
where c.category_name = b.category_name and b.title = bc.title
distinct 关键字 去重
此例中的3表关联的 之间的关系:要连接3表必须把其中两个表与第三个表连接起来。
1.CATEGORY 表连接到 BOOKSHELF表, 它们连接的结果再与 BOOKSHELF_CHECKOUT表连接。 DISTINCT字句去重
注意:并不是每个表都与其它每个表相连接。表之间的连接通常比被连接的表的数量少1.
知识点二: 相关子查询
a.where 子查询 where字句 可以包含SELECT语句的子查询, where 子查询的子句where 还可以嵌套
select distinct c.parent_categorty, c.sub_category
from categort c
where category_name in
(select category_name from bookshelf
where title in
(select title from bookshelf_checkout)
);
这个查询与知识点一中的查询结果一样
a: 子查询可以引用在其主查询中使用的表的列(即下例中 bookshelf 表中没有title列)
select title from bookshelf_author
where title in
(select title from bookshelf
where author_name = ‘setphena hay gould’)