全联接(FULL JOIN)
FULL JOIN是LEFT OUTER JOIN和RIGHT OUTER JOIN的组合如图所示
图
下面的查询将给出包含所有图书和所有书柜位置的数据集其中一些图书位于书架的同一层上该查询与之前的查询在结构上是相同的只是这里使用了FULL JOIN查询
SELECT
loc_shelf
loc_position_left
bk_title
FROM location FULL JOIN books
ON locationfk_bk_loc = booksbk_id
由于现在从左表和右表都返回记录因此哪一个表作为左表哪一个表作为右边已经不再重要表列出了该查询结果中的变化
表 FULL JOIN查询返回的结果
在上面的例子中由于参照完整性约束(关于参照完整性的详细内容请参见第章)LOCATION表中不能存在不匹配的记录因此必须交换左表和右表的位置并应用不同类型的联接在很多情况下JOIN条件与主键/外键关系并不相同这时将获得包含来自左右两个表中匹配和不匹配记录的数据集
例如如果在一个列上联接两个表而该列既不是主键也不是外键(例如BK_ID = LOC_POSITION_LEFT)那么结果集中不匹配的LOCATION记录将包含大量的NULL值因为LOC_POSITION_LEFT仅具有个不同的值而BK_ID具有个值(这将返回个NULL值)尽管这是一个有效的SQL操作但是从逻辑的角度来看该查询并没有太大的意义用它来演示OUTERJOIN的概念则再好不过
现在已经不再需要这条多余的记录可以安全地将其从BOOKS表中删除
DELETE books WHERE bk_id=;
在JOIN的例子中关键字OUTER是可选的也可以简单地使用LEFTRIGHT或者FULL对于INNER JOIN也是如此RDBMS认为不带任何限定符的JOIN是INNER JOIN类型然而使用限定符是一个良好的SQL实践相对于不带限定符的JOIN来说它使SQL代码具有更好的可维护性
返回目录SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
数据仓库与数据挖掘培训视频教程