本章的主题是“联结表”,主要介绍什么是联结,为什么使用联结,如何编写使用联结的SELECT语句。
概念
- 由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。笛卡尔积又称为Cross Join
警告
- 要保证所有的联结都有WHERE子句,否则DBMS将返回比想要的数据多得多的数据。
- DBMS在运行时关联指定的每个表,以处理联结。这种处理可能非常耗费资源,因此应该注意,不要联结不必要的表。联结的表越多,性能下降越厉害。
联结
SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的极为重要的部分。
关系表
相同的数据出现多次绝不是一件好事,这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些共同的值互相关联。
笛卡尔积
使用下面的SQL命令:
SELECT vend_name,prod_name,prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;
内连接
目前为止使用的联结称为等值联结,它基于两个表之间的相等测试。这种联结也称为内联结。可以使用另外一种语法:
SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;