PostgreSQL Natural Join自然连接

在本节中,我们将了解PostgreSQL Natural join的工作原理,它用于连接两个或两个以上的表。

什么是 PostgreSQL Natural Join 子句?

自然连接是组合多个表的地方,作为输出,我们将获得新行,用于连接每个表的列。并且它还用于组合表,这会创建一个隐式连接,依赖于组合表中的相似列名。

换句话说,我们可以说PostgreSQL Natural Join子句本质上是为一组行创建一个临时表,以在多个(两个或更多)表上工作。

并且这些表会在连接条件中指定,并且至少有一个相互的列,并且这些标准列之间应该有一个关系。

默认情况下,PostgreSQL将使用 INNER JOIN 操作。它可以与LEFT JOININNER JOINRIGHT JOIN一起使用,但必须在连接中定义连接类型,否则 PostgreSQL 将默认使用 INNER JOIN 操作。

PostgreSQL Natural Join 语法

Natural Join关键字与SELECT命令一起使用,必须写在FROM关键字之后。

SELECT [Column_list |*]  
FROM Table1  
NATURAL [INNER, LEFT, RIGHT] JOIN Table2;  
  • 当两个表都有一个唯一的列时,其中包含不同的列名。
  • 当一个表有一个公共字段并且两个列具有相同的名称时。

PostgreSQL Natural Join自然连接示例

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

使用 PostgreSQL Natural Join 连接两个表

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

首先,我们将使用CREATE命令创建Course_categories 和 Course表:

以下语句用于创建Course_categories表:

CREATE TABLE Course_categories (  
Course_category_id serial PRIMARY KEY,  
Course_category VARCHAR NOT NULL,  
Course_id INT NOT NULL,  
FOREIGN KEY (Course_id) REFERENCES Course(Course_id)  
); 

下面的命令用于创建课程表:

CREATE TABLE Course (  
Course_id serial PRIMARY KEY,  
Course_name VARCHAR NOT NULL  
);  

执行上述命令后, Course_categories 和Course表就创建成功了。

在上表中,所有Course 类别都有零个或多个courses,但这里所有课程都链接到唯一的Course categories。

在Course_catagories表中,Cousre_id列是外键,称为Course表的主键。

我们将使用它来执行PostgreSQL Natural Join,因为Course_id是两个表中的标准列。

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

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

INSERT INTO Course_categories (Course_category, Course_id)  
VALUES  
('Adobe Photoshop', 1),  
('Adobe Illustrator', 1),  
('JavaScript', 2),  
('Advance CSS', 2),  
('Machine Learning', 2),  
('AWS', 3),  
('CCNA', 3),  
('Kubernetes', 3),  
('Social Media Marketing', 4),  
('Digital Marketing', 4);

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

INSERT INTO Course (Course_name)  
VALUES  
('Design'),  
('Development'),  
('IT & Software')  
('Marketing');  

在Course_categories 和 Course表中创建并插入值后,我们将使用SELECT命令查看特定表上的现有记录:

表 1:Course_categories

Select * from Course_categories;  

执行上述命令后,我们将从Course_categories表中得到如下数据:

表2:Course

Select * from Course;  

执行完上面的命令后,我们会从Course表中得到如下记录:

下面的查询使用PostgreSQL Natural Join子句来组合来自Course 和 Course_categories 表的记录。

SELECT *   
FROM Course_categories  
NATURAL JOIN Course;  

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

上面的命令类似于下面的命令,我们使用INNER JOIN子句而不是Natural Join Keyword。

SELECT *   
FROM Course_categories  
INNER JOIN Course USING (Course_id);  

执行上面的语句后,我们会得到如下结果:

正如我们在上面的屏幕截图中观察到的,员工表和部门表具有相同的emp_id列,因此我们可以使用Natural Join 子句在以下命令中组合这些表:

SELECT *   
FROM employee  
NATURAL JOIN department;  

执行上述命令后,我们将得到以下输出:

在上面的输出中,我们将得到空表,因为这两个表还有另一个名为emp_fname的公共列,并且不能用于 PostgreSQL Natural Join。但是Natural Join条件只使用emp_fname列。

热门文章

优秀文章