迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 >

SQL查询中如何连接三张表

作者:迹忆客 最近更新:2023/02/03 浏览次数:

在单个 SQL 中连接三个表

如果大家不熟悉 SQL Join 的概念,查询可能会非常棘手。 SQL 连接一直很棘手,不仅对于新程序员而且对于许多其他从事编程和 SQL 工作超过 2 到 3 年的人来说也是如此。 在 SQL JOIN 上有足够多的东西让一些人感到困惑,包括各种类型的 SQL JOIN,如 INNEROUTER joinLEFTRIGHT 外连接,CROSS join 等。在所有这些基础知识中,Join 最重要的是,组合多个表 . 如果在一个 SELECT 查询中需要来自多个表的数据,则需要使用子查询或 JOIN。

大多数时候我们只连接两个表,如 EmployeeDepartment,但有时大家可能需要连接两个以上的表,一个流行的情况是在 SQL 中连接三个表。

以三表联表为例,表1关联表2,表2关联表3,仔细观察会发现表2是一个联表,包含了表1和表2的主键。 正如我所说,理解三个或更多表的连接可能会非常混乱。

我发现将表关系理解为主键和外键有助于减轻混淆,而不是经典的匹配行范式。

SQL Join也是SQL面试中很热门的话题,一直有一些关于Joins的问题,比如INNER JOINOUTER JOIN的区别,用JOIN的SQL查询比如Employee Department关系和LEFTRIGHT OUTER JOIN的区别等等。 简而言之,从经验和面试的角度来看,这是 SQL 中最重要的主题之一。


SQL中的三表JOIN语法

下面是连接三个或更多表的通用 SQL 查询语法。 这个 SQL 查询应该适用于所有主要的关系数据库,如 MySQL、Oracle、Microsoft SQLServer、Sybase 和 PostgreSQL:

SELECT t1.col, t3.col
FROM table1
JOIN table2 ON table1.primarykey = table2.foreignkey
JOIN table3 ON table2.primarykey = table3.foreignkey

我们首先连接表 1 和表 2,这会生成一个临时表,其中包含来自 table1 和 table2 的组合数据,然后将其连接到 table3。 这个公式可以扩展到3个以上的表到N个表,你只需要确保SQL查询应该有N-1条连接语句才能连接N个表。 连接两个表,我们需要 1 个连接语句,连接 3 个表,我们需要 2 个连接语句。

 

sql joins 指导和语法
sql joins 指导和语法

 


SQL查询连接MySQL中的三个表

为了更好地理解 SQL 查询中 3 个表的连接,让我们看一个示例。 考虑流行的员工和部门模式示例。 在我们的例子中,我们使用了一个名为 Register 的链接表,它将 Employee 链接或关联到 Department

Employee 表的主键(emp_id)是 Register 表的外键,同理,Department 表的主键(dept_id)是 Register 表的外键。

顺便说一句,掌握 SQL 连接的唯一方法是尽可能多地练习。

为了编写一个 SQL 查询来打印员工姓名和部门名称,我们需要连接 3 个表。 第一个 JOIN 语句将连接 EmployeeRegister 并创建一个临时表,该表将 dept_id 作为另一列。 现在,第二个 JOIN 语句会将此临时表与 dept_id 上的 Department 表连接起来,以获得所需的结果。

这是连接 3 个表的完整 SELECT SQL 查询示例,它可以扩展为连接 3 个或 N 个以上的表。

mysql> SELECT * FROM Employee;
+--------+----------+--------+
| emp_id | emp_name | salary |
+--------+----------+--------+
| 1      | James    |   2000 |
| 2      | Jack     |   4000 |
| 3      | Henry    |   6000 |
| 4      | Tom      |   8000 |
+--------+----------+--------+
4 rows IN SET (0.00 sec)

mysql> SELECT * FROM Department;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
| 101     | Sales     |
| 102     | Marketing |
| 103     | Finance   |
+---------+-----------+
3 rows IN SET (0.00 sec)

mysql> SELECT * FROM Register;
+--------+---------+
| emp_id | dept_id |
+--------+---------+
|      1 |     101 |
|      2 |     102 |
|      3 |     103 |
|      4 |     102 |
+--------+---------+
4 rows IN SET (0.00 sec)

mysql> SELECT emp_name, dept_name
       FROM Employee e
       JOIN Register r ON e.emp_id=r.emp_id
       JOIN Department d ON r.dept_id=d.dept_id;
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| James    | Sales     |
| Jack     | Marketing |
| Henry    | Finance   |
| Tom      | Marketing |
+----------+-----------+
4 rows IN SET (0.01 sec)

如果您想更好地理解它,请尝试逐步连接表。 因此,与其一次性连接 3 个表,不如先连接 2 个表,然后查看结果表。 这就是如何在关系数据库中的一个 SQL 查询中连接三个表。

顺便说一下,在这个 SQL JOIN 示例中,我们使用了 ANSI SQL,它可以在另一个关系数据库以及 Oracle、SQL Server、Sybase、PostgreSQL 等中工作。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便