昨天我将表与表的联接给大家开了一个头,今天深度了解一下除了基本的JOIN (inner join)以外的另外三种形式。
这3种形式分别为:
1. LEFT JOIN
2. RIGHT JOIN
3. FULL JOIN
我先把原始表展示出来:
表一:Persons
表二:Orders
A. 左联接
“表一”为左;“表二”为右。
左链接的意思为:表一的所有记录都要进行匹配,若匹配不上也列出来。
语句格式:
SELECTcolumn_name(s)
FROMtable_name1
LEFT JOINtable_name2
ONtable_name1. column_name = table_name2.column_name
[标注:FROM 后面跟着的表名为“左”]
实例说明:
列出表一中所有人的订单号,若没有订单号显示空值。
实现语句:
SELECTPersons.LastName, Persons.FirstName, Orders. OrderNo
FROMPersons
LEFT JOINOrders
ONPersons.Id_p = Orders.Id_P
可以发现,Bush George是没有对应订单号的,但是由于是左联接,表一的所有记录都要进行显示,故终止结果显示如下:
B. 右联接
右联接的意思与左联接逻辑是一样的,就是表二的所有记录都要进行匹配,若没有匹配记录也要罗列出来
语句格式:
SELECTcolumn_name(s)
FROMtable_name1
RIGHT JOINtable_name2
ONtable_name1.column_name = table_name2. column_name
实例说明:
将所有订单号列出,并找到这些订单号所对应的购买人
实现语句:
SELECTPersons.LastName, Persons.FirstName, Orders.OrderNo
FROMPersons
RIGHT JOINOrders
ONPersons. Id_P = Orders. Id_P
可以发现,34764这个订单号是没有对应购买人的,但是语句执行了右联接,即使没有找到匹配的结果,也要将该条记录显示出来的。
执行结果如下:
C. 全联接
有了左右联接的理解,全联接就更容易些,就是两个表全部做匹配,左表有匹配不上的列出来,右表有匹配不上的也列出来。检验的标准为,结果集的行数是两个表的交集。
语句格式:
SELECTcolumn_name(s)
FROMtable_name1
FULL JOINtable_name2
ONtable_name1. column_name = table_name2.column_name
实例说明:
列出数据库中所有购买者及订单号明细。(含异常订单)
实现语句:
SELECTPersons. LastName, Persons.FirstName, Orders. OrderNo
FROMPersons
FULL JOINOrders
ONPersons.Id_P=Orders.Id_P
执行结果如下:
今天的分享就这些吧,如果你有不明白的地方希望和我沟通欢迎留言、评论。我上学时数据库的成绩还是不错的,所以目前为止我还没有遇到难题。c u nextime.
嘚瑟10秒钟,白白。
领取专属 10元无门槛券
私享最新 技术干货