oracle里面inner join 和left join 的区别

我们被问到"oracle 里面inner join 和left join 的区别"。需要给出解释,可能是SQL面试题或基础概念。我们应当清晰说明两者的区别,包括返回结果集的区别、语法、示例等。注意指定是Oracle,但join标准是通用的。可以适当举例说明。使用中文回答。

要点:

  1. INNER JOIN:只返回两个表中匹配的行,不匹配的行不返回。

  2. LEFT JOIN(或LEFT OUTER JOIN):返回左表所有行,即使右表没有匹配,右表部分为NULL。

  3. 语法示例,可以用Oracle的dual或具体表结构。

  4. 区别总结:结果集行数、NULL值、使用场景。

  5. 可能提及OUTER关键字可省略,Oracle支持标准SQL。

可以简洁明了,也可以详细一些。我们作为AI,应提供准确、易懂的解释。

在 Oracle 中,INNER JOIN (内连接)和 LEFT JOIN (左外连接)是两种最常用的表连接方式,它们的核心区别在于是否保留不匹配的行

1. 结果集的区别

连接类型 返回结果
INNER JOIN 仅返回两个表中满足连接条件 的行。若某行在另一表中无匹配,则两边的行均不出现
LEFT JOIN 返回左表全部行 ,右表只返回匹配的行;若右表无匹配,则右表对应字段置为 NULL

2. 直观示例

假设有两张表:

员工表 emp

emp_id emp_name dept_id
1 张三 10
2 李四 20
3 王五 (NULL)

部门表 dept

dept_id dept_name
10 技术部
20 市场部

INNER JOIN

sql

复制代码
SELECT e.emp_name, d.dept_name
FROM emp e
INNER JOIN dept d ON e.dept_id = d.dept_id;

结果:

emp_name dept_name
张三 技术部
李四 市场部
王五因无匹配部门,不显示。

🔹 LEFT JOIN

sql

复制代码
SELECT e.emp_name, d.dept_name
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.dept_id;

结果:

emp_name dept_name
张三 技术部
李四 市场部
王五 (NULL)
王五保留,部门名称显示为 NULL。

3. 语法与写法(Oracle 特有提醒)

  • Oracle 完全支持标准 SQL 的 JOIN 语法(ANSI 风格),如上所示。

  • 早期 Oracle 还有特有的 (+) 外连接符,现在仍兼容但不推荐:

    sql

    复制代码
    -- 左连接(旧式写法)
    SELECT e.emp_name, d.dept_name
    FROM emp e, dept d
    WHERE e.dept_id = d.dept_id(+);
  • 建议一律使用 ANSI JOIN 语法INNER JOINLEFT JOIN),可读性更好,且不易出错。


4. 总结对比

维度 INNER JOIN LEFT JOIN
返回行数 等于两表匹配的行数 至少等于左表行数(可能更多,若右表有多条匹配)
NULL 值 不会产生 NULL(不匹配行已过滤) 右表无匹配时全部为 NULL
主表 无主次之分 左表是主表,全部保留
典型场景 需严格对应关系的数据 需保留主表全部数据,补充关联信息

5. 补充说明:LEFT JOIN 可能使行数变多

如果右表存在多条匹配记录,左表的同一行会被重复,此时左连接可能比左表本身行数更多。例如若部门 10 有两位经理,则张三会重复出现两次。


理解这两种连接的区别是编写正确 SQL 的基础,实际应用中需根据业务需求(是否必须保留左表全部数据)来选择合适的连接方式。

相关推荐
数据组小组1 天前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
悟空聊架构2 天前
基于KaiwuDB在游乐场“刷卡+投币”双模消费系统中的落地实践
数据库·后端·架构
IvorySQL2 天前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
进击的丸子2 天前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
NineData2 天前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
IvorySQL2 天前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
ma_king3 天前
入门 java 和 数据库
java·数据库·后端
jiayou643 天前
KingbaseES 实战:审计追踪配置与运维实践
数据库
NineData3 天前
NineData 迁移评估功能正式上线
数据库·dba
NineData3 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算