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
相关文章推荐
- Oracle 11g学习笔记--内连接,外连接和自连接
- Oracle学习笔记[4] - ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- oracle 11g 学习笔记2012_10_23(2)
- oracle 11g 学习笔记 2012_10_25(a)
- Oracle 11g学习笔记--分析函数
- oracle 11g 学习笔记10_29(2)
- Oracle 11g学习笔记--解决方案:make sure you have the 32 bits oracle
- Oracle 11g学习笔记--伪列
- oracle 11g 学习笔记 2012_10_25(a)
- Oracle 11g学习笔记--privot和unpivot子句
- Oracle 11g 学习四:多表查询、左右连接、SQL1999语法、统计函数及分组查询
- Oracle 11g 学习笔记
- Oracle 11g 学习笔记 (2)
- Oracle 11g 学习笔记 Using Baseline
- [Oracle 学习笔记] 05 连接查询
- oracle 11g 学习笔记 11_2
- 《Oracle 11g SQL 和PL SQL从入门到精通》 学习笔记
- Oracle 11g学习笔记--约束(constraint )的使用
- Oracle 11g 学习笔记
- 跟我一起学Oracle 11g【8】----SQL 基础学习2[连接查询]