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

相关推荐
持敬chijing11 分钟前
Web渗透之SQL注入-SQLMAP使用笔记
数据库·sql·安全·web安全·网络安全·网络攻击模型
瀚高PG实验室12 分钟前
流复制备库停机维护前检查步骤
数据库·瀚高数据库·highgo
BomanGe222 分钟前
NSK直线导轨LH55EL与NH55EM替代指南
前端·javascript·数据库·经验分享·规格说明书
JAVA面经实录91723 分钟前
MongoDB(文档型 NoSQL)
java·数据库·mongodb·nosql
睡不醒男孩03082325 分钟前
第十篇:PostgreSQL 生产环境高可用选型:CLUP 与 Patroni 深度架构对比与踩坑实录
数据库·postgresql·架构
JAVA面经实录91728 分钟前
HBase 知识点梳理(文档型 NoSQL)
大数据·数据库·nosql数据库·hbase
小二·35 分钟前
PostgreSQL 高级特性与性能调优
数据库·postgresql
风味蘑菇干1 小时前
JDBC(数据库连接池&DBUtils)
java·数据库
标书畅畅行1 小时前
深度解析钛投标AI标书工具:全流程企业级AI投标解决方案,重构投标数字化生产力
大数据·数据库·人工智能
Wait....1 小时前
MySQL底层知识总结
数据库·mysql