Oracle 11g学习笔记--内连接,外连接和自连接

Oracle 11g学习笔记–内连接,外连接和自连接

概念:

内连接:一般默认情况下都是内连接,指的是只有满足条件才会被select出来,也就是说当某一行的一列是空值时,那么将不会被select出来;

外连接:即使某一行的一列包含空值,也会被select出来,那么内连接又分为左连接,右连接,全连接

自连接:顾名思义就是自己和自己连接;

实例:
在此我们使用的是produts和produt_types两张表

produts表
produts

produt_types表
这里写图片描述
内连接

 select 
     products.name, 
     product_types.name, 
     products.price 
 from 
     products inner join product_types 
 on 
     products.product_type_id = product_types.product_type_id;
--其实它和一下语句执行结果相同
select 
    products.name, 
    product_types.name, 
    products.price 
from 
    products, product_types 
where 
    products.product_type_id = product_types.product_type_id;

执行结果:
这里写图片描述

外连接

外连接实现方式有两种;
1.full/left/right join实现
2.用(+)实现

1.右连接
显示右表的所有数据,然后根据条件与左表匹配,如果有匹配的就加在左表的后面,如果有多条匹配数据,则显示多条。没有的话,该行以null值填充。

select 
    products.name, product_types.name, products.price
from 
    products right join product_types 
on 
    products.product_type_id = product_types.product_type_id;

--用(+)实现
 select 
     products.name, 
     product_types.name, 
     products.price 
 from 
     products ,product_types 
 where 
     products.product_type_id(+) = product_types.product_type_id;

运行结果:
这里写图片描述

2.左连接
显示左表的所有数据,然后根据条件与右表进行匹配,如果有匹配的就加在左表的后面,如果有多条匹配数据,则显示多条。没有的话,该行的右表就以null值填充

select 
    products.name, product_types.name, products.price
from 
    products left join product_types 
on 
    products.product_type_id = product_types.product_type_id;

--用(+)实现
 select 
     products.name, 
     product_types.name, 
     products.price 
 from 
     products ,product_types 
 where 
     products.product_type_id = product_types.product_type_id(+);

运行结果:
这里写图片描述

3.全连接

select 
    products.name, 
    product_types.name, 
    products.price 
from 
    products full outer join product_types 
on 
    products.product_type_id = product_types.product_type_id;
--注:全连接不能使用(+)实现

运行结果:
这里写图片描述

自连接

有时可能有这样的需求,一张表要和自己进行连接,这时候就需要自连接;
如有员工(employees)表:
这里写图片描述
我们现在有输出所有人为的老板是谁,我们就可以使用自连接

select 
    emp.first_name || ' ' || emp.last_name
    || 'work for' ||
    boss.first_name || ' ' || boss.last_name 
from 
    employees emp, employees boss
where
    emp.manager_id = boss.employee_id;

执行结果:
Ron Johnson work for James Smith
Susan Jones work for Ron Johnson
Fred Hobbs work for Ron Johnson

补充:

1.自然连接与等值连接:
自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列;

2.这里附上一张图:
来源:http://blog.csdn.net/tianlesoftware/article/details/5795896
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值