PostgreSQL右连接-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 右连接语法
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;
表2:部门
要查看部门表中的记录,我们将使用 SELECT 命令,如下面的命令所示:
Select * from department;
输出
执行完上面的命令后,我们会从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;
输出
一旦我们执行了上面的命令,我们将得到以下结果:
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 使用 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);
输出
执行上述命令后,我们将得到以下结果:
使用 WHERE 子句的 PostgreSQL 右连接
如果我们想从右表(部门)中识别在左表(员工)中没有任何匹配行的行,我们可以使用带有右连接的 WHERE 条件。
正如我们在下面的命令中看到的,我们从两个表Employee和department中选择行,其中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 连接多个表
在上面的部分中,如果我们想连接两个以上的表并从该特定表中获取记录,我们现在有两个表作为员工和部门。在这种情况下,我们将使用 Right join。
例如,这里我们将采用我们在 PostgreSQL 教程的 PostgreSQL 内部联接部分中创建的Jobs表。
要查看Jobs表的值,我们将使用SELECT子句,如下所示:
Select * from Jobs;
表 3:Jobs
我们将在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 子句。
正如我们在下面的例子中看到,右联接子句是用来识别一个员工,其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 右连接部分,我们学习了以下主题:
- 我们使用带有表别名、USING 子句、WHERE 子句的 PostgreSQL 右连接条件,并获得不匹配的数据。
- 我们使用PostgreSQL的右连接子句从两个表或多个选择数据超过两个表。
相关文章:
- [PostgreSQL教程]PostgreSQL教程-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL特性-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL版本-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL语法-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL选择数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL显示表-PostgreSQL教程|
相关推荐:
- [PostgreSQL教程]PostgreSQL与SQLite-PostgreSQL教程|
- [PostgreSQL教程]MongoDB与PostgreSQL-PostgreSQL教程|
- [PostgreSQL教程]psqlcommands-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLDate&TimeFunction-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLFunctions-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL禁用触发器-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL左连接-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLANDCondition-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL获取子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQL与SQLServer-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLEXCEPT-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- psqlcommands-PostgreSQL教程|
- PostgreSQLDate&TimeFunction-PostgreSQL教程|
- PostgreSQL删除触发器-PostgreSQL教程|
- PostgreSQLOrderby子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLAlias-PostgreSQL教程|
- PostgreSQLNot-NullConstraint-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|