更新时间: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;
    

相关文档