您的位置:首页 > 数据库

SQL 必知必会·笔记<10>联结表

2013-09-02 19:39 225 查看
可伸缩(scale)


能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序 称为可伸缩性好(scale well)。


联结(JOIN)


联结(JOIN)是一种机制,用来在一条SELECT 语句中关联表,因此称为联结



创建联结

创建联结非常简单,指定要联结的所有表以及关联它们的方式即可:

SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;


警告:完全限定列名


在引用的列可能出现歧义时,必须使用完全限定 列名(用一个句点分隔表名和列名)。如果引用一个没有用表名限制的 具有歧义的列名,大多数DBMS 会返回错误。



1. WHERE子句的重要性

使用WHERE 子句建立联结关系似乎有点奇怪,但实际上是有个很充分的 理由的。要记住,在一条SELECT 语句中联结几个表时,相应的关系是 在运行中构造的

笛卡儿积(cartesian product)

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

注意:不要忘了WHERE 子句


要保证所有联结都有WHERE 子句,否则DBMS 将返回比想要的数据多 得多的数据。同理,要保证WHERE 子句的正确性。不正确的过滤条件 会导致DBMS 返回不正确的数据。



提示:叉联结

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

2. 内联结

基于两个表之间的相等测试的等值联接。这种联结也称为内联结(inner join

和之前简单等值语法相同的内联查询:

SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;


3. 联结多个表

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;


注意:性能考虑


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


提示:多做实验


可以看到,执行任一给定的SQL 操作一般不止一种方法。很少有绝对 正确或绝对错误的方法。性能可能会受操作类型、所使用的DBMS、 表中数据量、是否存在索引或键等条件的影响。因此,有必要试验不 同的选择机制,找出最适合具体情况的方法。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: