Oracle多表查询
时间: 2025-05-28 16:02:39 浏览: 13
### Oracle 数据库中的多表查询
在关系型数据库中,`JOIN` 是一种用于连接多个表并从中检索数据的技术。通过 `JOIN` 语句可以实现跨不同表的数据组合和筛选。
#### 基本 JOIN 类型
以下是几种常见的 `JOIN` 类型及其用途:
1. **INNER JOIN**: 返回两个表中匹配条件的记录[^1]。
2. **LEFT OUTER JOIN (LEFT JOIN)**: 返回左表的所有记录以及右表中满足条件的记录;如果右表无匹配,则返回 NULL[^2]。
3. **RIGHT OUTER JOIN (RIGHT JOIN)**: 返回右表的所有记录以及左表中满足条件的记录;如果左表无匹配,则返回 NULL[^3]。
4. **FULL OUTER JOIN**: 返回两个表中所有的记录,当某一方无匹配时则填充为 NULL[^4]。
5. **CROSS JOIN**: 不带任何条件地将两表进行笛卡尔积操作[^5]。
#### 示例代码
下面是一些具体的 SQL 查询示例来展示这些类型的用法。
##### INNER JOIN 示例
假设存在两张表:`employees` 和 `departments`,它们之间通过 `department_id` 字段关联。
```sql
SELECT e.employee_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
```
##### LEFT OUTER JOIN 示例
此查询会显示所有员工的名字及所属部门名称,即使某些员工未分配到具体部门也会被列出。
```sql
SELECT e.employee_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
```
##### FULL OUTER JOIN 示例
适用于需要查看完全不重叠的部分情况下的联合结果集。
注意,在标准 ANSI SQL 中支持 full outer join 的方式可能因 RDBMS 而异,对于 Oracle 需要特别处理 nulls 或者使用 union all 来模拟效果。
```sql
SELECT e.employee_name, d.department_name
FROM employees e
FULL OUTER JOIN departments d ON e.department_id = d.id;
-- 对于 Oracle 可能需要用 UNION ALL 实现相同逻辑
```
##### CROSS JOIN 示例
它会产生每条记录与其他表每一行配对的结果集合。
```sql
SELECT *
FROM tableA a
CROSS JOIN tableB b;
```
以上就是关于 Oracle 数据库执行多表联查的一些基本概念与实际应用例子说明。
阅读全文
相关推荐








