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

相关推荐
冰暮流星8 小时前
mysql之表子查询
数据库·mysql
Full Stack Developme8 小时前
CRM相关库表设计
数据库
步行cgn8 小时前
Spring 注入 Map 集合详解
数据库·python·spring
风跟我说过她9 小时前
SQL 一键转经典 Chen 风格 ER 图:开源 CLI + 在线工具 + Agent Skill
数据库·python·sql·开源·开源软件
这个DBA有点耶9 小时前
MySQL大表DDL锁表锁到崩溃?Online DDL的3个关键参数和实战避坑
数据库·mysql·架构
2302_11110 小时前
java依赖小结
java·运维·数据库
听到微笑10 小时前
Elasticsearch 如何存储与检索海量向量
数据库·elasticsearch
海浪仙人掌11 小时前
速动比率怎么分析?速动比率分析有哪些注意事项?
大数据·数据库·人工智能
企业数字化笔记11 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
还是奇怪11 小时前
OpenAI GPT-5.6 构建指南拆解:创业公司如何用模型选择与 Responses API 降低 Agent 成本
java·数据库·人工智能·gpt