PostgreSQL自连接查询

首先SQL中的自连接查询是一种比较特殊的多表查询方式,其特殊之处就在于数据来源于同一张表。

很多时候我们在第一次接触自连接查询时会比较迷乱,不知道怎么去理解。所以我们在处理这种自连接查询时,不要去刻意的在意只有一张表,而是把这张来源表当作一个视图,我们需要查数据,就给其取一个别名,这样就刻意把之前的表认为成另一个表。这样当我们需要时关联几张表时,就取几个别名,就当作是几张表,下意识的去当作不同的表,只是内容字段是一致就可以了。

那么自连接的应用情景:1.所要筛选的条件来源于一张表中,需要在表中根据某些列进行筛选的;

                                    2.表中存在层级关系的,如:员工,员工上级,这时就需要自连接来筛选了。

下边举个例子:

创建一张员工表:

    CREATE TABLE "public"."emp" (
        "id" SERIAL NOT NULL,
        "name" varchar(255) COLLATE "default",
        "leader" int4,
        "age" int4,
        "gender" varchar(255) COLLATE "default",
        CONSTRAINT "emp_pkey" PRIMARY KEY ("id")
    )

 

数据:

    insert into emp VALUES (1,'john', null, 30, 'men');
    insert into emp VALUES (2,'may', 1, 31, 'women');
    insert into emp VALUES (3,'wolf', 2, 29, 'men');
    insert into emp VALUES (4,'mar', 1, 40, 'women');
    insert into emp VALUES (5,'jack', 4, 28, 'men');
    insert into emp VALUES (6,'lili', 4, 37, 'women');

如查出所有员工的上级:

SELECT
    emp1. NAME emp_name,
emp2. NAME leader
FROM
    emp emp1
LEFT JOIN emp emp2 ON emp1.leader = emp2. ID;

结果如下:

PostgreSQL自连接查询_第1张图片

你可能感兴趣的:(PostgreSQL)