温故而知新:Oracle的表连接

本文详细介绍了Oracle中的表连接类型,包括内连接、外连接(左外、右外、全外)、自连接及交叉连接和自然连接。通过实例解析了各种连接的实现方式和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle的表连接分类:

1.内连接 (Inner Join)

2.外连接 (Outer Join)

    分类:1).左外连接 (Left Outer Join)

                2).右外连接 (Right Outer Join)

                3).全外连接 (Full Outer Join)

3.自连接 (Self Join)

                                                                 

                                                                                                                                                        附图 SQL JOINS

一、内连接

t1表和t2表做内连接,连接条件:

SELECT t1.no,t2.no FROM t1 INNER JOIN t2 ON t1.coo=t2.coo; 
SELECT t1.no,t2.no FROM t1,t2 WHERE t1.coo=t2.coo;

记录的匹配过程:

1.从t1表中读取第一条记录row1,假设它的coo列的值为1;

2.根据该值到t2表中查找匹配的记录,即需要遍历t2表。从t2表中的第一条记录row1开始,若该记录的coo列的值为1,

    则这两条记录能够匹配上。t1表的row1和t2表的row1组合后,做为结果集里的一条记录。若匹配不上就不做组合,即被过滤掉;

3.依据第二步将t2表中的所有记录遍历一次,只要匹配就将匹配组合的结果放入到结果集中;

4.从t1表中读取第二条记录,依次重复第二步和第三步,产生最终的结果集。

记录的匹配有如下三种情况:

1.t1表的某条记录在t2表中找不到任何一条匹配的记录。那么t1表中的该记录不会出现在结果集中。

2.t1表的某条记录在t2表中只有一条匹配记录。那么t1表中的该记录和t2表中匹配的记录组成一条新记录出现在结果集中。

3.t1表的某条记录在t2表中有多条匹配记录。那么t1表中的该记录和t2表中每一条匹配的记录组成新记录出现在结果集中。

内连接的核心:一张表里的记录一定要在另一张表中找到匹配的记录,否则不能出现在结果集中。即内连接解决匹配的问题。

得到结果集记录的两种方式:

1).t1做驱动表,t2做匹配表;

2).t2做驱动表,t1做匹配表;

无论哪种方式最终得到的结果都一样,所不同的是效率。

二、外连接

2.0.假设t1表和t2表做外连接时的连接条件:

SELECT t1.no,t2.no FROM t1 LEFT OUTER JOIN t2 ON t1.coo=t2.coo;

t1做为驱动表,t2做匹配表(使用左外连接作为例子来讨论)。记录的匹配过程:

1.从t1表中读取第一条记录row1,若它的coo列的值为1;

2.根据该值到t2表中查找所有匹配的记录,即需要遍历t2表,从t2表中的第一条记录开始,若该记录row1的coo列值为1,

   则这两条记录能够匹配上,那么t1的row1和t2的row1组合起来,做为结果集里的一条记录。若扫描完后,t1的row1记录在t2表中

   找不到任何匹配的记录,t2表中将模拟一条null记录与t1表中的row1组合起来,放入结果集;

3.按照第二步依次将t2表中所有的记录检测一遍,只要匹配就放入结果集中;

4.从t1表中读取第二条记录,依次重复第二步和第三步,产生最终的结果集。 

2.1.左外连接:

t1表、t2表做左外连接时的连接条件:

SELECT t1.no,t2.no FROM t1 LEFT OUTER JOIN t2 ON t1.coo=t2.coo; 
SELECT t1.no,t2.no FROM t1,t2 WHERE t1.coo=t2.coo(+); 

t1表做驱动表,t2表做匹配表。

结果集(左外连接)=内连接的结果集 + 驱动表中匹配不上的记录和一条null记录的组合。

外连接的核心:将匹配不上的记录显示出来。

2.2.右外连接:

t1表、t2表做右外连接时的连接条件:

SELECT t1.no,t2.no FROM t1 RIGHT OUTER JOIN t2 ON t1.coo=t2.coo;
SELECT t1.no,t2.no FROM t1,t2 WHERE t1.coo(+)=t2.coo;

t2做驱动表,t1做匹配表。

结果集(右外连接)=内连接的结果集 + 驱动表中匹配不上的记录和一条null记录的组合。

2.3.全外连接:

t1表、t2表做全外连接时的连接条件:

SELECT t1.no,t2.no FROM t1 FULL OUTER JOIN t2 ON t1.coo=t2.coo;
SELECT t1.no,t2.no FROM t1 LEFT JOIN t2 ON t1.coo=t2.coo UNION SELECT t1.no,t2.no FROM t1 RIGHT JOIN t2 ON t1.coo=t2.coo;

t2做驱动表,t1做匹配表。

结果集(全外连接)=内连接的结果集 + 驱动表、匹配表中匹配不上的记录和一条null记录的组合 。

注意:

        若使用加号(+)来表示,+放在哪边就表示在哪边补空(null),即用+标识的表做为匹配表。不加+的表做为驱动表,

驱动表的记录都将出现在结果集中。

三、自连接

自连接:一张表当做多张表来用。

        假设有一张学生表,包含学生的基本信息(学号、姓名、结对号等)。老师将学生结对,即一个成绩好的学生和一个成绩差

的学生组成一对。这样有利于学生各方面的成长。现在要查询学生的结对信息。但是只有一张学生表,已知结对号就是结对同学

的学号。使用自连接查询:

SELECT s.id,s.name,p.name FROM student s,student p WHERE s.partnerid=p.id;

四、其他连接

交叉连接(CROSS JOIN):产生笛卡尔积。一张表中的每一行和另一张表中的每一行组成一个结果集。

SELECT * FROM t1 CROSS JOIN t2;

自然连接(NATURAL JOIN):在两张表中寻找列名和数据类型都相同的字段,并自动将它们连接起来,返回符合条件的结果。

SELECT id,name FROM t1 NATURAL JOIN t2;

修订:

1.2014年11月20日,纠正错误的理解。

参考:

        优快云博文、《Oracle9i SQL手册》

注:

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪动物_阿光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值