当前位置:网站首页>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 join2.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 joinSQL> 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 joinSQL> 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 joinoracleSelect 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
五、连接图示

边栏推荐
- 转载:基于深度学习的工业品组件缺陷检测技术
- Grafana 9.0 is officially released! It's the strongest!
- 测试行业的小伙伴,有问题可以找我哈。菜鸟一枚~
- Execution process of MySQL query request - underlying principle
- 测试1234
- 首先看K一个难看的数字
- Afnetworking framework_ Upload file or image server
- POJ 2208 已知边四面体六个长度,计算体积
- 2022暑期项目实训(三)
- [.Net core] solution to error reporting due to too long request length
猜你喜欢

Execution process of MySQL query request - underlying principle

30 分钟看懂 PCA 主成分分析

TOP命令详解
![Jerry is the custom background specified by the currently used dial enable [chapter]](/img/32/6c22033bda8ff1b53993bacef254cd.jpg)
Jerry is the custom background specified by the currently used dial enable [chapter]

重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用

MySQL查询请求的执行过程——底层原理

There is a sound prompt when inserting a USB flash disk under win10 system, but the drive letter is not displayed

推荐好用的后台管理脚手架,人人开源

10、 Process management

從交互模型中蒸餾知識!中科大&美團提出VIRT,兼具雙塔模型的效率和交互模型的性能,在文本匹配上實現性能和效率的平衡!...
随机推荐
SQL injection - access injection, access offset injection
Will openeuler last long
Blue Bridge Cup real question: one question with clear code, master three codes
Introduction and case analysis of Prophet model
Rb157-asemi rectifier bridge RB157
2022/02/12
解读云原生技术
Declval (example of return value of guidance function)
Stm32+esp8266+mqtt protocol connects onenet IOT platform
阿里云国际版ECS云服务器无法登录宝塔面板控制台
随着MapReduce job实现去加重,多种输出文件夹
测试123
[Matlab] Simulink 同一模块的输入输出的变量不能同名
重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用
JDBC驱动器、C3P0、Druid和JDBCTemplate相关依赖jar包
STM32+ENC28J60+UIP协议栈实现WEB服务器示例
第三季百度网盘AI大赛盛夏来袭,寻找热爱AI的你!
Maixll-Dock 摄像头使用
2022暑期项目实训(一)
Windows connects redis installed on Linux