[PostgreSQL] JOIN 的类型
作为备忘录,有时会纠结使用哪个选项。
进行验证时使用的Postgres版本是12.7。
前提 tí)
使用以下表定义和数据进行验证。
CREATE TABLE companies(
id bigint primary key,
name varchar(50) NOT NULL,
tel varchar(50)
);
CREATE TABLE employees(
id bigint primary key,
company_id bigint,
name varchar(50) NOT NULL,
age integer,
FOREIGN KEY (company_id) references companies(id)
);
INSERT INTO public.companies(id, name, tel)
VALUES
(1, '株式会社ほげ', '00-0000-0000'),
(2, '株式会社ふが', '00-0000-1111'),
(3, '株式会社ぴよ', '00-0000-2222');
INSERT INTO public.employees(id, company_id, name, age)
VALUES
(1, 1, 'テスト太郎', 25),
(2, 1, 'テスト次郎', 20),
(3, 2, 'テスト三郎', 30),
(4, null, 'テスト五郎', 40);
(内部)连接
只显示符合联接条件(ON)的记录。
SELECT
e.id AS employee_id,
e.name AS employee_name,
c.id AS company_id,
c.name AS company_name
FROM employees e
JOIN companies c ON c.id = e.company_id
结果 –
employee_idemployee_namecompany_idcompany_name1テスト太郎1株式会社ほげ2テスト次郎1株式会社ほげ3テスト三郎2株式会社ふが
左(外)连接
左外部結合意味著,会显示所有左表(FROM指定的表格),
对于不能匹配到結合条件的右表(JOIN指定的表格)会以NULL的形式进行結合。
SELECT
e.id AS employee_id,
e.name AS employee_name,
c.id AS company_id,
c.name AS company_name
FROM employees e
LEFT JOIN companies c ON c.id = e.company_id
结果
employee_idemployee_namecompany_idcompany_name1テスト太郎1株式会社ほげ2テスト次郎1株式会社ほげ3テスト三郎2株式会社ふが4テスト五郎
右外连接
右外部結合的意思是将右表(通过JOIN指定的表)的所有记录显示出来,并且将不满足连接条件的左表(通过FROM指定的表)设置为NULL进行连接。
SELECT
e.id AS employee_id,
e.name AS employee_name,
c.id AS company_id,
c.name AS company_name
FROM companies c
RIGHT JOIN employees e ON e.company_id = c.id
结果
LEFT JOIN的中文意思是「左联结」。
全(外)连接
完全外部联接。
将左联接和右联接的结果合并在一起。
SELECT
e.id AS employee_id,
e.name AS employee_name,
c.id AS company_id,
c.name AS company_name
FROM employees e
FULL JOIN companies c ON c.id = e.company_id
结果 (jié guǒ)
employee_idemployee_namecompany_idcompany_name1テスト太郎1株式会社ほげ2テスト次郎1株式会社ほげ3テスト三郎2株式会社ふが4テスト五郎
3株式会社ぴよ
笛卡尔积
提取两个表的所有记录,并显示所有组合。
SELECT
e.id AS employee_id,
e.name AS employee_name,
c.id AS company_id,
c.name AS company_name
FROM employees e
CROSS JOIN companies c
ORDER BY e.id
结果 (jié guǒ)
employee_idemployee_namecompany_idcompany_name1テスト太郎1株式会社ほげ1テスト太郎2株式会社ふが1テスト太郎3株式会社ぴよ2テスト次郎1株式会社ほげ2テスト次郎2株式会社ふが2テスト次郎3株式会社ぴよ…………
以下为参照:
依照
根据
按照
参考
-
- PostgreSQL 12.4文書 7.2. テーブル式
- 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典