多表联查

交叉连接: cross join  (不太用)

内连接:    [inner] join  (最常用)

外连接:  左外连接: left [outer] join

      右外连接: right [outer] join

      完全连接: full [outer] join

自连接: self join 

内连接:通过比较被连接的表所共同拥有的字段,把多个表连接起来。

  语法:select 列名列表 from 表名1 [inner] join 表名2 on 表名1.列名 <比较运算符> 表名2.列名

列出购买产品的顾客信息:select buyer_name, sales.buyer_id, qty from buyers [inner] join sales on buyers.buyer_id = sales.buyer_id

等价于:select buyer_name, sales.buyer_id, qty from buyers, sales where buyers.buyer_id = sales.buyer_id

左外连接:除了满足连接条件的行,还包括左表中的所有剩余行,但不包括右表中的不匹配行。

查询所有客户的购买情况:select buyer_name, sales.buyer_id, qty from buyers left [outer] join sales on buyers.buyer_id = sales.buyer_id

右外连接:除了满足连接条件的行,还包括右表中的所有剩余行,但不包括左表中的不匹配行。

eg: select buyer_name, sales.buyer_id, qty from buyers right [outer] join sales on buyers.buyer_id = sales.buyer_id

交叉连接:从连接的表中返回所有可能的记录组合。(在规范化的数据库中,很少使用交叉连接;可以为数据库生成测试数据;为清单及企        

     业模板生产所有可能的组合数据)


eg: select buyer_name, qty from buyers cross join sales

自连接:使用自连接,可以查询一个表中各记录之间的关系

使用自连接应注意:引用表的两份副本时,必须使用表的别名

         生成自连接时,表中每一行都和自身比较一下,并生成重复的记录,使用where子句来消除这些重复记录。

显示购买相同产品的客户列表: select a.buyer_id buyer1, a.prod_id, b.buyer_id buyer2 from sales a self join sales b on a.prod_id = b.prod_id where a.buyer_id buyer1 > b.buyer_id buyer2

 

 

原文地址:https://www.cnblogs.com/gogojiayou/p/3386367.html