Oracle多表连接

 

作者:黄钟瑶

完成时间:2019年4月14日

开发工具与技术:Oracle

 

多表连接:从多个表中通过连接的条件来获取数据

首先,多表连接在没有连接的条件下,会产生一个错误--笛卡尔集,就是表中的所有行数据相乘,如果表中的数据多时,那么产生的笛卡尔集也是庞大的。

正确的写法,要加个where连接条件。这也是一个等值连接,在employees表中有departments表的外键ID,通过这个ID作为这两个表的相同列,建立连接条件。由于这两个表有相同的列,所以要在列前加上表名,方便于数据库区分。

右外连接:返回连接相同的条件也可以返回左表或者右表的不满足条件的行数据,要用连接符(+)连接。连接左表的称为左连接,连接右表的称为右连接。

右连接,通过department_id作为连接条件,employees表作为子表连接departments父表返回父表的数据,where指定连接条件

select employees.employee_id,departments.department_id

from employees,departments

where employees.department_id(+)=departments.department_id;

除了上面的传统写法,还有SQL1999语法,关键词:left,right join.....

以左外连接为例,返回employees表的数据。

select employees.employee_id,departments.department_id

from employees left join departments

on employees.department_id=departments.department_id

满外连接:除了返回满足连接条件的行还返回不满足条件的行,通俗点就是都返回行

SELECT employees.last_name, employees.department_id, departments.department_name

FROM   employees

FULL OUTER JOIN departments

ON   (employees.department_id = departments.department_id) ;

自连接:即自己连接自己,将自身表当作另一个表来连接查询一些特殊的数据。

select a.last_name ||b.last_name

from employees a,employees b

where a.manager_id=b.employee_id;

自然连接:返回等值相同的数据,列名相同且数据类型相同,关键词:natural join

SELECT employee_id,last_name

FROM   employees

NATURAL JOIN departments ;

使用USing子句创建连接:在自然连接时,可以自动匹配表中相同的列,使用

using子句来指定需要返回的列,指定列不需要添加前缀和别名

select employees.employee_id,employees.first_name,department_id

from employees join departments

using( department_id);

On子句:除连接具有相同条件的列还可以指定额外的连接条件,也能够创建多表连接

select employees.employee_id,employees.job_id,departments.department_id

from employees left join departments

on employees.department_id=departments.department_id

 

总结:如果逻辑处理的好,可以连接更多的表的。个人觉得不管哪种连接,都必须要满足连接的条件,从而再得到需要的数据,在连接过程中也要避免笛卡尔集的发生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值