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 的基础,实际应用中需根据业务需求(是否必须保留左表全部数据)来选择合适的连接方式。

相关推荐
雨晨源码(同名B站)23 分钟前
基于深度学习YoloV11农业病害虫害检测系统 智慧农业信息化综合管理平台 (附源码+lw文档+ppt)
数据库·人工智能·深度学习·yolo·信息可视化
DBA小马哥1 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
云和数据.ChenGuang1 小时前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
祈禾1 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存
东方护航数据恢复(深圳)2 小时前
MySQL_Oracle数据库崩溃修复全攻略_东方护航数据恢复深圳店
数据库·mysql·oracle
y = xⁿ2 小时前
一文掌握Redis常见八股
数据库·redis·缓存
Cloud云卷云舒2 小时前
HaishanDB(海山)|磐维数据库|YashanDB(崖山)深度对比分析
数据库·人工智能·海山数据库·haishandb·移动云海山数据库
weixin_460443562 小时前
企业考试系统如何对接OA、钉钉和企业微信?SSO单点登录、组织同步与权限一致性设计
java·开发语言·数据库
xywww1682 小时前
真实后台页实测:Opus 5 看图写前端的可用边界在哪
linux·服务器·前端·数据库·人工智能·gpt
上海云盾商务经理杨杨3 小时前
SQL 盲注入渗透实战!无报错页面也能成功注入
数据库·sql