交叉连接: 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