知识大全 Oracle外连接和“+”号的用法
Posted 条件
篇首语:须知少年凌云志,曾许人间第一流。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle外连接和“+”号的用法相关的知识,希望对你有一定的参考价值。
Oracle外连接和“+”号的用法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
对于外连接 Oracle中可以使用 (+) 来表示 i可以使用LEFT/RIGHT/FULL OUTER JOIN 下面将配合实例一一介绍
LEFT OUTER JOIN 左外关联
SELECT e last_name e department_id d department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e department_id = d department_id);
等价于
SELECT e last_name e department_id d department_name
FROM employees e departments d
WHERE e department_id=d department_id(+);
结果为 所有员工及对应部门的记录 包括没有对应部门编号department_id的员工记录
RIGHT OUTER JOIN 右外关联
SELECT e last_name e department_id d department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e department_id = d department_id);
等价于
SELECT e last_name e department_id d department_name
FROM employees e departments d
WHERE e department_id(+)=d department_id;
结果为 所有员工及对应部门的记录 包括没有任何员工的部门记录
FULL OUTER JOIN 全外关联
SELECT e last_name e department_id d department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e department_id = d department_id);
结果为 所有员工及对应部门的记录 包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录
外连接:
除了显示匹配相等连接条件的数据外 还可以显示某一个表中无法匹配相等连接条件的记录!
) 左条件(+) = 右条件
左条件所在的表必须严格进行相等连接条件的匹配 而右条件所在的表除了匹配相等连接条件外 还可以显示无法匹配连接条件的数据!
也称为右外连接
可以用下列语句取代:
SELECT FROM 表 RIGHT OUTER JOIN 表 ON 条件;
) 左条件 = 右条件(+)
右条件所在的表必须严格进行相等连接条件的匹配 而左条件所在的表除了匹配相等连接条件外 还可以显示无法匹配连接条件的数据!
也称为左外连接
可以用下列语句取代:
SELECT FROM 表 LEFT OUTER JOIN 表 ON 条件;
REM 除了相等连接之外 显示没有员工的部门信息
SELECT * FROM EMP DEPT WHERE EMP DEPTNO(+) = DEPT DEPTNO;
SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP DEPTNO = DEPT DEPTNO;
REM 除了相等连接之外 显示没有部门的员工信息
SELECT * FROM EMP DEPT WHERE EMP DEPTNO = DEPT DEPTNO(+);
SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP DEPTNO = DEPT DEPTNO;
Oracle 建议你用在From语句后用Outer Join语法 而不是Oracle的Join操作符(+) 而且(+)是要受下面的规则限制的 但Outer Join语法则不受的~~
)你不可以在查询块中使用(+) 当它同时包含 join的from语句中
)(+)只是在where语句中 并且只能对应一个表或视图的一行字段
)如果A和B做联接时有多个条件 那么(+)必须完善所有的匹配条件
如果没有 oracle不会警告你~只是结果自然不同的
)不可以在作出一个表外查询 另张表内查询的(+)联接操作~~
)不可以用(+)外联接到自己 当然Self Join是可以的
)含(+)的Where后的注意
OR不可用
IN不可用
子查询不可用
以下给些个例子
SQL code
SQL> desc part
Name Null? Type
PART_ID NOT NULL VARCHAR ( )
SUPPLIER_ID VARCHAR ( )
SQL> select * from part;
PART SUPP
P S
P S
P
P
SQL> desc supplier
Name Null? Type
SUPPLIER_ID NOT NULL VARCHAR ( )
SUPPLIER_NAME NOT NULL VARCHAR ( )
SQL> select * from supplier;
SUPP SUPPLIER_NAME
S Supplier#
S Supplier#
S Supplier#
SQL> select p part_id s supplier_name
from part p supplier s
where p supplier_id = s supplier_id (+);
PART SUPPLIER_NAME
P Supplier#
P Supplier#
P
P
(+)是单向的
SQL> select p part_id s supplier_name
from part p supplier s
where p supplier_id (+) = s supplier_id (+);
where p supplier_id (+) = s supplier_id (+)
*
ERROR at line :
ORA : a predicate may reference only one outer joined table
实现Full Join的方法
SQL> select p part_id s supplier_name
from part p supplier s
where p supplier_id = s supplier_id (+)
union
select p part_id s supplier_name
from part p supplier s
where p supplier_id (+) = s supplier_id;
PART SUPPLIER_NAME
P Supplier#
P Supplier#
P
P
Supplier#
现在的语法
SQL> select p part_id s supplier_name
from part p full outer join supplier s
on p supplier_id = s supplier_id;
PART SUPPLIER_NAME
P Supplier#
P Supplier#
P
P
Supplier#
另外的EG
SQL code
SQL> select * from testa;
ID NAME ADDR AGE
电子 南京
物理 北京
物理 河北
电脑 上海
电子 北京
物理 芜湖
艺术 上海
歌剧 苏州
沈亮 上海
已选择 行
SQL> select * from testb;
ID ADDR
上海
北京
上海
合肥
匹配完全
select testa id testa addr from testa testb where testa id(+)=testb id and
testa addr(+)=testb addr;
ID ADDR
上海
现在的Outer Join方法是Oracle i时开始引用的 ANSI标准的联接语法 现在的则比较直观 简单
cha138/Article/program/Oracle/201311/17460相关参考
Oracle共享连接和专用连接方式比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在专用连接方式
知识大全 连接oracle的总结(关于tnsname和监听)
该文是我连接oracle的总结特别适合于程序开发人员与oracle菜鸟 如何配置才能使客户端连到数据库要使一个客户端机器能连接oracle数据库需要在客户端机器上安装oracle
在专用连接方式中每一个连接到数据库服务器的客户端请求服务器会和客户端之间建立起连接这个连接用于专门处理该客户端的所有请求直到用户主动断开连接或网络出现中断在连接处于空闲时后台进程PMON会每隔一段时间
Oracle版本号的格式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 例如oracle
知识大全 Oracle Designer对Oracle的连接
OracleDesigner对Oracle的连接 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ORACLE入门之如何增加ORACLE连接数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! OR
通过Oracle连接管理器控制数据库连接 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为了更好
Oracle并发连接数的设置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 不能连接Oracle
这篇文章介绍了net连接oracle的种实现方法有需要的朋友可以才可以一下 方式直接利用NET的oracle驱动连接安装Oracle客户端驱动包找到服务器端安装路径:E:oraclepr
Oracle连接数过多释放机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle服务器