数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL实战新手入门:全联接(FULL JOIN)


发布日期:2021年09月24日
 
SQL实战新手入门:全联接(FULL JOIN)

全联接(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

数据仓库与数据挖掘培训视频教程

上一篇:SQL实战新手入门:右联接(RIGHT OUTER JOIN)

下一篇:SQL实战新手入门:自联接-在表内部查找答案