关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些常用的值,即关系设计中的关系互相关联。关系数据库的可伸缩性比非关系数据库要好的多。
但是数据存储在多个表中,如果想使用单个SELECT语句检索出数据,则必须使用联结。联结不是物理实体,它在实际的数据库中不存在。
完全限定列名:在引用的列可能出现二义性时,必须使用完全限定列名(用一个句点分隔的表名和列名)。如果引用一个没有用表名限制的具有二义性的列名,大多数DBMS将返回错误。
WHERE子句的重要性:WHERE子句作为过滤条件,它只包含那些匹配给定条件的行。没有WHERE子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配对在一起。
- 叉联结(CROSS JOIN)
叉联结的例子:
SELECT vend_name,prod_name,prod_price
FROM Vendors,Products;
应该保证所有联结都有WHERE子句!不然就是叉联结了。
- 内部联结,等值联结(INNER JOIN)
等值联结称为内部联结,它基于两个表之间的相等测试。
ANSI SQL规范首选INNER JOIN语法。
例:
SELECT vend_name,prod_name,prod_price
FROM Vendors INNER JOIN Products
on Vendors.vend_id = Products.vend_id;
内部联结也可以使用下面的方式实现:
例:
SELECT vend_name,prod_name,prod_price
FROM Vendors,Products
WHERE Vendors.vend_id = Products.vend_id;
DBMS在运行时关联指定的每个表以处理联结,但是是非常耗资源的,因此不要联结不必要的表,联结的表越多,性能下降越厉害。