📅  最后修改于: 2020-11-30 09:22:39             🧑  作者: Mango
在本节中,我们将了解PostgreSQL Right join的工作原理,该操作用于从Right表中返回数据。我们还将学习如何使用表别名, WHERE子句,USING子句,以及如何在PostgreSQL右连接子句的帮助下连接多个表。
PostgreSQL右连接或右连接用于返回右表中的所有行,以及满足连接条件的另一个表中的行(在打开条件中定义)。如果从Left表中找不到相应的记录,它将返回空值。
右联接也可以称为右外部联接子句。因此, Outer是可选关键字,在Right Join中使用。在PostgreSQL中,右连接与左连接条件平行,但是会给出与连接表相反的结果。
下面的Venn图显示了PostgreSQL右连接,在这里我们可以很容易地理解,右连接返回Right表中的所有数据,而只返回left表中的类似数据:
右连接关键字与SELECT命令一起使用,并且必须在FROM关键字之后编写。
SELECT columns
FROM table1
Right [OUTER] JOIN table2
ON table1.column = table2.column;
在上面的语法,表1所指的左表,并且表2指的是右表,这意味着该特定条件从表2和匹配的记录从表1根据所定义的连接条件返回的所有记录。
我们将按照以下步骤在“右”或“右外部联接”条件的帮助下联接“左”和“右”表:
注意:在PostgreSQL右连接中,如果表包含相似的列名,则USING和On子句将产生相似的输出。
让我们看一个例子来了解PostgreSQL Right连接是如何工作的:
为此,我们将使用Employee和department表,该表是在PostgreSQL教程的PostgreSQL内部连接部分中创建的。
表1:员工
要查看Employee表的记录,我们将使用SELECT命令,如以下命令所示:
Select * from Employee;
表2:部门
要查看部门表中的记录,我们将使用SELECT命令,如以下命令所示:
Select * from department;
输出量
执行完上述命令后,我们将从部门表中获取数据:
以下查询用于从两个表( Employee和department )中选择记录:
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;
输出量
一旦执行了上面的命令,我们将得到以下结果:
注意:我们可以说,RIGHT JOIN从右表中选择所有行,即使它们与左表中的行没有相似之处。
通常,我们要联接的表将具有名称相似的列,例如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子句一起使用。
例如,上面的表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);
输出量
执行上面的命令后,我们将得到以下结果:
如果我们要从右表(部门)中识别出在左表(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';
输出量
成功执行以上命令后,将给出以下输出:
在上一节中,如果我们要联接两个以上的表并从该特定表获取记录,则现在有两个表,分别是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子句。
如下面的示例所示,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右连接”部分中,我们学习了以下主题: