当前位置:网站首页>ORACLE进阶(四)表连接讲解
ORACLE进阶(四)表连接讲解
2022-07-06 10:41:00 【InfoQ】
一、前言
- 内连接(自然连接)
- 外连接(1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制)
- 自连接(同一张表内的连接)
select table1.column,table2.column from table1 [inner | left | right | full ] join table2 on table1.column1 = table2.column2;
inner join
表示内连接;
left join
表示左外连接;
right join
表示右外连接;
full join
表示完全外连接;
on
子句用于指定连接条件。
- 如果使用
from
子句指定内、外连接,则必须要使用on
子句指定连接条件;
- 如果使用(
+
)操作符指定外连接,则必须使用where
子句指定连接条件。
二、内连接(Inner Join/Join)
2.1 Inner Join
Inner join
2.2 举例说明
SQL> select * from dave;
ID NAME
1 dave
2 bl
1 bl
2 dave
SQL> select * from bl;
ID NAME
1 dave
2 bl
SQL> Select a.id,a.name,b.name from dave a inner join bl b on a.id=b.id; -- 标准写法
ID NAME NAME
1 dave dave
2 bl bl
1 bl dave
2 dave bl
SQL> Select a.id,a.name,b.name from dave a join bl b on a.id=b.id; -- 这里省略了inner 关键字
ID NAME NAME
1 dave dave
2 bl bl
1 bl dave
2 dave bl
SQL> Select a.id,a.name,b.name from dave a,bl b where a.id=b.id; -- select 多表查询
ID NAME NAME
1 dave dave
2 bl bl
1 bl dave
2 dave bl
2.3 自然连接(Natural join)
SQL> Select id,name from dave a natural join bl b;
ID NAME
1 dave
2 bl
SQL> Select dave.id,bl.name From dave join bl on dave.id = bl.id and dave.name=bl.name;
ID NAME
1 dave
2 bl
- 如果做自然连接的两个表的有多个字段都满足有相同名称和类型,那么他们会被作为自然连接的条件。
- 如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。
三、外连接(Outer Join)
- (+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
- 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
- (+)操作符只适用于列,而不能用在表达式上。
- (+)操作符不能与or和in操作符一起使用。
- (+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
SQL> select * from bl;
ID NAME
1 dave
2 bl
3 big bird
4 exc
9 怀宁
SQL> select * from dave;
ID NAME
8 安庆
1 dave
2 bl
1 bl
2 dave
3 dba
4 sf-express
5 dmm
3.1 左外连接(Left outer join/ left join)
left join
SQL> select * from dave a left join bl b on a.id = b.id;
ID NAME ID NAME
1 bl 1 dave
1 dave 1 dave
2 dave 2 bl
2 bl 2 bl
3 dba 3 big bird
4 sf-express 4 exc
5 dmm -- 此处B表为null,因为没有匹配到
8 安庆 -- 此处B表为null,因为没有匹配到
SQL> select * from dave a left outer join bl b on a.id = b.id;
ID NAME ID NAME
1 bl 1 dave
1 dave 1 dave
2 dave 2 bl
2 bl 2 bl
3 dba 3 big bird
4 sf-express 4 exc
5 dmm
8 安庆
+
+
+
SQL> Select * from dave a,bl b where a.id=b.id(+); -- 注意: 用(+) 就要用关键字where
ID NAME ID NAME
1 bl 1 dave
1 dave 1 dave
2 dave 2 bl
2 bl 2 bl
3 dba 3 big bird
4 sf-express 4 exc
5 dmm
8 安庆
3.2 右外连接(right outer join/ right join)
left join
SQL> select * from dave a right join bl b on a.id = b.id;
ID NAME ID NAME
1 dave 1 dave
2 bl 2 bl
1 bl 1 dave
2 dave 2 bl
3 dba 3 big bird
4 sf-express 4 exc
9 怀宁 --此处左表不足用Null 填充
--已选择7行。
SQL> select * from dave a right outer join bl b on a.id = b.id;
ID NAME ID NAME
1 dave 1 dave
2 bl 2 bl
1 bl 1 dave
2 dave 2 bl
3 dba 3 big bird
4 sf-express 4 exc
9 怀宁 --此处左表不足用Null 填充
--已选择7行。
+
+
SQL> Select * from dave a,bl b where a.id(+)=b.id;
ID NAME ID NAME
1 dave 1 dave
2 bl 2 bl
1 bl 1 dave
2 dave 2 bl
3 dba 3 big bird
4 sf-express 4 exc
9 怀宁
3.3 全外连接(full outer join/ full join)
null
+
SQL> select * from dave a full join bl b on a.id = b.id;
ID NAME ID NAME
8 安庆
1 dave 1 dave
2 bl 2 bl
1 bl 1 dave
2 dave 2 bl
3 dba 3 big bird
4 sf-express 4 exc
5 dmm
9 怀宁
--已选择9行。
SQL> select * from dave a full outer join bl b on a.id = b.id;
ID NAME ID NAME
8 安庆
1 dave 1 dave
2 bl 2 bl
1 bl 1 dave
2 dave 2 bl
3 dba 3 big bird
4 sf-express 4 exc
5 dmm
9 怀宁
四、自连接
self join
oracle
Select worker.name,Mgr.name From worker,mgr Where worker.id = mgr.id;
select work.ename worker,mgr.ename manager from scott.emp work, scott.emp mgr where work.mgr = mgr.empno order by work.ename;
WORKER MANAGER
ADAMS SCOTT
ALLEN BLAKE
BLAKE KING
CLARK KING
FORD JONES
JAMES BLAKE
JONES KING
MARTIN BLAKE
MILLER CLARK
SCOTT JONES
SMITH FORD
WORKER MANAGER
TURNER BLAKE
WARD BLAKE
五、连接图示
边栏推荐
- POJ 2208 已知边四面体六个长度,计算体积
- Coco2017 dataset usage (brief introduction)
- Stm32+mfrc522 completes IC card number reading, password modification, data reading and writing
- 监控界的最强王者,没有之一!
- SQL injection Foundation
- C语言高校实验室预约登记系统
- 2022 Summer Project Training (III)
- Rb157-asemi rectifier bridge RB157
- Declval (example of return value of guidance function)
- 從交互模型中蒸餾知識!中科大&美團提出VIRT,兼具雙塔模型的效率和交互模型的性能,在文本匹配上實現性能和效率的平衡!...
猜你喜欢
【中山大学】考研初试复试资料分享
Recommend easy-to-use backstage management scaffolding, everyone open source
MySQL查询请求的执行过程——底层原理
Coco2017 dataset usage (brief introduction)
[the 300th weekly match of leetcode]
巨杉数据库首批入选金融信创解决方案!
CSRF漏洞分析
UDP协议:因性善而简单,难免碰到“城会玩”
【LeetCode第 300 场周赛】
从交互模型中蒸馏知识!中科大&美团提出VIRT,兼具双塔模型的效率和交互模型的性能,在文本匹配上实现性能和效率的平衡!...
随机推荐
Implementation of queue
287. 寻找重复数
测试123
Huawei 0 foundation - image sorting
Why does wechat use SQLite to save chat records?
2022暑期项目实训(一)
2022 Summer Project Training (I)
從交互模型中蒸餾知識!中科大&美團提出VIRT,兼具雙塔模型的效率和交互模型的性能,在文本匹配上實現性能和效率的平衡!...
传输层 拥塞控制-慢开始和拥塞避免 快重传 快恢复
随着MapReduce job实现去加重,多种输出文件夹
Docker安装Redis
Alibaba cloud international ECS cannot log in to the pagoda panel console
The third season of Baidu online AI competition is coming in midsummer, looking for you who love AI!
徐翔妻子应莹回应“股评”:自己写的!
Using block to realize the traditional values between two pages
A method of sequentially loading Unity Resources
CSRF漏洞分析
Docker installation redis
Excellent open source fonts for programmers
Afnetworking framework_ Upload file or image server