Oracle中的多表连接

1.特点

1.连接条件无效或没有连接条件,即会产生笛卡尔积

2.结果:表中每个字段都会和另一张表中所有字段连接并输出数据

2.等值连接 =

1.特点

多条件查询,把关联条件写在最前面
不是字段产生的关系,而是里面的值有相等的关系,所以即使字段不同,也可以,但一般都设置为相同的

2.实例

select ename,e.deptno
from emp e,dept d
where e.deptno=d.deptno 

Oracle中的多表连接_第1张图片

 

3.非等值连接

1.特点

根据值的关系建立连接

emp表中的sal在salgrade表中losal,hisal之间 所以用这个关系连接这两个表

2.实例

select empno,ename,sal,grade,loc
from emp e,dept d,salgrade s
where e.deptno=d.deptno and sal between losal and hisal
order by grade;

Oracle中的多表连接_第2张图片

 

3.外部连接

1.理解

  dept中有deptno=40的部门而emp中deptno没有40,但是又想把dept中40的部门显示出来,此时只需把dept(查谁 谁是基表)作为基表 用+号(放在不是基表的另一张表)连接就可以了。

2.概念

外部连接就好像是为符号(+)所在边的表增加一个“万能”的行,这个行全部由空值组成。它可以和另一边的表中所有不满足连接条件的行进行连接。由于这个“万能”行的各列全部是空值,因此在连接结果中,来自“万能”行属性值全部为空值

3.实例

select * 
from dept d,emp e
where e.deptno(+)=d.deptno

Oracle中的多表连接_第3张图片

4.内部连接

1.特点

同一张表中不同字段建立的连接

2.实例

--员工的经理编号=经理的员工编号
select worker.ename 员工姓名,manager.ename 经理姓名
from emp worker,emp manager
where worker.mgr=manager.empno

Oracle中的多表连接_第4张图片

 

5.左外连接

1.特点

左边表全部显示,右边表与左表匹配,如果有些值右表没有,空值填充

2.实例

select *
from emp e left outer join dept d
on(e.deptno=d.deptno)

 

6.右外连接

1.特点

右边表全部显示,左边表与右表匹配,如果有些值左表没有,空值填充

2.实例

select *from emp e right outer join dept d
on(e.deptno=d.deptno)

Oracle中的多表连接_第5张图片

 

7.全外连接

1.特点

全外连接返回两个表等值连接结果,以及两个表中所有等值连接失败的记录

2.实例

SELECT 	e.empno, d.deptno
FROM   		emp e 
FULL   OUTER JOIN dept d 
ON     		(e.deptno = d.deptno); 

Oracle中的多表连接_第6张图片

 

8.SQL的1999的写法

1.cross join交叉连接

语法 cross join 表名

特点:交叉连接会产生连个表的交叉乘积,和两个表之间的笛卡尔积是一样的

2.自然连接

自然连接是对两个表之间相同名字和数据类型的列进行的等值连接;
                                              --如果两个表之间相同名称的列的数据类型不同,则会产生错误;
                                              --使用NATURAL JOIN子句来完成。
                                              --两个表中关联的字段不能使用别名

3.using连接

1.特点自然连接是使用所有名称和数据类型相匹配的列作为连接条件,而USING子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件

2.实例

-- 两个表的字段都是deptno 进行连接
SELECT 	e.ename,e.sal,deptno,d.loc 
FROM   	emp e JOIN dept d USING (deptno) 
 WHERE  	deptno = 20 ;

Oracle中的多表连接_第7张图片

 

4.on连接

 1.特点

如果要指定任意连接条件,或指定要连接的列,则可以使用ON子句;
                                --用ON将连接条件和其它检索条件分隔开,其它检索条件写在WHERE子句;
                               --ON子句可以提高代码的可读性

2.实例

select e.ename,e.deptno,d.dname
from emp e
join dept d
on (e.deptno=d.deptno)

Oracle中的多表连接_第8张图片

 

你可能感兴趣的:(oracle,数据库,sql)