更新时间:2026-10-21 GMT+08:00
连接查询
连接查询也可称为跨表查询,需要关联多个表进行查询。
-- 建表并插入数据。 gaussdb=# CREATE TABLE emp( id int, -- 员工编号。 name varchar, -- 员工姓名。 deptno int -- 所属部门编号。 ); gaussdb=# CREATE TABLE dept( deptno int, -- 所属部门编号。 depname varchar -- 部门名称。 ); gaussdb=# INSERT INTO emp VALUES (1, 'Joe', 10), (2, 'Scott', 20), (3, 'Ben', 999); -- Ben还没有确认是哪一个部门所以部门编号是999。 gaussdb=# INSERT INTO dept VALUES (10, 'hr'), (20, 'it'), (30, 'sal'); -- sal部门没有员工。
- 内连接(INNER JOIN)
gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it (2 rows) - 左连接(LEFT JOIN)
gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it 3 | Ben | (3 rows) - 右连接(RIGHT JOIN)
gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 RIGHT JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it | | sal (3 rows) - 全连接(FULL JOIN)
gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 FULL JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it | | sal 3 | Ben | (4 rows) -- 删除表。 gaussdb=# DROP TABLE emp,dept;
- 多表连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
gaussdb=# CREATE TABLE t1(a int, b int, c int); gaussdb=# CREATE TABLE t2(a int, b int, c int); gaussdb=# CREATE TABLE t3(a int, b int, c int); gaussdb=# INSERT INTO t1 VALUES(1,generate_series(1,10),generate_series(1,20)); gaussdb=# INSERT INTO t2 VALUES(generate_series(1,5),generate_series(1,10),generate_series(1,20)); gaussdb=# INSERT INTO t3 VALUES(generate_series(6,10),generate_series(1,20),generate_series(1,10)); gaussdb=# SELECT * FROM t1 LEFT JOIN t2 ON t1.a =t2.a INNER JOIN t3 ON t1.b = t3.b AND t2.c = t3.c; a | b | c | a | b | c | a | b | c ---+---+----+---+---+---+---+---+--- 1 | 1 | 1 | 1 | 1 | 1 | 6 | 1 | 1 1 | 6 | 6 | 1 | 6 | 6 | 6 | 6 | 6 1 | 1 | 11 | 1 | 1 | 1 | 6 | 1 | 1 1 | 6 | 16 | 1 | 6 | 6 | 6 | 6 | 6 (4 rows) gaussdb=# DROP TABLE t1,t2,t3;
父主题: SELECT