SQL全连接(FULL JOIN)详解及实践应用
[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
相关文章

MySQL Limit子句:高效分页与查...
2025-02-12 15:56:30
轻松掌握:MySQL版本查询与CMD命令...
2025-01-30 13:46:10
CentOS Linux下MySQL 5...
2024-12-16 15:09:00
Redis集群搭建指南:一主两从三哨兵实...
2025-04-02 07:23:10
解决SQL报表SSL/TLS信任问题:配...
2025-02-21 11:48:03
MySQL 8.0 触发器操作指南:Na...
2024-12-31 03:42:45
MySQL IP访问问题解决方案全解析
2025-01-22 16:17:58
MySQL计数查询优化:提升效率的技巧与...
2024-12-29 13:25:25
MySQL数据库表列修改指南:添加、删除...
2024-12-28 02:06:36