sql查询中如何连接三张表
在单个 sql 中连接三个表
如果大家不熟悉 sql join
的概念,查询可能会非常棘手。 sql 连接一直很棘手,不仅对于新程序员而且对于许多其他从事编程和 sql 工作超过 2 到 3 年的人来说也是如此。 在 sql join 上有足够多的东西让一些人感到困惑,包括各种类型的 sql join,如 inner
和 outer join
,left
和 right
外连接,cross join
等。在所有这些基础知识中,join 最重要的是,组合多个表 . 如果在一个 select 查询中需要来自多个表的数据,则需要使用子查询或 join。
大多数时候我们只连接两个表,如 employee 和 department,但有时大家可能需要连接两个以上的表,一个流行的情况是在 sql 中连接三个表。
以三表联表为例,表1关联表2,表2关联表3,仔细观察会发现表2是一个联表,包含了表1和表2的主键。 正如我所说,理解三个或更多表的连接可能会非常混乱。
我发现将表关系理解为主键和外键有助于减轻混淆,而不是经典的匹配行范式。
sql join也是sql面试中很热门的话题,一直有一些关于joins的问题,比如
inner join
和outer join
的区别,用join的sql查询比如employee department关系和left
和right 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查询连接mysql中的三个表
为了更好地理解 sql 查询中 3 个表的连接,让我们看一个示例。 考虑流行的员工和部门模式示例。 在我们的例子中,我们使用了一个名为 register 的链接表,它将 employee 链接或关联到 department。
employee 表的主键(emp_id)是 register 表的外键,同理,department 表的主键(dept_id)是 register 表的外键。
顺便说一句,掌握 sql 连接的唯一方法是尽可能多地练习。
为了编写一个 sql 查询来打印员工姓名和部门名称,我们需要连接 3 个表。 第一个 join 语句将连接 employee 和 register 并创建一个临时表,该表将 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 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
在 pandas 中执行 sql 查询
发布时间:2024/04/24 浏览次数:1195 分类:python
-
本教程演示了在 python 中对 pandas dataframe 执行 sql 查询。
pandas 中的 join 和 merge 有什么区别
发布时间:2024/04/20 浏览次数:72 分类:python
-
本文将为我们介绍 pandas 中 join 和 merge 方法之间的区别。
如何在 mysql 中声明和使用变量
发布时间:2024/03/26 浏览次数:115 分类:mysql
-
当你需要在 mysql 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。
发布时间:2024/03/26 浏览次数:176 分类:mysql
-
本教程演示了如何在 mysql 中重置自动增量。
在 mysql 中使用 mysqladmin 刷新主机解除阻塞
发布时间:2024/03/26 浏览次数:82 分类:mysql
-
你将了解阻止主机的原因。此外,通过使用 phpmyadmin 和命令提示符刷新主机缓存来解除阻塞的不同方法和效果。