Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74689
  • 博文数量: 38
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-13 15:19
文章分类

全部博文(38)

文章存档

2009年(12)

2008年(26)

我的朋友

分类: Oracle

2009-06-10 11:42:41

                                                  by:balsilliy

Join (nature ,left OUTER JOIN,right OUTER JOIN,FULL OUTER JOIN)

条件JOIN的可能类型是∶
INNER JOIN
对于 T1 的每一行 R1,生成的连接表都有一行对应 T2 中的 每一个满足和 R1 的连接条件的行.

LEFT OUTER JOIN
首先,执行一次内连接.然后,为 T1 里那些和 T2 里任何一行都不满足连接条件的行返回一个连接行,
同时该连接行里对应 T2 的列用空值补齐.
因此, 生成的连接表里无条件地包含来自 T1 里的每一行至少 一个副本.

RIGHT OUTER JOIN
首先,执行一次内连接.然后,为 T2 里那些和 T1 里任何一行都不满足连接条件的行返回一个连接行,
同时该连接行里对应 T1 的列用空值补齐.
因此, 生成的连接表里无条件地包含来自 T2 里的每一行.

FULL OUTER JOIN
首先,执行一次内连接.然后,为 T1 里那些和 T2 里任何一行都不满足连接条件的行返回一个连接行,
同时该连接行里对应 T2 的列用空值补齐. 同样,为 T2 里那些和 T1 里的任何行都不满足连接条件的 行返回一个连接行,该行里对应 T1 的列用空值补齐.
如果 T1 和 T2 有一个或者都是可以连接(join)的表, 那么所有类型的连接都可以串在一起或嵌套在一起.
你可以在JOIN子句周围使用圆括弧来控制连接顺序, 如果没有圆括弧,那么JOIN子句是从左向右嵌套的.

SQL> select * from t1;

        C1 C2
---------- ------
         1 a
         2 b
         3 c

SQL> select * from t2;

        C1 C2
---------- ------
         1 xxx
         3 yyy
         5 zzz
SQL> select * from t1 cross join t2;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 a               1 xxx
         1 a               3 yyy
         1 a               5 zzz
         2 b               1 xxx
         2 b               3 yyy
         2 b               5 zzz
         3 c               1 xxx
         3 c               3 yyy
         3 c               5 zzz
        
SQL> select * from t1 inner join t2 on t1.c1=t2.c1;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 a               1 xxx
         3 c               3 yyy
        
SQL> select * from t1 inner join t2 using(c1);

        C1 C2     C2
---------- ------ ------
         1 a      xxx
         3 c      yyy

SQL> select * from t1 left join t2 on t1.c1=t2.c1;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 a               1 xxx
         3 c               3 yyy
         2 b

SQL> select * from t2 left join t1 on t2.c1=t1.c1;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 xxx             1 a
         3 yyy             3 c
         5 zzz

SQL> select * from t1 right join t2 on t1.c1=t2.c1;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 a               1 xxx
         3 c               3 yyy
                           5 zzz

SQL> select * from t2 right join t1 on t2.c1=t1.c1;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 xxx             1 a
         3 yyy             3 c
                           2 b

SQL> select * from t1 full join t2 on t1.c1=t2.c1;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 a               1 xxx
         3 c               3 yyy
         2 b
                           5 zzz

SQL> select * from t2 full join t1 on t1.c1=t2.c1;

        C1 C2             C1 C2
---------- ------ ---------- ------
         1 xxx             1 a
         3 yyy             3 c
         5 zzz
                           2 b

阅读(1889) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~