📜  PostgreSQL右连接

📅  最后修改于: 2020-11-30 09:22:39             🧑  作者: Mango

PostgreSQL右连接

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

什么是PostgreSQL右外部连接或右连接子句?

PostgreSQL右连接右连接用于返回右表中的所有行,以及满足连接条件的另一个表中的行(在打开条件中定义)。如果从Left表中找不到相应的记录,它将返回空值

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

下面的Venn图显示了PostgreSQL右连接,在这里我们可以很容易地理解,右连接返回Right表中的所有数据,而只返回left表中的类似数据:

PostgreSQL右连接语法

右连接关键字与SELECT命令一起使用,并且必须在FROM关键字之后编写。

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

在上面的语法,表1所指的左表,并且表2指的是右表,这意味着该特定条件从表2和匹配的记录从表1根据所定义的连接条件返回的所有记录。

我们将按照以下步骤在“右”或“右外部联接”条件的帮助下联接“左”和“右”表:

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

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

PostgreSQL右连接示例

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

使用PostgreSQL右联接联接两个表

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

表1:员工

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

Select * from Employee;

表2:部门

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

Select * from department;

输出量

执行完上述命令后,我们将从部门表中获取数据:

以下查询用于从两个表( 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右连接的工作

  • 在上面的命令中, Employee是左表,部门是右表。
  • PostgreSQL右连接条件从右表(部门表)中选择记录。
  • 然后,它使部门表中的emp_id,dept_name和location列的值相等,并使记录与Left表( Employee )中每一行的emp_id列匹配。
  • 如果这些记录相似,则Right联接将创建一个新行,该行在Select子句中具有列,并将特定行添加到输出中。
  • 否则,Right联接仍会创建一个新行,其中包含两个表中的列,并在结果中添加特定行,并用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右加入USING子句

在这里,我们将了解PostgreSQL右联接如何与USING子句一起使用。

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

在以下命令中,我们在Right连接中使用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子句的右连接

如果我们要从右表(部门)中识别出在左表(Employee )中没有任何匹配行的行,则可以将WHERE条件与Right join一起使用

如下面的命令所示,我们从Employee表和departmen t表中选择行,其中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联接多个表Right JOIN

在上一节中,如果我们要联接两个以上的表并从该特定表获取记录,则现在有两个表,分别是Employee和Department。在这种情况下,我们将使用Right连接。

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

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

Select * from Jobs;

表3:工作

我们将在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 Right JOIN子句获取不匹配的记录

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

如下面的示例所示,Right联接子句用于标识Job_description为Null的雇员

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的右连接子句从两个表或两个以上中选择数据。