JOIN联结表

1. 联结

SQL 最强大的功能之一就是能在数据查询的执行中联结(join)表

联结是一种机制,用一条SELECT 语句中关联表

1.2 反例

结果为笛卡尔积

由没有联结条件的表关系返回的结果为笛卡尔积,检索出的行的数目将是第一个表的行数乘以第二个表中函数

SELECT vend_name,prod_name.prod_price
FROM Vendors,Products;

这里的返回结果并不是我们想要的,返回的数据用每个供应商匹配了每个产品,包括了供应商不正确的产品(即使供应商根本就没有的产品)

2.联结方式

2.1 内联结

内联结:两个表之间的相等测试

联结条件用特定的ON 子句而不是WHERE 子句给出

SELECT vend_name,prod_name,prod_price
FRM Vendors INNER JOIN Products 
ON Vendors.vend_id = Products.vend_id;

2.2 自联结(self-join)

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'

为什么用自联结而不用子查询

因为处理联结远比处理子查询快得多

2.3 自然联结

SELECT C.*,O.order_num,O.order_date,OI.prod_id
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';

2.4 外联结

内联结和外联结不同的是,外连接不包含没有关联的行

  • 左外连接

  • 右外连接

  • 全外连接

    全外连接包含两个不关联的行

SELECT Customers.cust_id,Orders,order_num
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id;

results matching ""

    No results matching ""