此外,如何适应左外加入,右外加入和全外加入?


当前回答

最简单的定义

内部加入:从两个表中返回相匹配的记录。

Full Outer 加入:从两个表中返回相匹配和未相匹配的记录,从两个表中返回未相匹配的记录为零。

左外加入:只从左侧的桌子上返回匹配和不匹配的记录。

右外加入:只从右侧的桌子上返回相匹配和不相匹配的记录。

短短

相匹配 + 左不相匹配 + 右不相匹配 = 全外加入

相匹配 + 左不相匹配 = 左外加入

相匹配 + 相匹配不相匹配 = 相匹配不相匹配

相匹配 = 内部加入

其他回答

内部加入 - 使用相同的查询中的任何一个内部加入将交叉两个表,即它们有两个行,左外加入 - 左外加入将提供所有行在A,加上任何常见行在B。

他们不显示一个十字路口和一个内部联盟之间的区别,例如,或者更一般地显示不同类型的联盟预言之间的区别,或者提供一个框架,以便思考他们将如何运作。

此分類上一篇


選擇 A.Colour, B.Colour 從 A CROSS JOIN B

一些例子

上面是经典的equi加入。

内部合并条件不一定是平等条件,也不需要从两个(甚至任何)表中提到列。 评估 A.Colour NOT IN(“绿色”,“蓝色”)在交叉合并返回的每个行。

选择 A.Colour, B.Colour FROM A INNER JOIN B ON 1 = 1

此分類上一篇

此分類上一篇

此分類上一篇

选择 A.Colour, B.Colour FROM A FULL OUTER JOIN B ON 1 = 0

此分類上一篇

此分類上一篇

此分類上一篇

饰 SQL Fiddle

内部加入。

一个加入是结合两个表的行列,一个内部加入试图根据您在查询中指定的标准匹配两个表,并只返回相匹配的行列,如果加入中的第一个表中的行列匹配第二个表中的两个行列,那么两个行列将返回结果。

外面加入

左派加入试图从第一张桌子到第二张桌子中的列相匹配,如果它无法找到一场比赛,它将从第一张桌子返回列,并将第二张桌子中的列空白(零)。

一次示威

设置

跳进 psql 并创建一个小数据库的猫和人类. 你可以只是复制这个整个部分。

CREATE DATABASE catdb;
\c catdb;
\pset null '[NULL]' -- how to display null values

CREATE TABLE humans (
  name text primary key
);
CREATE TABLE cats (
  human_name text references humans(name),
  name text
);

INSERT INTO humans (name)
VALUES ('Abe'), ('Ann'), ('Ben'), ('Jen');

INSERT INTO cats (human_name, name)
VALUES
('Abe', 'Axel'),
(NULL, 'Bitty'),
('Jen', 'Jellybean'),
('Jen', 'Juniper');

求求

SELECT
humans.name AS human_name,
cats.name AS cat_name
FROM humans
[SOMETHING JOIN] cats ON humans.name = cats.human_name
ORDER BY humans.name;

任何人,没有猫或猫,没有人,都被排除在外。

 human_name | cat_name
------------+-----------
 Abe        | Axel
 Jen        | Jellybean
 Jen        | Juniper

A FULL OUTER JOIN returns all humans and all cats, with zero if there is no match on both sides. 全外加入将返回所有人类和所有猫,如果双方都没有比赛,则零。

 human_name | cat_name
------------+-----------
 Abe        | Axel
 Ann        | [NULL]
 Ben        | [NULL]
 Jen        | Jellybean
 Jen        | Juniper
 [NULL]     | Bitty

 human_name | cat_name
------------+-----------
 Abe        | Axel
 Ann        | [NULL]
 Ben        | [NULL]
 Jen        | Jellybean
 Jen        | Juniper

每只猫,没有人,都会在人名列中获得零;每只猫,没有人,都会被排除。

 human_name | cat_name
------------+-----------
 Abe        | Axel
 Jen        | Jellybean
 Jen        | Juniper
 [NULL]     | Bitty

你可以看到,虽然一个内部加入只获得匹配夫妇,每个类型的外部加入包括一些没有比赛的项目。

加入本身意味着内部左加入,右加入和外加入,所有意味着外加入。

在内部加入中,我们可以在不同表中获取相同/相关数据的数据。

我们有三种类型的外部加入:

左加入,右加入,全加入

我们还将从左(第一)表中获取不相关的数据。

SELECT Sname, Tname FROM student s LEFT JOIN 教师 t ON s.id = t.id;

右外加入,我们还从正确的表中获取与此无关的数据(第二表)

SELECT Sname, Tname FROM student s RIGHT JOIN 教师 t ON s.id = t.id;

我们可以使用 FULL OUTER JOIN 当我们想要从两个表中获取所有 / 完整的数据时,丢失的数据将以 NULL 填写。

SELECT Sname, Tname FROM student s FULL JOIN 教师 t ON s.id = t.id;