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