SQL全连接(FULL JOIN)详解及实践应用

创始人
2024-12-25 11:08:23
0 次浏览
0 评论

[SQL快速入门-36]SQLFULLJOIN:全连接

SQL的全连接(FULLJOIN)函数是一种将两个表(table1和table2)的所有记录合并的查询方法。
相当于LEFTJOIN和RIGHTJOIN的组合。
首先,LEFTJOIN遍历table1,然后RIGHTJOIN遍历table2,将RIGHTJOIN的结果添加到LEFTJOIN的结果之后,保留所有可能的重复行,即使其中一个表中没有匹配的记录。
执行FULLJOIN的基本语法遵循连接条件,例如table1.common_column1=table2.common_column2,用于确定两个表中要合并的行。
结果是两个表的完整并集,包含每个表的所有记录,包括可能的重复项。
例如,假设有一个客户表CUSTOMERS和一个订单表ORDERS,通过FULLJOIN连接,可以获取所有客户及其对应的订单信息,或者所有订单及其对应的客户信息,即使某个客户或订单没有另一个表中的相应记录也会显示出来。
如果需要过滤掉AMOUNT为NULL的记录,可以在查询中添加WHERE子句。
不过值得注意的是,并不是所有的数据库系统都支持FULLJOIN,比如MySQL。
这种情况下,可以使用UNIONALL将LEFTJOIN和RIGHTJOIN的结果组合起来,达到类似的效果。

leftjoin、rightjoin、innerjoin、fulljoin

在SQL中,四种主要的连接查询方法是innerjoin、leftjoin、rightjoin和fulljoin。
本质的区别不在于查询过程本身,而在于返回结果的完整性。
内部联接(INNERJOIN)仅返回两个表中完全匹配的记录。
例如,对于两个相关表,Orders通过Id_P字段连接到Persons。
运行以下内部联接查询:sqlSELECTp.LastName,p.FirstName,o.OrderNoFROMpersonspINNERJOINOrdersoONp.Id_P=o.Id_PORDERBYp.LastName结果集将仅包含两个表中的匹配记录。
即使右表(Orders)中没有匹配记录,左联接(LEFTJOIN)也会保留左表(Persons)中的所有行。
例如:sqlSELECTp.LastName,p.FirstName,o.OrderNoFROMpersonspLEFTJOINOrdersoONp.Id_P=o.Id_PORDERBYp.LastName即使Bush记录的Orders中没有匹配项,也会保留该行。
右连接(RIGHTJOIN)与左连接相反;它保留右表中的所有行。
sqlSELECTp.LastName,p.FirstName,o.OrderNoFROMpersonspRIGHTJOINOrdersoONp.Id_P=o.Id_PORDERBYp.LastName同样,尽管Orders表中的Id_P为65,但即使“Person”没有记录,它仍然会出现在结果中。
FULLJOIN同时返回左表和右表中所有不匹配的记录。
这结合了前两个连接方法sqlSELECTp.LastName,p.FirstName,o.OrderNoFROMpersonspFULLJOINOrd。
ersoONp.Id_P=o.Id_PORDERBYp.LastName上面是leftjoin、rightjoin、innerjoin和fulljoin的主要区别,只需根据您的需要选择您想要显示数据完整性的方式即可。

sql查询两个表相同的数据

SQL语句如下:

SELECT*fromTABLE1fulljoinTABLE2onTABLE1.xingming=TABLE2.xingmingwhereTABLE1.xingmingisnullorTABLE2.xingmingisnull

分析:

1.首先,获取两个表的并集。

注意:fulljoin:match,showmatch;同时将各表中不匹配的数据与空白数据行进行匹配显示。
这可以看作是左外连接和右外连接的组合。

由图可知,左边两列是TABLE1,右边两列是TABLE2。
前三个记录代表来自TABLE1和TABLE2的数据。

TABLE1中带有NULL条目的记录表明TABLE2中没有等效条目。
类似地,TABLE2中具有NULL条目的记录表明TABLE1中没有相同的条目。

接下来,您只需设置过滤条件即可过滤出您需要的记录。

2.设置过滤条件,得到结果

从结果中可以看出,表1中的赵二并没有相同的性命。
由表2记录可知。

表2中的刘刘与表1中的星鸣记录并不相同。

这个问题还有很多其他的解决方案,这里列出了更容易理解的解决方案。

扩展信息:

使用自连接

即使表在数据库中没有反射关系,也可以将表连接到自身。
例如,您可以使用自连接来查找居住在同一城市的成对作家。

与其他联接一样,自联接至少需要两个表。
不同之处在于,您不是向查询添加第二个表,而是添加同一表的第二个实例。
这允许您将表的第一个实例中的列与第二个实例中的相同列进行比较,从而允许将列中的值相互比较。
查询和视图设计器为表的第二个实例分配一个别名。

例如,如果您要创建自联接来查找居住在伯克利的所有作者对,您可以将表的第一个实例中的City列与第二个实例中的City列进行比较实例。
例子。
结果查询是:

选择Authors.au_fname、Authors.au_lname、authors1.au_fnameASExpr2、Authors1.au_lnameASExpr3

FROMauthorsINNERJOINAuthorsauthors1ONauthors.city=authors1.city

WHERE作者。
city='伯克利'

参考文献:

百度百科.fulljoin

热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...