PostgreSQL 内部连接 PostgreSQL 连接 PostgreSQL 左连接 PostgreSQL 内部连接 在本节中,我们将了解PostgreSQL 内连接的工作原理,它用于从许多表中选择数据。我们还学习了如何在 PostgreSQL 内连接中使用WHERE 子句、USING 子句、运算符和连接三个表,表别名。 什么是 PostgreSQL INNER JOIN 子句? 在关系型数据库中,数据自然分布在多个表中,为了选择聚合数据,我们经常需要从多个表中选择数据。 的PostgreSQL的INNER JOIN用于返回仅从表,这等同于定义的条件和其它皮革的行和列的记录。在PostgreSQL 中,它是默认的 Join,因此在查询中不强制使用Inner Join关键字。 下面的维恩图显示了 PostgreSQL 内连接,我们可以很容易地理解内连接只返回来自表 1 和表 2 的匹配记录: 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:员工 表2:部门 以下查询用于从两个表(Employee和Department)中选择记录: SELECT emp_fname, emp_lname,location,dept_name FROM Employee INNER JOIN department ON Employee.emp_id= department.dept_id; 输出 一旦我们执行了上面的命令,我们将得到以下结果: PostgreSQL 内连接的工作 Inner Join 用于分析Table1(Employee\)中的每一行,并将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 内连接与 USING 子句 在这里,我们将看到 PostgreSQL 内连接如何与USING子句一起工作,因为有时两个表中的列名相似;这就是为什么我们可以使用USING子句来获取值。 在下面的示例中,我们使用USING子句,因为两个表都有一个相似的emp_id列。 SELECT emp_id, emp_fname,location, dept_name FROM Employee INNER JOIN department USING (emp_id); 输出 执行上述语句后,我们将得到以下结果: 使用 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 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:工作 下面的命令用于连接三个表,例如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 子句、运算符和 table-aliasing 一起使用。 PostgreSQL 连接 PostgreSQL 左连接