PostgreSQL 右连接


PostgreSQL 右连接

在本节中,我们将了解PostgreSQL Right join的工作原理,它用于从 Right 表中返回数据。我们还学习了如何使用table-aliasing、WHERE 子句、USING 子句,以及PostgreSQL 右连接子句的帮助下连接多个表**。

什么是 PostgreSQL Right Outer Join 或 Right Join 子句?

PostgreSQL的右连接右外连接用于右表返回所有行,并从另一个表中的行,其中加入的条件是在ON状态满足定义。如果从左表中没有找到相应的记录,它将返回空值

右连接的也可称为右外连接子句。因此,Outer是可选关键字,用于Right Join。在PostgreSQL 中,右**联接左联接条件平行,但它会给出与联接**表相反的结果。

下面的维恩图显示了 PostgreSQL 右联接,我们可以很容易地理解右联接返回右表中的所有数据,而仅返回左表中的相似数据:

PostgreSQL 右连接

PostgreSQL 右连接语法

Right Join 关键字与 SELECT 命令一起使用,并且必须写在FROM关键字之后。

SELECT columns    
FROM table1    
Right [OUTER] JOIN table2    
ON table1.column = table2.column;

在上面的语法中,table1指的是左表,而table2指的是右表,这意味着特定条件将根据定义的连接条件返回表 2 中的所有记录和table1 中的匹配记录。

我们将按照以下步骤在Right 或 Right Outer Join条件的帮助下连接Left 和 Right 表

  • 首先,我们将从两个表中定义列列表,我们要在SELECT条件中选择数据。
  • 然后,我们将定义Right table,即FROM子句中的表 2
  • 最后,我们将描述Left table,即Right JOIN条件中的表1,并在ON关键字之后写入连接条件。

注意:在 PostgreSQL Right Join 中,如果表包含相似的列名,则 USING 和 On 子句会产生相似的输出。

PostgreSQL 右连接示例

让我们看一个例子来理解PostgreSQL 右连接是如何工作的:

使用 PostgreSQL Right Join 连接两个表

为此,我们将使用我们在PostgreSQL 教程的PostgreSQL 内连接部分中创建的Employee 和 Department\表。

表 1:员工

要查看Employee\表的记录,我们将使用SELECT 命令,如下面的命令所示:

Select * from Employee;

PostgreSQL 右连接

表2:部门

要查看部门\表中的记录,我们将使用 SELECT 命令,如下面的命令所示:

Select * from department;

输出

执行完上面的命令后,我们会从department\表中获取数据:

PostgreSQL 右连接

以下查询用于从两个表(EmployeeDepartment)中选择记录:

SELECT department.emp_id,dept_name,location,emp_fname, emp_lname  
FROM Employee    
Right JOIN department     
ON department.emp_id = Employee.emp_id    
order by emp_id;

输出

一旦我们执行了上面的命令,我们将得到以下结果:

PostgreSQL 右连接

PostgreSQL 右连接的工作

  • 在上面的命令中,员工\是左表,部门\是右表。
  • PostgreSQL 右连接条件从右表中选择记录,即部门表。
  • 然后它使部门\表中emp_id、dept_name 和位置列的值相等,并将记录与左表 ( Employee )中每一行的emp_id列进行匹配。
  • 如果这些记录相似,则右连接创建一个新行,其中包含选择子句中的列并将特定行添加到输出中。
  • 否则,右连接仍会创建一个新行,其中包含两个表中的列并在结果中添加特定行,并用NULL填充左表 ( Employee ) 中的列。

注意:我们可以说 RIGHT JOIN 从右表中选择所有行,即使它们没有来自左表的相似行。

使用 PostgreSQL 右连接进行表别名

通常,我们要连接的表将具有与emp_id列名称相似列。

我们将使用表别名来分配连接表的短名称,以使命令更易于理解。

在下面的命令中,我们将使用表别名,它返回与上面类似的结果:

SELECT e.emp_id, emp_fname, emp_lname,location,dept_name     
FROM Employee e   
INNER JOIN department d   
ON e.emp_id = d.dept_id;

输出

一旦我们执行了上面的命令,我们将得到以下输出:

PostgreSQL 右连接

PostgreSQL 使用 USING 子句右连接

在这里,我们将看到 PostgreSQL 右连接如何与 USING 子句一起工作。

例如,上面的表Employee和department\包含一个相似的列,即emp_id;因此,在这些情况下,我们使用 USING 子句从表中获取值。

在以下命令中,我们在Right join中使用USING子句,它返回值emp_id、emp_fname、emp_lname、dept_name 和 location,因为两个表都有一个相似的列:emp_id

SELECT emp_id, emp_fname, emp_lname,dept_name,location  
FROM Employee    
RIGHT JOIN department     
USING(emp_id);

输出

执行上述命令后,我们将得到以下结果:

PostgreSQL 右连接

使用 WHERE 子句的 PostgreSQL 右连接

如果我们想从右表(部门)中识别在左表(员工)中没有任何匹配行的行,我们可以使用带有右连接的 WHERE 条件。

正如我们在下面的命令中看到的,我们从两个表Employeedepartment\中选择行,其中dept_name等于'RESEARCH'

SELECT emp_id, emp_fname, emp_lname,dept_name,location  
FROM Employee    
RIGHT JOIN department     
USING(emp_id) WHERE dept_name ='RESEARCH';

输出

成功执行上述命令后,它将给出以下输出:

PostgreSQL 右连接

使用 PostgreSQL Right JOIN 连接多个表

在上面的部分中,如果我们想连接两个以上的表并从该特定表中获取记录,我们现在有两个表作为员工和部门\。在这种情况下,我们将使用 Right join。

例如,这里我们将采用我们在 PostgreSQL 教程的 PostgreSQL 内部联接部分中创建的Jobs表。

要查看Jobs表的值,我们将使用SELECT子句,如下所示:

Select * from Jobs;

表 3:Jobs

PostgreSQL 右连接

我们将在PostgreSQL Right Join的帮助下连接三个表,例如Employee、Department 和 Jobs\,如我们在以下命令中看到的:

SELECT emp_id, emp_fname, dept_name, job_description  
FROM Employee   
RIGHT JOIN department USING (emp_id)   
RIGHT JOIN Jobs    
ON department.emp_id = jobs.job_id  
ORDER BY emp_id;

输出

成功执行上述命令后,我们将给出以下结果:

PostgreSQL 右连接

使用 PostgreSQL Right JOIN 子句获取不匹配的记录

如果我们想从表中获取数据,该表不包含来自其他表的任何类似数据行,那么在这种情况下,我们将使用 PostgreSQL Right Join 子句。

正如我们在下面的例子中看到,右联接子句是用来识别一个员工,其Job_description

SELECT emp_id, emp_fname, emp_lname, job_description   
FROM Employee  
RIGHT JOIN Jobs  
ON Employee.emp_id=Jobs.job_id   
WHERE Job_description is NULL;

输出

一旦我们执行了上面的命令,我们将得到以下结果:

PostgreSQL 右连接

概述

PostgreSQL 右连接部分,我们学习了以下主题:

  • 我们使用带有表别名、USING 子句、WHERE 子句的 PostgreSQL 右连接条件,并获得不匹配的数据
  • 我们使用PostgreSQL的右连接子句从两个表或多个选择数据超过两个表