PostgreSQL Natural join PostgreSQL Self joins PostgreSQL Trigger 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 Self joins PostgreSQL Trigger