sql查询中如何连接三张表-ag捕鱼王app官网

当前位置:ag捕鱼王app官网 > > 数据库 >

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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 mysql 中声明和使用变量

发布时间:2024/03/26 浏览次数:115 分类:mysql

当你需要在 mysql 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

发布时间:2024/03/26 浏览次数:176 分类:mysql

本教程演示了如何在 mysql 中重置自动增量。

在 mysql 中实现刷新权限

发布时间:2024/03/26 浏览次数:211 分类:mysql

本教程介绍了 mysql 中的刷新权限命令,用于刷新授权表并影响允许的更改。

在 mysql 中设置时区

发布时间:2024/03/26 浏览次数:93 分类:mysql

在本教程中,我们将学习如何在 mysql 服务器中更改时区。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图