Oracle 表关联 内连 外联 sql和数据举例 详细说明

在 Oracle 数据库中,表关联(Join)是查询操作中的重要部分,用于根据某些条件将两个或多个表中的数据组合在一起。表关联可以分为内连接(Inner Join)和外连接(Outer Join)两大类。下面分别详细说明这两种连接方式,并给出 SQL 示例和数据举例。

内连接(Inner Join)

内连接返回两个表中满足连接条件的所有行。只有当两个表中的连接字段匹配时,才会返回相应的记录。

SQL 语法
 

sql

SELECT 列名1, 列名2, ...
FROM 表1
INNER JOIN 表2
ON 表1.列名 = 表2.列名;
数据举例

假设有两个表 employees 和 departments,结构如下:

  • employees 表:

    employee_idfirst_namelast_namedepartment_id
    101JohnDoe10
    102JaneSmith20
    103MikeJohnson30
  • departments 表:

    department_iddepartment_name
    10HR
    20Finance
    40IT
内连接示例
 

sql

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
查询结果
first_namelast_namedepartment_name
JohnDoeHR
JaneSmithFinance

外连接(Outer Join)

外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。外连接返回两个表中满足连接条件的所有行,以及一个表中不满足条件但另一个表中满足条件的行。

左外连接(Left Outer Join)

左外连接返回左表中的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则结果集中右表的列值为 NULL。

SQL 语法
 

sql

SELECT 列名1, 列名2, ...
FROM 表1
LEFT OUTER JOIN 表2
ON 表1.列名 = 表2.列名;
左外连接示例
 

sql

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT OUTER JOIN departments
ON employees.department_id = departments.department_id;
查询结果
first_namelast_namedepartment_name
JohnDoeHR
JaneSmithFinance
MikeJohnsonNULL
右外连接(Right Outer Join)

右外连接返回右表中的所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则结果集中左表的列值为 NULL。

SQL 语法
 

sql

SELECT 列名1, 列名2, ...
FROM 表1
RIGHT OUTER JOIN 表2
ON 表1.列名 = 表2.列名;
右外连接示例
 

sql

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT OUTER JOIN departments
ON employees.department_id = departments.department_id;
查询结果
first_namelast_namedepartment_name
JohnDoeHR
JaneSmithFinance
NULLNULLIT
全外连接(Full Outer Join)

全外连接返回两个表中的所有行,无论是否满足连接条件。如果某个表中没有匹配的行,则结果集中该表的列值为 NULL。

注意:Oracle 不直接支持 FULL OUTER JOIN 语法,但可以通过 UNION 操作符实现相同的效果。

SQL 语法
 

sql

SELECT 列名1, 列名2, ...
FROM 表1
LEFT OUTER JOIN 表2
ON 表1.列名 = 表2.列名
UNION
SELECT 列名1, 列名2, ...
FROM 表1
RIGHT OUTER JOIN 表2
ON 表1.列名 = 表2.列名;
全外连接示例
 

sql

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT OUTER JOIN departments
ON employees.department_id = departments.department_id
UNION
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT OUTER JOIN departments
ON employees.department_id = departments.department_id;
查询结果
first_namelast_namedepartment_name
JohnDoeHR
JaneSmithFinance
MikeJohnsonNULL
NULLNULLIT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路飞VS草帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值