Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL FULL OUTER JOIN子句
SQL FULL OUTER JOIN子句
作者:--    发布时间:2019-11-20

在本教程中,您将学习如何使用sql full outer join子句查询来自多个表的数据。

1. sql full outer join子句简介

理论上,完全外连接是左连接和右连接的组合。 完整外连接包括连接表中的所有行,无论另一个表是否具有匹配的行。

如果连接表中的行不匹配,则完整外连接的结果集包含缺少匹配行的表的每列使用null值。 对于匹配的行,结果集中包含从连接表填充列的行。

以下语句说明了两个表的完全外连接的语法:

select column_list
from a
full outer join b on b.n = a.n;

请注意,outer关键字是可选的。
以下图说明了两个表的完整外连接。

2. sql full outer join示例

让我们举一个使用full outer join子句来看它是如何工作的例子。

首先,创建两个新表:用于演示的basketsfruits表。 每个篮子存储零个或多个水果,每个水果可以存储在零个或一个篮子中。

-- 创建表1
create table fruits (
    fruit_id integer primary key,
    fruit_name varchar (255) not null,
    basket_id integer
);
-- 创建表2
create table baskets (
    basket_id integer primary key,
    basket_name varchar (255) not null
);

其次,将一些样本数据插入到basketsfruits表中。

-- 插入数据1
insert into baskets (basket_id, basket_name)
values
    (1, 'a'),
    (2, 'b'),
    (3, 'c');

-- 插入数据2
insert into fruits (
    fruit_id,
    fruit_name,
    basket_id
)
values
    (1, 'apple', 1),
    (2, 'orange', 1),
    (3, 'banana', 2),
    (4, 'strawberry', null);

第三,以下查询返回篮子中的每个水果和每个有水果的篮子,但也返回不在任何篮子中的每个水果和每个没有任何水果的篮子。

select
    basket_name,
    fruit_name
from
    fruits
full outer join baskets on baskets.basket_id = fruits.basket_id;

执行上面示例代码,得到以下结果 -

 basket_name | fruit_name
-------------+------------
 a           | apple
 a           | orange
 b           | banana
 (null)      | strawberry
 c           | (null)

如上所见,篮子c没有任何水果,strawberry不在任何篮子里。

您可以将where子句添加到使用full outer join子句的语句中以获取更具体的信息。

例如,要查找不存储任何水果的空篮子,请使用以下语句:

select
    basket_name,
    fruit_name
from
    fruits
full outer join baskets on baskets.basket_id = fruits.basket_id
where
    fruit_name is null;

执行上面示例代码,得到以下结果 -

 basket_name | fruit_name
-------------+------------
 c           | (null)
(1 row)

同样,如果想查看哪个水果不在任何篮子中,请使用以下语句:

select
    basket_name,
    fruit_name
from
    fruits
full outer join baskets on baskets.basket_id = fruits.basket_id
where
    basket_name is null;

执行上面示例代码,得到以下结果 -

basket_name | fruit_name
-------------+------------
(null)       | strawberry
(1 row)

在本教程中,我们演示了如何使用sql full outer join子句来查询来自多个表的数据。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册