ITPub博客

首页 > 数据库 > Oracle > 多个左连接对得到的数据有什么影响

多个左连接对得到的数据有什么影响

原创 Oracle 作者:studyingeveryday 时间:2014-10-08 19:07:43 0 删除 编辑
首先创建A,B,C三张表如下:

点击(此处)折叠或打开

  1. SQL> select * from A;

  2.         ID M
  3. ---------- ------
  4.          1 A
  5.          2 B
  6.          3 C
  7.          4 D
  8.          5 E

  9. SQL> select * from B;

  10.         ID N
  11. ---------- ------
  12.          1 A
  13.          2 B
  14.          3 C

  15. SQL> select * from C;

  16.         ID K
  17. ---------- ------
  18.          1 A
  19.          2 B
  20.          3 C
  21.          4 D
表进行连接后如下:

点击(此处)折叠或打开

  1. SQL> select A.*,B.*,C.* from A left join B on A.id = B.id join C on B.id = C.id;

  2.         ID M    ID N    ID K
  3. ---------- ------- ------- ------
  4.          1 A     1 A     1 A
  5.          2 B     2 B     2 B
  6.          3 C     3 C     3 C

  7. SQL> select A.*,B.*,C.* from A left join B on A.id = B.id left join C on B.id = C.id;

  8.         ID M    ID N    ID K
  9. ---------- ------- ------- ------
  10.          1 A     1 A     1 A
  11.          2 B     2 B     2 B
  12.          3 C     3 C     3 C
  13.          4 D
  14.          5 E

点击(此处)折叠或打开

  1. SQL> select A.*,B.*,C.* from A left join B on A.id = B.id left join C on A.id = C.id;

  2.         ID M    ID N    ID K
  3. ---------- ------- ------- -----
  4.          1 A     1 A     1 A
  5.          2 B     2 B     2 B
  6.          3 C     3 C     3 C
  7.          4 D     4 D
  8.          5 E

  9. SQL> select A.*,B.*,C.* from A left join B on A.id = B.id join C on A.id = C.id;

  10.         ID M    ID N    ID K
  11. ---------- ------- ------- ------
  12.          1 A     1 A     1 A
  13.          2 B     2 B     2 B
  14.          3 C     3 C     3 C
  15.          4 D     4 D

由上明显可以看出,如果A left join B 后,B left join C 和 B join C 是不相同的,B 和 C 的关联条件不同数据也不相同;
实验一:

点击(此处)折叠或打开

  1. SQL> select B.*,C.*,A.* from B left join C on B.id = C.id join A on C.id = A.id;

  2.         ID N    ID K    ID M
  3. ---------- ------- ------- ------
  4.          1 A     1 A     1 A
  5.          2 B     2 B     2 B
  6.          3 C     3 C     3 C

  7. SQL> select B.*,C.*,A.* from B left join C on B.id = C.id left join A on C.id = A.id;

  8.         ID N    ID K    ID M
  9. ---------- ------- ------- ------
  10.          1 A     1 A     1 A
  11.          2 B     2 B     2 B
  12.          3 C     3 C     3 C
实验一可以看出,在(数据量上B 实验二:

点击(此处)折叠或打开

  1. SQL> select C.*,B.*,A.* from C left join B on B.id = C.id join A on B.id = A.id;

  2.         ID K    ID N     ID M
  3. ---------- ------- -------- ------
  4.          1 A     1 A      1 A
  5.          2 B     2 B      2 B
  6.          3 C     3 C      3 C

  7. SQL> select C.*,B.*,A.* from C left join B on B.id = C.id left join A on B.id = A.id;

  8.         ID K    ID N     ID M
  9. ---------- ------- -------- ------
  10.          1 A     1 A      1 A
  11.          2 B     2 B      2 B
  12.          3 C     3 C      3 C
  13.          4 D
实验二可以看出,此时在(表数据多少A>B>C,你懂的!)后面一个 left join 和 join 效果并不相同。
综上如果要保证主表的数据量不变,最好都写上 left join,否则数据量会有很大差别的哦!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29668428/viewspace-1292041/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
努力学习,并分享工作中的知识,欢迎阅读一起进步!

注册时间:2014-05-20

  • 博文量
    18
  • 访问量
    68263