首页 > 数据库 > Oracle > 转 oracle中的join
转自:http://blog.csdn.net/tianlesoftware/article/details/5795896
Oracle
1.
2.
(1)左外连接
3.
SQL的标准语法:
select
from
inner
left
right
full
on子句
注意:
如果使用from子句指定内、外连接,则必须要使用on子句指定连接条件;
一.
1.1
Inner
还有一点要说明的就是Join
1.2
1.2.1
SQL>
ID
----------
1
2
1
2
SQL>
ID
----------
1
2
1.2.3
SQL>
----------
SQL>
----------
SQL>
----------
1.3
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。
先看一下自然连接的例子:
SQL>
----------
这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,dave表中的id和name字段与bl表中的id和name字段进行了连接。也就是实际上相当于
SQL>
----------
因此,我们也可以将自然连接理解为内连接的一种。
有关自然连接的一些注意事项:
(1).如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为自然连接的条件。
(2).如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。
二.
outer
在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。
对于外连接,
1.(+)操作符只能出现在where子句中,并且不能与outer
2.
3.(+)操作符只适用于列,而不能用在表达式上。
4.(+)操作符不能与or和in操作符一起使用。
5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
在做实验之前,我们先将dave表和bl里加一些不同的数据。
SQL>
----------
SQL>
----------
2.1
示例:
SQL>
---------
SQL>
----------
用(+)来实现,
SQL>
----------
2.2
和left
示例:
SQL>
----------
已选择7行。
SQL>
----------
已选择7行。
用(+)来实现,
SQL>
----------
2.3
示例:
SQL>
----------
已选择9行。
SQL>
----------
已选择9行。
三.
自连接(self
示例:
在oracle的scott的schema中有一个表是emp。在emp中的每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的经理。
下面我们需要将每一个员工自己的名字和经理的名字都找出来。这时候我们该怎么做呢?
如果我们有两张这样的表分别教worker和mgr,那么我们就很好写SQL语句。
Select
Mgr.name
From
Where
但现在我们只有一张emp表。所以我们可以采用自连接。自连接的本意就是将一张表看成多张表来做连接。我们可以这样来写SQL语句:
SQL>
WORKER
----------
ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
MARTIN
MILLER
SCOTT
SMITH
WORKER
----------
TURNER
WARD
已选择13行。
各种连接的一个图示:

join....using...:
select e.ename, d.dname, d.deptno
from emp e join dept d using(deptno);
select e.ename, d.dname, d.deptno
*
ERROR at line 1:
ORA-25154: column part of USING clause cannot have qualifier
在使用using时,使用连接的字段在select中不需要表名,否则会报错。
SQL> select e.em_name, d.dep_name, depno
2 from emp e join dept d using (depno) join mytab m using (emp_id);
select e.em_name, d.dep_name, depno
*
第 1 行出现错误:
ORA-00918: 未明确定义列
SQL> select e.em_name, d.dep_name, e.depno
2 from emp e join dept d using (depno) join mytab m using (emp_id);
select e.em_name, d.dep_name, e.depno
*
第 1 行出现错误:
ORA-25154: USING 子句的列部分不能有限定词
SQL> select e.em_name, d.dep_name, d.depno
2 from emp e join dept d using (depno) join mytab m using (emp_id);
select e.em_name, d.dep_name, d.depno
*
第 1 行出现错误:
ORA-25154: USING 子句的列部分不能有限定词
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21356459/viewspace-1115385/ ,如需转载,请注明出处,否则将追究法律责任。