PostgreSQL 内部连接


PostgreSQL 内部连接

在本节中,我们将了解PostgreSQL 内连接的工作原理,它用于从许多表中选择数据。我们还学习了如何在 PostgreSQL 内连接中使用WHERE 子句、USING 子句、运算符和连接三个表,表别名

什么是 PostgreSQL INNER JOIN 子句?

在关系型数据库中,数据自然分布在多个表中,为了选择聚合数据,我们经常需要从多个表中选择数据。

PostgreSQL的INNER JOIN用于返回仅从表,这等同于定义的条件和其它皮革的行和列的记录。在PostgreSQL 中,它是默认的 Join,因此在查询中不强制使用Inner Join关键字。

下面的维恩图显示了 PostgreSQL 内连接,我们可以很容易地理解内连接只返回来自表 1 和表 2 的匹配记录:

PostgreSQL 内部连接

PostgreSQL 内连接语法

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

下面的语法更清楚地描述了它:

SELECT [column_list |*]  
FROM table1  
INNER JOIN table2  
ON table1.column_name=table2.column.name;

带有 USING 子句的 PostgreSQL 内连接的语法

SELECT [column_list |* ]  
FROM table1  
INNER JOIN table2  
USING (column.name);

带有 WHERE 子句的 PostgreSQL 内部连接的语法

SELECT [column_list |*]  
FROM table1, table2  
WHERE table.column_name=table2.column_name;

我们将按照以下步骤将表 A 与表 B 连接起来:

  • 首先,我们将从两个表(表 1 和表 2)中定义列列表,我们希望在SELECT条件中选择数据。
  • 然后,我们将定义基表,即FROM子句中的表 1 。
  • 最后,我们将描述INNER JOIN 条件中的第二个表(表 2),并将连接条件写在ON关键字之后。

注意:Join 条件返回内部条件中描述的表之间的相似行。

PostgreSQL 内连接示例

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

使用 PostgreSQL INNER JOIN 连接两个表

为此,我们将在 CREATE 命令的帮助下创建两个名为Employee 的表和部门表,并使用INSERT 命令插入一些值。

首先,我们将使用 CREATE 命令创建员工和部门\表:

create table Employee(  
emp_id int primary key,   
emp_fname varchar not null,   
emp_lname varchar not null,   
location varchar(30) );

以下命令用于创建部门\表:

Create table department    
(emp_id int primary key,  
 dept_id int not null,  
 dept_name varchar NOT NULL);

员工和部门\表已执行上述命令后,已成功创建。

一旦生成了两个表,我们就可以使用INSERT命令向其中插入一些值,如下所示:

INSERT INTO Employee (emp_id, emp_fname, emp_lname, location)  
VALUES  
(1, 'John', 'Smith', 'New York'),  
(2, 'Mia', 'Clark','Florida'),  
(3, 'Noah','Rodriguez','Chicago'),  
(4, 'Ava','Gracia','Houston'),  
(5,'James','Luther','Los Angeles');

在下面的命令中,我们在部门\表中插入值:

INSERT INTO department (emp_id, dept_id, dept_name)  
VALUES  
(1, 1, 'ACCOUNTING'),  
(2, 2,'SALES'),  
(3, 3,'RESEARCH'),  
(4, 4,'OPERATIONS'),  
(5, 5,'HUMAN RESOURCES');

Employee 和 Department\表中创建并插入值后,我们将得到以下输出:

表 1:员工

PostgreSQL 内部连接

表2:部门

PostgreSQL 内部连接

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

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

输出

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

PostgreSQL 内部连接

PostgreSQL 内连接的工作

  • Inner Join 用于分析Table1Employee\)中的每一行,并将emp_id列中的值与Table2(department)中每一行的dept_id中的值进行比较。
  • 如果这些记录相似,则内部 Join创建一个包含来自两个表的列的新行,并将特定行增强到输出中。
  • 或者,如果这些记录不相似,则内部 Join 会忽略它们并移动到下一行。

带有 PostgreSQL 内部连接的表别名

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

如果我们在命令中从不同的表中引用具有相似名称的列,就会发生错误,为了避免这个特定的错误,我们需要使用以下语法。

table_name.column_name

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

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

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子句一起工作,因为有时两个表中的列名相似;这就是为什么我们可以使用USING子句来获取值。

在下面的示例中,我们使用USING子句,因为两个表都有一个相似的emp_id列。

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

输出

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

PostgreSQL 内部连接

使用 WHERE 子句的 PostgreSQL 内连接

我们还可以使用带有 WHERE 条件的内连接。在WHERE子句允许我们返回过滤的结果。

在下面的例子中,我们将从两个表Employee\Department\中选择行,其中dept_name等于Sales

SELECT emp_fname, dept_id, dept_name, location   
FROM Employee   
INNER JOIN department    
USING (emp_id) WHERE dept_name ='SALES';

输出

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

PostgreSQL 内部连接

使用 PostgreSQL INNER JOIN 连接三个表

在本教程的上面部分,我们已经创建了两个表,分别是Employee\Department\。现在,我们想再加入一张表,并借助内部联接从该特定表中获取记录。

因此,为此,我们将使用 CREATE 命令再创建一个表作为作业\,如下面的命令所示:

CREATE TABLE Jobs(  
job_id int primary key,   
job_description varchar not null);

一旦乔布斯\表已经创建成功,我们将插入一些值与INSERT命令的帮助,因为我们可以在下面的命令来查看:

INSERT INTO Jobs (job_id, job_description)  
VALUES (1, 'Training'),  
(2, 'Management'),  
(3, 'Executive'),  
(4, 'Non-Executive');

之后创建和插入中的值乔布斯表,我们将得到以下的输出:

表 3:工作

PostgreSQL 内部连接

下面的命令用于连接三个表,例如Employee、department 和 Jobs\。因此,我们将在第一个 INNER JOIN子句之后使用第二个**INNER JOIN**子句:

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

一旦我们实现了上面的查询,我们将得到以下结果:

PostgreSQL 内部连接

注意:要加入三个以上的表,我们可以使用上面的方法。

使用运算符的 PostgreSQL 内连接

PostgreSQL 允许使用许多运算符,我们可以将它们与内部联接一起使用,例如等于 (=)、不等于 (!=)、大于 (>)、小于 (<)等。

在下面的示例中,我们将不等于 (!=)运算符与内连接一起使用:

SELECT emp_fname, emp_lname,location,dept_name  
FROM Employee    
INNER JOIN department     
ON Employee.emp_id= department.dept_id     
WHERE dept_name != 'SALES';

输出

单击Execute按钮后,我们将获得以下输出,其中显示了dept_name不等于SALES 的值

PostgreSQL 内部连接

概述

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

  • 我们使用PostgreSQL的内部联接子句从两个表或多个选择数据超过两个表
  • 我们将 PostgreSQL 内连接条件与WHERE 子句、USING 子句、运算符和 table-aliasing 一起使用