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

可伸缩(scale)

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

联结(JOIN)

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

 

创建联结

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

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

 

警告:完全限定列名

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

 

1. WHERE子句的重要性

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

 

笛卡儿积(cartesian product)

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

 

注意:不要忘了WHERE 子句

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

 

提示:叉联结

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

 

2. 内联结

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

 

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

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

 

3. 联结多个表

SQL 不限制一条SELECT 语句中可以联结的表的数目。创建联结的基本 规则也相同。首先列出所有表,然后定义表之间的关系。例如:

1 SELECT prod_name, vend_name, prod_price, quantity
2 FROM OrderItems, Products, Vendors
3 WHERE Products.vend_id = Vendors.vend_id
4 AND OrderItems.prod_id = Products.prod_id
5 AND order_num = 20007;

 

注意:性能考虑

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

提示:多做实验

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

分类: SQL,读书笔记
本文转自gyzhao博客园博客,原文链接:http://www.cnblogs.com/IPrograming/p/3297373.html,如需转载请自行联系原作者
上一篇:jquery实现图片上传前的预览


下一篇:代码安全边缘性问题