PostgreSQLNaturaljoin-PostgreSQL教程|
PostgreSQL Natural join
在本节中,我们将了解PostgreSQL Natural join的工作原理,它用于连接两个或两个以上的表。
什么是 PostgreSQL Natural Join 子句?
在PostgreSQL Natural join是多个表结合起来,并作为输出,我们将获得新的行,其目的是参加列每个表。它还用于组合表,这会根据组合表中的相似列名创建隐式连接。
换句话说,我们可以说PostgreSQL Natural Join子句本质上为一组行创建了一个临时表,以便在几个(两个或更多)表上工作。
而那些表会在连接条件中指定,并且至少有一个相互的列,这些标准列之间应该有关系。
默认情况下,PostgreSQL将使用 INNER JOIN 操作。它可以与LEFT JOIN、INNER JOIN或RIGHT JOIN 一起使用,但连接的类型必须在 join 中定义,否则 PostgreSQL 将默认使用 INNER JOIN 操作。
PostgreSQL 自然连接的语法
Natural Join 关键字与SELECT 命令一起使用,并且必须写在FROM关键字之后。
SELECT [Column_list |*]
FROM Table1
NATURAL [INNER, LEFT, RIGHT] JOIN Table2;
注意:在上面的语法中,我们还可以使用星号 (*) 代替 Column-list,因为星号将生成包含以下字段的输出:
- 当两个表都有一个唯一的 column,其中包含不同的列名。
- 当表具有公共字段并且两列具有相同名称时。
PostgreSQL 自然连接示例
让我们看一个例子来理解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_catagories表中,Cousre_id列是外键,其被称为主键的的课程表。
我们将用于执行PostgreSQL 自然连接,因为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:课程
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);
输出
执行上述命令后,我们将得到以下命令:
在PostgreSQL Natural Join 中,似乎没有必要描述 Join 子句,因为它使用依赖于 Common 列的隐式连接条件。
但是我们应该尽可能忽略使用自然连接,因为有时它可能会导致不可预测的结果。
如果我们在两个表中都有两个标准列,让我们看一个示例。因此,为此我们将采用员工和部门表:
员工表的结构
我们将通过使用 Select 命令来查看员工表的结构,如下所示:
Select * from employee;
输出
执行上述语句后,我们将得到以下结果:
部门表的结构
我们将通过使用 Select 命令来查看部门表的结构,如下所示:
Select * from department;
输出
执行上述语句后,我们将得到以下结果:
正如我们在上面的截图中观察到的,employee 和 department表具有相同的emp_id列,因此我们可以使用Natural Join 子句在以下命令中组合这些表:
SELECT *
FROM employee
NATURAL JOIN department;
输出
执行上述命令后,我们将得到以下输出:
在上面的输出中,我们将得到空表,因为两个表还有另一个名为emp_fname 的公共列,并且不能用于 PostgreSQL Natural Join。但是Natural Join条件只使用emp_fname列。
相关文章:
- [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与MariaDB-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- PostgreSQL左连接-PostgreSQL教程|