如何创建高级连接SQL作关联

  连接:利用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






  


你可能感兴趣的:(SQL中几种重要的连接)