7.10 SQL Server全外连接查询

SQL Server Full Outer Join

SQL Server全外连接简介

全外连接也称全连接,效果很像左连接和右连接的结合起来。

当左表中的行不存在匹配行时,右表的列将包含NULL。同样,当右表中的行不存在匹配行时,左表的列将包含NULL。

语法:

SELECT
select_list
FROM
T1
FULL OUTER JOIN T2 ON condition;

同样OUTER关键字可省略:

SELECT
select_list
FROM
T1
FULL JOIN T2 ON condition;

语法中:

  • 首先在FROM子句中指定左表T1。
  • 然后指定右表T2和连接条件。

下面的维恩图解说明了FULL OUTER JOIN的结果:

全连接示例

先给示例创建几张新表:

首先,创建一个名为pm(project management)的架构,代表项目管理:

CREATE SCHEMA pm;
GO

然后在pm架构下创建项目表(projects)和成员表(members):

CREATE TABLE pm.projects(
id INT PRIMARY KEY IDENTITY,
title VARCHAR(255) NOT NULL
);
CREATE TABLE pm.members(
id INT PRIMARY KEY IDENTITY,
name VARCHAR(120) NOT NULL,
project_id INT,
FOREIGN KEY (project_id)
REFERENCES pm.projects(id)
);

假设每个成员只能参与一个项目,并且每个项目有零个或多个成员。如果项目处于初始阶段,则没有分配成员。

然后,在项目和成员表中插入一些行:

INSERT INTO
pm.projects(title)
VALUES
('New CRM for Project Sales'),
('ERP Implementation'),
('Develop Mobile Sales Platform');
INSERT INTO
pm.members(name, project_id)
VALUES
('John Doe', 1),
('Lily Bush', 1),
('Jane Doe', 2),
('Jack Daniel', null);

然后,查看一下两个表中的数据

SELECT * FROM pm.projects;

SELECT * FROM pm.members;

最后,使用FULL OUTER JOIN查询项目和成员表中的数据:

SELECT
m.name member,
p.title project
FROM
pm.members m
FULL OUTER JOIN pm.projects p
ON p.id = m.project_id;

在本例中,查询返回参与项目的成员、不参与任何项目的成员以及没有任何成员的项目。

要查找不参与任何项目的成员和没有任何成员的项目,请在上述查询SQL语句中添加WHERE子句:

SELECT
m.name member,
p.title project
FROM
pm.members m
FULL OUTER JOIN pm.projects p
ON p.id = m.project_id
WHERE
m.id IS NULL OR
P.id IS NULL;

通过输出可以清楚知道,Jack Daniel没有参与任何项目,项目Develop Mobile Sales Platform没有任何成员。

posted @   平元兄  阅读(767)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示