Oracle SQL: 如何从子集表中获取不包含在子集表的数据,并根据条件显示子集表数据
Oracle SQL: 获取子集表中不包含的数据,并根据条件显示子集表数据
本文介绍如何使用 Oracle SQL 从子集表 (B 表) 中获取不包含在子集表 (A 表) 中的数据,以及如何根据条件显示子集表中的数据。
场景:
假设有两个表 A 和 B,B 表是 A 表的子集,您需要实现以下功能:
- 显示 A 表中不在 B 表的数据
- 根据条件显示 B 表中的数据
示例:
假设 A 表包含字段 a1, a2, a3,B 表包含字段 b1, b2, b3。
示例 1:显示 A 表中不在 B 表的数据
A 表数据:
a1 | a2 | a3
---|----|----
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
B 表数据:
b1 | b2 | b3
---|----|----
1 | 2 | 3
查询语句:
SELECT a1, a2, a3
FROM A
LEFT JOIN B ON A.a1 = B.b1 AND A.a2 = B.b2 AND A.a3 = B.b3
WHERE B.b1 IS NULL;
查询结果:
a1 | a2 | a3
---|----|----
4 | 5 | 6
7 | 8 | 9
示例 2:根据条件显示 B 表中的数据
A 表数据:
a1 | a2 | a3
---|----|----
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
B 表数据:
b1 | b2 | b3
---|----|----
4 | 5 | 6
查询语句:
SELECT a1, a2, a3
FROM A
LEFT JOIN B ON A.a1 = B.b1 AND A.a2 = B.b2 AND A.a3 = B.b3
WHERE B.b1 IS NULL OR (B.b1 IS NOT NULL AND A.a1 = B.b1 AND A.a2 = B.b2 AND A.a3 = B.b3);
查询结果:
a1 | a2 | a3
---|----|----
1 | 2 | 3
7 | 8 | 9
在示例 2 中,由于 B 表中存在与 A 表中一致的数据,所以只有符合 B 表条件的数据才会显示出来。
解释:
- LEFT JOIN: 用于将 A 表与 B 表连接,并保留 A 表中的所有记录。
- ON: 指定连接条件,确保 A 表和 B 表的对应字段相匹配。
- WHERE: 用于筛选结果,
B.b1 IS NULL表示获取 B 表中没有匹配到的 A 表记录;B.b1 IS NOT NULL表示获取 B 表中匹配到的 A 表记录,并根据条件进行进一步筛选。
总结:
通过 LEFT JOIN 和 WHERE 条件,您可以轻松地实现从子集表中获取不包含在子集表的数据,并根据条件显示子集表中的数据。
原文地址: https://www.cveoy.top/t/topic/qe9A 著作权归作者所有。请勿转载和采集!