文章目录
- 1. 创建联结
- 2. 内联结
- 3. 联结多个表
1. 创建联结
-- 创建联结
SELECT
vend_name,
prod_name,
prod_price
FROM
Vendors,
Products
WHERE
Vendors.vend_id = Products.vend_id;
笛卡儿积(cartesian product)
由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目
将是第一个表中的行数乘以第二个表中的行数。
SELECT
vend_name,
prod_name,
prod_price
FROM
Vendors,
Products;
提示:叉联结
有时,返回笛卡儿积的联结,也称叉联结(cross join)。
2. 内联结
-- 内联结
SELECT
vend_name,
prod_name,
prod_price
FROM
Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
说明:“正确的”语法
ANSI SQL 规范首选INNER JOIN 语法,之前使用的是简单的等值语
法。其实,SQL 语言纯正论者是用鄙视的眼光看待简单语法的。这就
是说,DBMS 的确支持简单格式和标准格式,我建议你要理解这两种
格式,具体使用就看你用哪个更顺手了。
3. 联结多个表
-- 联结多个表
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;
注意:性能考虑
DBMS 在运行时关联指定的每个表,以处理联结。这种处理可能非常
耗费资源,因此应该注意,不要联结不必要的表。联结的表越多,性
能下降越厉害。注意:联结中表的最大数目
虽然SQL 本身不限制每个联结约束中表的数目,但实际上许多DBMS
都有限制。请参阅具体的DBMS 文档以了解其限制。