📜  PostgreSQL INNER Join

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

PostgreSQL内部连接

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

PostgreSQL INNER JOIN子句是什么?

在关系数据库中,数据自然地分布在一个以上的表中,要选择聚合数据,我们经常需要从各种表中选择数据。

PostgreSQL内部连接用于仅返回表中的那些记录,这些记录等同于定义的条件,并隐藏其他行和列。在PostgreSQL中,它是默认的Join,因此在查询中不必使用Inner Join关键字。

下面的维恩图显示了PostgreSQL内部联接,我们可以很容易地了解到内部联接仅返回Table1和Table2中的匹配记录:

PostgreSQL内部连接语法

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

以下语法对其进行了更清晰的描述:

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

PostgreSQL内部连接的语法与USING子句

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关键字之后写入连接条件。

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

PostgreSQL内部连接示例

让我们看一个示例,以了解PostgreSQL内部联接的工作方式:

使用PostgreSQL INNER JOIN联接两个表

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

首先,我们将使用CREATE命令创建一个Employee和department表:

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);

执行上述命令后,已成功创建Employee表和Department表。

一旦生成了两个表,我们就可以使用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');

在下面的命令中,我们将值插入Department表中:

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内部联接的工作

  • 内部联接用于分析表1 (员工)中的每一行,并将emp_id列中的值与2(部门)中每一行的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内部使用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子句

我们还可以将内部联接与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 INNER JOIN连接三个表

在本教程的以上部分中,我们已经创建了两个表Employeedepartment 。现在,我们想再联接一个表,并在内部联接的帮助下从该特定表中获取记录。

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

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

成功创建Jobs表后,我们将在INSERT命令的帮助下向其中插入一些值,如以下命令所示:

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

在Jobs表中创建并插入值之后,我们将获得以下输出:

表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允许许多运算符,这些运算符可以与内部联接一起使用,例如等于(=),不等于(!=),大于(>),小于(<)等。

在下面的示例中,我们对内部联接使用不等于(!=)运算符:

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内部连接条件与WHERE子句,USING子句,Operators和table-aliasing一起使用