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

相关推荐
木易士心13 分钟前
MyBatis数据源切换全面解析
数据库
新中地GIS开发老师22 分钟前
地信职业百科④:GIS开发工程师
前端·数据库·gis·webgis·三维gis开发
云和恩墨29 分钟前
从“第二存储”到多智能体协作,云和恩墨充实数据基础设施产品矩阵
数据库
ClouGence36 分钟前
SAP HANA 到 Doris 数据迁移:4 种方案对比与迁移教程
数据库·后端·dba
霸道流氓气质37 分钟前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
我不想名字重复40 分钟前
redis缓存和数据库数据保持一致
数据库·redis·缓存
宇宙第一小趴菜1 小时前
三、Oracle 核心原理
数据库·oracle
码出钞能力2 小时前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦2 小时前
数据库第二次作业
数据库
nVisual3 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理