学习SQL必知必会的一些记录(二)

联结

自联结(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)

许多联结将一个表中的行与另一个表中的行相关联,但有时候需要包含没有关联行的那些行。

下面就是内联结和外联结在结果上表现的不同:


你可能感兴趣的:(学习SQL必知必会的一些记录(二))