PostgreSQL连接

121 阅读1分钟

内连接(INNER JOIN)

COMPANY表

NVIDIA_Share_qBtSUf1b1l.png

DEPARTMENT表

NVIDIA_Share_ZTsO7nKdFs.png

内连接,取交集
my=# SELECT COMPANY.ID, COMPANY.NAME, DEPARTMENT.DEPT
my-# FROM COMPANY
my-# INNER JOIN DEPARTMENT
my-# ON COMPANY.ID = DEPARTMENT.ID;

NVIDIA_Share_YbxU1K9TZp.png

左外连接

左外连接返回从“`ON`”条件中指定的左侧表中的所有行,只返回满足条件的另一个表中的行

NVIDIA_Share_JM1ccoTIyn.png

my=# SELECT COMPANY.ID,COMPANY.NAME,DEPARTMENT.DEPT
my-# FROM COMPANY
my-# LEFT OUTER JOIN DEPARTMENT
my-# ON COMPANY.ID = DEPARTMENT.ID;
左表全部被列出,右表匹配不上则留空

NVIDIA_Share_HuWRcbcKKZ.png

右外连接

与左外连接相反

语法

SELECT table1.columns, table2.columns
FROM table1 RIGHT OUTER JOIN table2 
ON table1.common_filed = table2.common_field;

my=# SELECT COMPANY.ID,COMPANY.NAME,DEPARTMENT.DEPT
my-# FROM COMPANY
my-# RIGHT OUTER JOIN DEPARTMENT
my-# ON COMPANY.ID = DEPARTMENT.ID;

NVIDIA_Share_HFvcOWeKqF.png

全外连接

从左表和右表中返回所有行。 它将`NULL`置于不满足连接条件的位置
语法
SELECT table1.columns, table2.columns FROM 
table1 FULL OUTER JOIN table2
ON table1.common_filed = table2.common_field; 

my=# SELECT COMPANY.ID,COMPANY.NAME,DEPARTMENT.DEPT
my-# FROM COMPANY
my-# FULL OUTER JOIN DEPARTMENT
my-# ON COMPANY.ID = DEPARTMENT.ID;
左右全部匹配,不匹配的留空

NVIDIA_Share_czmaFwo4o6.png

交叉连接

笛卡尔积,第一个表的每一行与第二个表的每一行相匹配,如果`table1`具有“`x`”行,而`table2`具有“`y`”行,则所得到的表将具有(`x * y`)行 
语法

SELECT coloums FROM table1 CROSS JOIN table2 
例子 后面就是循环,一共60

NVIDIA_Share_cJdQT2lsyH.png