Oracle命令 外部结合

oracle 外部结合命令 :理解(+)最重要的一点是,(+)总是放在信息匮乏的一边,这一边的记录会作为空值显示。

举例说明:

先预览下我们将结合的两个表:EMPLOYEE_CHECK 和 EMPLOYE_CHECK_TMP 。

@_1表EMPLOYEE_CHECK :

SQL> SELECT * FROM EMPLOYEE_CHECK;
 
EMP_ID    EMP_NAME             EMP_ST_ADDR                    EMP_ZIP EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_SALRAY
--------- -------------------- ------------------------------ ------- -------------------- -------------------- ----------- ----------
100000    ZOU QI LEI           BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            123456789         3500
100001    CAI FANG JIE         BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            18218429577 
100002    LU JING HUAN         FAN YU SESSION                 430060  YANG MEI VILLAGE     GUANG ZHOU           1397165903  
100003    WU JING XIN          HU BEI DIER SHIFAN XUEYUAN     430060  MING ZHU YUAN        WU HAN               187****235  
100004    LI WEI               QING SHAN GANG DU HUA YUAN     430060  XIAO QU              WU HAN               197****436


@_2表 EMPLOYEE_CHECK_TMP :


SQL> SELECT * FROM EMPLOYEE_CHECK_TMP;
 
EMP_ID    EMP_NAME             EMP_ST_ADDR                    EMP_ZIP EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_SALRAY
--------- -------------------- ------------------------------ ------- -------------------- -------------------- ----------- ----------
100001    CAI FANG JIE         BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            18218429577 
100003    WU JING XIN          HU BEI DIER SHIFAN XUEYUAN     430060  MING ZHU YUAN        SHEN ZHEN            187****235  
100005    DING LING            HAN KOU TAI BEI LU             430060  TIAN MEN DUN NEARBY  WU HAN               137***4256        2000


现在结合这两个表,用 '+' 进行结合查询:

SQL> SELECT P.EMP_NAME, P.EMP_ADDR, P.EMP_CITY, P.EMP_PHONE, T.EMP_ZIP FROM EMPLOYEE_CHECK P, EMPLOYEE_CHECK_TMP T WHERE P.EMP_ID = T.EMP_ID(+);
 
EMP_NAME             EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_ZIP
-------------------- -------------------- -------------------- ----------- -------
ZOU QI LEI           YANG MEI VILLAGE     SHEN ZHEN            123456789                         --row_1
CAI FANG JIE         YANG MEI VILLAGE     SHEN ZHEN            18218429577 518000               
LU JING HUAN         YANG MEI VILLAGE     GUANG ZHOU           1397165903                       --row_3
WU JING XIN          MING ZHU YUAN        WU HAN               187****235  430060
LI WEI               XIAO QU              WU HAN               197****436                       -row_5
现在观察两个结合查询的表,红色标注主表(P),查询字段为:
 P.EMP_NAME, P.EMP_ADDR, P.EMP_CITY, P.EMP_PHONE
蓝色标注临时表(T),查询字段为:

T.EMP_ZIP

当 '+'(结合标志) 附属在T表上时,除了返回满足查询条件WHERE P.EMP_ID=T.EMP_ID的信息外,同时还会返回P对应的查询字段: row_1, row_3, row_5。


反过来查询,让‘+’标志和主表P结合:

SQL> SELECT P.EMP_NAME, P.EMP_ADDR, P.EMP_CITY, P.EMP_PHONE, T.EMP_ZIP FROM EMPLOYEE_CHECK P, EMPLOYEE_CHECK_TMP T WHERE P.EMP_ID(+) = T.EMP_ID;
 
EMP_NAME             EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_ZIP
-------------------- -------------------- -------------------- ----------- -------
CAI FANG JIE         YANG MEI VILLAGE     SHEN ZHEN            18218429577 518000
WU JING XIN          MING ZHU YUAN        WU HAN               187****235  430060
                                                                           430060
--可以看到除了返回满足条件的查询信息外,还返回了T表的其他字段,当然由于T表的查询字段只有EMP_ZIP字段,所以其他字段都为NULL。



更为形象的查询结构如: FROM T RIGHT OUTER JOIN P ON T.EMP_ID=P.EMP_ID ;---@_1

SQL> SELECT P.EMP_NAME, P.EMP_ADDR, P.EMP_CITY, P.EMP_PHONE, T.EMP_ZIP FROM EMPLOYEE_CHECK P RIGHT OUTER JOIN EMPLOYEE_CHECK_TMP T ON P.EMP_ID = T.EMP_ID;
 
EMP_NAME             EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_ZIP
-------------------- -------------------- -------------------- ----------- -------
CAI FANG JIE         YANG MEI VILLAGE     SHEN ZHEN            18218429577 518000
WU JING XIN          MING ZHU YUAN        WU HAN               187****235  430060
                                                                           430060
当使用RIGHT OUTER JOIN 时,返回右边的表即:T 表,除返回满足查询条件之外的,还包括T表其他的所有字段。

更为形象的查询结构如: FROM T LEFT  OUTER JOIN P ON T.EMP_ID=P.EMP_ID ;---@_2

SQL> SELECT P.EMP_NAME, P.EMP_ADDR, P.EMP_CITY, P.EMP_PHONE, T.EMP_ZIP FROM EMPLOYEE_CHECK P LEFT OUTER JOIN EMPLOYEE_CHECK_TMP T ON P.EMP_ID = T.EMP_ID;
 
EMP_NAME             EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_ZIP
-------------------- -------------------- -------------------- ----------- -------
ZOU QI LEI           YANG MEI VILLAGE     SHEN ZHEN            123456789   
CAI FANG JIE         YANG MEI VILLAGE     SHEN ZHEN            18218429577 518000
LU JING HUAN         YANG MEI VILLAGE     GUANG ZHOU           1397165903  
WU JING XIN          MING ZHU YUAN        WU HAN               187****235  430060
LI WEI               XIAO QU              WU HAN               197****436  
但是用LEFT OUTER JOIN 时,返回左边的表即:P表,除返回满足查询条件之外的,还包括P表的其他所有字段。


当然还有 FROM  ALL OUTER JOIN .




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值