Oracle的外部结合命令oracle外部结合命令:理解(+)最重要的一点是,(+)总是放在信息匮乏的一边,这一边的记录会作为空值显示。举例说明:先预览下我们将结合的两个表:EMPLOYEE_CHECK和EMPLOYE_CH...SyntaxHighlighter.all();
oracle 外部结合命令 :理解(+)最重要的一点是,(+)总是放在信息匮乏的一边,这一边的记录会作为空值显示。
举例说明:
先预览下我们将结合的两个表:EMPLOYEE_CHECK 和 EMPLOYE_CHECK_TMP 。
@_1表EMPLOYEE_CHECK : www.2cto.com
[sql]
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 www.2cto.com
100004 LI WEI QING SHAN GANG DU HUA YUAN 430060 XIAO QU WU HAN 197****436
@_2表EMPLOYEE_CHECK_TMP :
[sql]
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]
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(+);
www.2cto.com
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),查询字段为:
[sql]
P.EMP_NAME, P.EMP_ADDR, P.EMP_CITY, P.EMP_PHONE
蓝色标注临时表(T),查询字段为:
T.EMP_ZIP www.2cto.com
当 '+'(结合标志) 附属在T表上时,除了返回满足查询条件WHERE P.EMP_ID=T.EMP_ID的信息外,同时还会返回P对应的查询字段: row_1, row_3, row_5。
反过来查询,让‘+’标志和主表P结合:
[sql]
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]
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; www.2cto.com
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]
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; www.2cto.com
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 .
作者 Free_Program_1314