当前位置:网站首页>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
五、连接图示
边栏推荐
- Using block to realize the traditional values between two pages
- 【Swoole系列2.1】先把Swoole跑起来
- Declval of template in generic programming
- Why does wechat use SQLite to save chat records?
- 重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用
- 监控界的最强王者,没有之一!
- node の SQLite
- 微信为什么使用 SQLite 保存聊天记录?
- MySQL查询请求的执行过程——底层原理
- Unity资源顺序加载的一个方法
猜你喜欢
Tree-LSTM的一些理解以及DGL代码实现
44所高校入选!分布式智能计算项目名单公示
从交互模型中蒸馏知识!中科大&美团提出VIRT,兼具双塔模型的效率和交互模型的性能,在文本匹配上实现性能和效率的平衡!...
SQL injection - access injection, access offset injection
Implementation of queue
【中山大学】考研初试复试资料分享
Grafana 9.0 正式发布!堪称最强!
Blue Bridge Cup real question: one question with clear code, master three codes
Self supervised heterogeneous graph neural network with CO comparative learning
Comparative examples of C language pointers *p++, * (p++), * ++p, * (++p), (*p) + +, +(*p)
随机推荐
There is a sound prompt when inserting a USB flash disk under win10 system, but the drive letter is not displayed
2022暑期项目实训(三)
Test 1234
图片缩放中心
Declval (example of return value of guidance function)
传输层 拥塞控制-慢开始和拥塞避免 快重传 快恢复
None of the strongest kings in the monitoring industry!
Common - magic number 7
A method of sequentially loading Unity Resources
The role of applet in industrial Internet
DOM Brief
epoll()无论涉及wait队列分析
2019 Alibaba cluster dataset Usage Summary
Stm32+esp8266+mqtt protocol connects onenet IOT platform
celery最佳实践
STM32+ENC28J60+UIP协议栈实现WEB服务器示例
测试行业的小伙伴,有问题可以找我哈。菜鸟一枚~
POJ 2208 six lengths of tetrahedron are known, and the volume is calculated
Redis的五种数据结构
Introduction to the use of SAP Fiori application index tool and SAP Fiori tools