Oracle || 连接运算符
封面图
•
2026-03-27
•
Oracle
4
0
0
0
在 Oracle 数据库中,**连接运算符(Join Operator)** 是用于将两个或多个表中的数据根据某些条件组合在一起的 SQL 操作。Oracle 支持多种类型的连接操作,包括: --- ## 📌 1. **内连接(Inner Join)** - 只返回两个表中匹配的行。 - 语法: ```sql SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column; ``` - 或者使用旧式的 `WHERE` 子句方式(不推荐): ```sql SELECT * FROM table1, table2 WHERE table1.column = table2.column; ``` --- ## 📌 2. **外连接(Outer Join)** - 返回一个表中所有行,即使另一个表中没有匹配的行。 ### a. 左外连接(Left Outer Join) - 返回左表的所有行,右表中没有匹配的行用 `NULL` 填充。 - 语法: ```sql SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column; ``` ### b. 右外连接(Right Outer Join) - 返回右表的所有行,左表中没有匹配的行用 `NULL` 填充。 - 语法: ```sql SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.column = table2.column; ``` ### c. 全外连接(Full Outer Join) - 返回左右两边表的所有行,没有匹配的部分用 `NULL` 填充。 - 语法: ```sql SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column; ``` --- ## 📌 3. **交叉连接(Cross Join)** - 也称为笛卡尔积,返回两个表中所有可能的组合。 - 语法: ```sql SELECT * FROM table1 CROSS JOIN table2; ``` --- ## 📌 4. **自然连接(Natural Join)** - 自动根据两个表中相同列名进行连接。 - 语法: ```sql SELECT * FROM table1 NATURAL JOIN table2; ``` - 注意:如果两个表有多个同名列,可能会产生意外结果,建议谨慎使用。 --- ## 📌 5. **自连接(Self Join)** - 表与自身进行连接,通常用于处理层次结构数据。 - 示例: ```sql SELECT e1.employee_id, e1.name, e2.manager_id FROM employees e1 LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id; ``` --- ## 📌 6. **半连接(Semi-Join)** - 返回一个表中存在匹配的行,但只从一个表中选择数据。 - 通常通过 `IN` 或 `EXISTS` 实现: ```sql SELECT * FROM table1 WHERE table1.column IN (SELECT column FROM table2); ``` --- ## 📌 7. **反连接(Anti-Join)** - 返回一个表中不存在匹配的行。 - 通常通过 `NOT IN` 或 `NOT EXISTS` 实现: ```sql SELECT * FROM table1 WHERE table1.column NOT IN (SELECT column FROM table2); ``` --- ## ✅ 小结:Oracle 中常用的连接类型 | 连接类型 | 是否返回无匹配行 | 说明 | |----------------|------------------|--------------------------------| | Inner Join | ❌ | 只返回匹配的行 | | Left Join | ✅ | 左表全部,右表无则为 NULL | | Right Join | ✅ | 右表全部,左表无则为 NULL | | Full Join | ✅ | 两边全部,无则为 NULL | | Cross Join | ✅ | 所有可能的组合(笛卡尔积) | | Natural Join | ❌ | 自动按列名连接 | | Semi Join | ❌ | 只返回第一个表中有匹配的行 | | Anti Join | ✅ | 返回第一个表中没有匹配的行 | --- 如果你有具体的 SQL 场景或需要优化连接性能,欢迎继续提问!
上一篇:
Oracle Concat()函数
标题录入,一次不能超过6条
留言
评论