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教程-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与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|