左联接(LEFT OUTER JOIN)
虽然先前没有说明但总有两个表相互联接并符合我们人类的观察方式我们可以将其想象成在左边或者在右边的联接而无须考虑数据库将其保存在何处以及如何保存表中的数据OUTERJOIN的想法正是来源于这种观念例如LEFTOUTER JOIN用于这样的情形我们想看到左表中感兴趣的全部记录列表以及右表中的一些项所具有的额外特性如果右表中没有对应数据行则对于左表中不匹配的行在右侧表中填充NULL值图 描述了LEFT OUTER JOIN的概念
图
例如假定列出书柜中所有的书架位置并列出书柜的书架中已经具有的图书但是现在需要列出所有图书甚至包括哪些还没有放置到书架中的图书由于所有图书在书柜中都已经各自具有一个正确的位置因此在BOOKS表中必须创建不匹配的行下面将创建一个BK_ID=的新行
INSERT INTO books (bk_id bk_title)
VALUES (LEFT JOIN EXAMPLE)
其余的列将被填充为默认值NULL
现在可以使用之前曾用过的关于图书放置位置的查询只需要将JOIN类型从INNER JOIN修改为LEFT OUTER JOIN:
SELECT
bk_title
loc_shelf
loc_position_left
FROM books LEFT OUTER JOIN location
ON locationfk_bk_loc = booksbk_id
该查询从BOOKS表中请求所有记录另外还包含LOCATION表中不匹配的数据行刚才新插入的记录(BOOKS表中的最后一条记录)在书架上并没有对应的位置因此在返回的结果集中将它的位置信息填充为NULL值如果以INNER JOIN方式来运行该查询由于第条记录没有匹配的项因此INNER JOIN将简单地将其排除在结果集之外表列出了该LEFT OUTERJOIN查询的结果
表 LEFT OUTER JOIN查询返回的结果
现在至少我们知道了哪些图书还没有放置到书柜中如果使用INNER JOIN的话该图书的记录就不会显示出来
返回目录SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
数据仓库与数据挖掘培训视频教程