Oracle中的多表连接

1.特点

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

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

2.等值连接 =

1.特点

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

2.实例

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

 

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;

 

3.外部连接

1.理解

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

2.概念

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

3.实例

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

4.内部连接

1.特点

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

2.实例

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

 

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)

 

7.全外连接

1.特点

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

2.实例

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

 

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 ;

 

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)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值