连接:利用SQL的select能执行的最重要的操作
为何使用连接:分解数据为多个表能更有效的存储,更方便的处理且具有更大的可伸缩性。
连接是一种机制,用来在一条select语句中关联表,这个关联而查询出来的表并不是现实存在的表
规定要连接的所有表以及如何关联即可
例: select vend_name,prod_name,prod_price
from vendors,products where
vendors.vend_id=products.vend_id;
通过id来关联供应商表vendors与商品表products来查出对应的字段值
而如果:select vend_name,prod_name,prod_price
from vendors,products;
不通过关联查询出的是所有的数据,也包括了供应商不正确的商品,实际上就是有的供应商压根儿就没有商品。
内连接:基于两个表之间的相等测试,称为内链接
例:select vend_name,prod_name,prod_price from vendors inner join products on
vendors.vend_id=products.vend_id
两表之间的关系是from子句的组成部分,以inner join 指定,连接条件用特定的on子句而不是where子句给出,传递给on的实际条件和传递给where的相同。
连接多个表:因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';
主要显示编号为20007的订单中的物品,订单物品存储在orderitems表中,每个产品按其传品id存储,它引用products表中的产品,而这些产品通过供应商id连接到vendors表中相应的供应商,供应商id存储在每个产品的记录中,这里的from 子句列出了三个表,where子句定义了这两个连接条件,第三个连接条件是用来过滤出订单20007中的物品。
注:dbms在运行时,由于关联的表越多,性能就会越低,因此不要关联不必要的表。
自连接:http://baike.baidu.com/link?url=lDd7a-OIyHdM4U--hwghMzZVevrzyucEjT3COu3IW-0hpSZWez80kU9Li3HbrwHyGQxFsPO7Y0rBHsd_siNi1a