文章目录

  • 1. 创建联结
  • 2. 内联结
  • 3. 联结多个表


1. 创建联结

-- 创建联结
SELECT
	vend_name,
	prod_name,
	prod_price 
FROM
	Vendors,
	Products 
WHERE
	Vendors.vend_id = Products.vend_id;

posgresql级联表后索引是否生效_posgresql级联表后索引是否生效

笛卡儿积(cartesian product)
由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目
将是第一个表中的行数乘以第二个表中的行数。

SELECT
	vend_name,
	prod_name,
	prod_price 
FROM
	Vendors,
	Products;

posgresql级联表后索引是否生效_联结表_02

提示:叉联结
有时,返回笛卡儿积的联结,也称叉联结(cross join)。

2. 内联结

-- 内联结
SELECT
	vend_name,
	prod_name,
	prod_price 
FROM
	Vendors INNER JOIN Products 
	ON Vendors.vend_id = Products.vend_id;

posgresql级联表后索引是否生效_JOIN_03

说明:“正确的”语法
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;

posgresql级联表后索引是否生效_SQL_04

注意:性能考虑
DBMS 在运行时关联指定的每个表,以处理联结。这种处理可能非常
耗费资源,因此应该注意,不要联结不必要的表。联结的表越多,性
能下降越厉害。

注意:联结中表的最大数目
虽然SQL 本身不限制每个联结约束中表的数目,但实际上许多DBMS
都有限制。请参阅具体的DBMS 文档以了解其限制。