您的位置:首页 > 数据库 > Oracle

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

2017-11-23 19:19 731 查看


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

概念:

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

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

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

实例: 

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

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

执行结果: 



外连接

外连接实现方式有两种; 

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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

运行结果: 



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(+);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

运行结果: 



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;
--注:全连接不能使用(+)实现
1
2
3
4
5
6
7
8
9

运行结果: 



自连接

有时可能有这样的需求,一张表要和自己进行连接,这时候就需要自连接; 

如有员工(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;
1
2
3
4
5
6
7
8

执行结果: 

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 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: