联结
自联结(self-join)
通过子查询实现这样的功能,
select cust_id, cust_name, cust_contact
from Customers
where cust_name = (select cust_name
from Customers
where cust_contact = 'Jim Jones');
同样的,通过自联结可以实现同样的功能。
select c1.cust_id, c1.cust_name, c1.cust_contact
from Customers as c1, Customers as c2
where c1.cust_name = c2.cust_name
and c2.cust_contact = 'Jim Jones';
Remark:自联结就是一张表自己与自己的内联结。
自然联结(natural join)
无论何时对表进行联结,应该至少有一列不止出现在一个表中(被联结的列)。标准的联结(前面介绍的内联结)返回所有数据,相同的列甚至多次出现。自然联结排除多次出现,使每一列只返回一次。
自然联结要求你只能选择那些唯一的列,一般通过对一个表使用通配符(select *),而对其他表的列使用明确的字集来完成。
select C.*, O.order_num, O.order_date,
OI.prod_id, OI.quantity, OI.item_price
from Customers as C, Orders as O, OrderItems as OI
where C.cust_id = O.cust_id
and OI.order_num = O.order_num
and prod_id = 'RGAN01';
外联结(outer join)
许多联结将一个表中的行与另一个表中的行相关联,但有时候需要包含没有关联行的那些行。
下面就是内联结和外联结在结果上表现的不同:
WX20190524-184620@2x.png WX20190524-185412@2x.png WX20190524-185735@2x.png WX20190524-190716@2x.png WX20190524-191009@2x.png WX20190524-224245@2x.png
网友评论