转自:某一网友

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

cross join(交叉联接)执行两个表的笛卡尔积(就是把表A和表B的数据进行一个N*M的组合)。也就是说,它匹配一个表与另一个表中的每一行;我们不能通过使用ON子句在交叉联接指定谓词,虽然我们可以使用WHERE子句来实现相同的结果,这是交叉联接基本上是作为一个内部联接了。交叉联接相对于内部联接使用率较低,而且两个大表不应该进行交叉联接,因为这将导致一个非常昂贵的操作和一个非常大的结果集。

举例如下: 
--------------------------------------------
表A记录如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115

表B记录如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408

--------------------------------------------
1.left join
sql语句如下: 
select * from A
left join B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL

(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下: 
select * from A
right join B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408

(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下: 
select * from A
innerjoin B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

最新文章

  1. RootKit学习之 IDT Hook
  2. maven下载的jar文件出现invalid LOC header (bad signature)
  3. Android LayoutInflater&LayoutInflaterCompat源码解析
  4. java_method_删除事务回滚
  5. C#多线程实践——线程同步
  6. 恢复root用户目录,及~目录
  7. think in uml-关系
  8. OpenStack的基础原理
  9. 五种UML工具
  10. Django之url路由
  11. mfs windows客户端
  12. ssh: connect to host gitlab.alpha.com port 22: Network is unreachable
  13. 安装graphlab伤透了心,终于搞定了
  14. 2、在VM上的 CentOS 6.5 上安装mysql
  15. 【Flex】自定义组件-combobox组件
  16. Array 遍历数组
  17. leaflet入门(二)GeoJson
  18. sql 常用基础查询
  19. 在jsp页面动态添加数据库中的内容
  20. ”非常危险“的Linux命令

热门文章

  1. 018:InnoDB 存储引擎、表空间
  2. JAVA中的IO流介绍(2)
  3. Oracle重建临时表空间
  4. form中input是类型有哪些?
  5. R语言可视化学习笔记之添加p-value和显著性标记
  6. 关于微信支付URL未注册其中的坑THINKPHP5
  7. K老在拿图灵奖时的发言:Computer Programming as an Art
  8. C# Data Parse
  9. STL : List使用时应注意的问题
  10. Docker入门命令备份