联结表
联结
SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用 SQL的 SELECT 能执行的最重要的操作。
关系表
关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些共同的值互相关联(所以才叫关系数据库)。
为什么使用联结
可以联结多个表返回一组输出,联结在运行时关联表中正确的行。
创建联结
创建联结非常简单,指定要联结的所有表以及关联它们的方式即可。
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;
与以前的 SELECT 语句不一样,这条语句的 FROM子句列出了两个表: Vendors 和 Products 。它们就是这条 SELECT 语句联结的两个表的名字。这两个表用 WHERE 子句正确地联结, WHERE 子句指示 DBMS将 Vendors 表中的 vend_id 与 Products 表中的 vend_id 匹配起来。
WHERE 子句的重要性
由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
备注:返回笛卡儿积的联结,也称叉联结(cross join)。
内联结
目前为止使用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内联结(inner join)。
可以对这种联结使用稍微不同的语法,明确指定联结的类型。下面的 SELECT 语句返回与前面例子完全相同的数据:
SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
联结多个表
SQL 不限制一条 SELECT 语句中可以联结的表的数目。
SELECT prod_name, vend_name, prod_price, quantity
FROM OrderItems, Products, Vendors
WHERE Products.vend_id = Vendors.vend_id
AND OrderItems.prod_id = Products.prod_id
AND order_num = 20007;