使用数据库时,可能需要将几个不同表中的数据放在一起。本文将向您展示如何操作。

我已经在这里和这里写了关于SQL连接的文章,但让我们先花点时间回顾一下连接是如何工作的,特别是特定于MySQL的语法。

SQL 连接声明

Join 是一种语句,它允许您将两个表放在一起,匹配彼此相关的行,并仅保留可以匹配的行,而不保留不成对的行。

SELECT * FROM table1 INNER JOIN table2ON table1.id = table2.id;

两个表之间的通用内部连接语句该语句指示哪个是第一个表,然后第二个表名紧跟在关键字之后写入。 SELECT ... FROM INNER JOIN

语句中应如何连接这两个表。在这种情况下,两个表使用关系进行联接。 ON table1.id = table2.id

可以将多个连接语句一起使用,以同时连接多个表。

SELECT *FROM table1INNER JOIN table2ON table1.id = table2.idINNER JOIN table3ON table2.id = table3.id;

三个表之间的通用内部连接语句为此,请添加第二个语句和第二个语句来指示第三个表和第二个关系。 INNER JOIN ON

让我们来谈谈表之间可以建立的关系,以及为什么您可能希望将三个表连接在一起。

SQL 中表之间的关系

当您的表彼此相关时,它们的关系可以是各种类型之一。

一对多

在一对多关系中,第一个表的一行可以与第二个表的多行相关。

在关系数据库中,这可以通过第二个表来实现,该表具有一列,该列表示该行与第一个表的哪一行相关。 first_table_id

多对一

在多对一关系中,第一个表的一行可以与第二个表的一行相关,第二个表的一行可以与第一个表的多行相关。

在关系数据库中,这可以通过第一个表具有一列来实现,该列表示该行与第二个表的哪一行相关。 second_table_id

多对一

多对多

在这种情况下,多行与多行相关。

多对多这种关系不能像 SQL 表那样表示 – 您需要在两个表之间添加耦合表,以便表之间只存在多对一和一对多关系。

中间表的每一行表示左表的行与右表的行之间的一种关系。

在 MySQL 中,中间表将有一列 for 和一列 ,每个组合都是唯一的。 first_table_id second_table_id

在实践中联接 SQL 表

让我们想象一下,我们有一个组织的数据库,其中有一个包含团队(他们的姓名和其他标识信息)的表,以及一个包含项目(名称,进度等)的表。

编号 TEAM_NAME 专业
1 香蕉投掷者 香蕉
2 木材啃食者 啃木头
3 粉红大象 踩在地上
4 蓬松的土豆 工作和睡眠
编号 PROJECT_NAME 进展
1 大坝建设 需要更多的木材啃咬和地面踩踏
2 香蕉蛋糕 有人正在吃掉所有的香蕉
3 睡眠研究 给很多睡眠没有足够的研究

由于一个团队可以处理多个项目,并且一个项目可以由多个团队处理,因此还有第三个表用于跟踪团队与项目的匹配。

PROJECT_ID GROUP_ID
1 2
1 3
2 1
3 1
3 2
3 3
3 4

当我们需要以人类可读的方式查看表中的信息时,我们可以使用语句将所有内容放在一起,如下所示: JOIN

SELECTteams.team_name AS team_name,projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matchesON teams.id = matches.team_id
INNER JOIN matchesON matches.project_id = projects.id
ORDER BY teams.id;

我们从每个表中选择要显示的列,并带有语句。 SELECT

我们指定如何将表的行与语句组合在一起。 ON

我们以我们喜欢的方式对行进行排序。带有语句。 ORDER BY

语句和 表示使用表的行进行组合。输出表的每一行都具有使用表中的项目 ID 和团队 ID 对组合的项目名称和团队名称。 ON teams.id = matches.team_id matches.projects_id = projects.id matches matches

输出表将如下所示。

TEAM_NAME PROJECT_NAME
香蕉投掷者 香蕉蛋糕
香蕉投掷者 睡眠研究
木材啃食者 大坝建设
木材啃食者 睡眠研究
粉红大象 大坝建设
粉红大象 大坝建设
蓬松的土豆 睡眠研究

表中没有直接的列。该表未显示在输出中,但它用作有关如何合并 和 表的行的说明。 matches matches teams projects

SQL 内部联接 – 如何在 SQL 和 MySQL 中联接 3 个表相关推荐

  1. 如果不使用 SQL Mail,如何在 SQL Server 中发送电子邮件

    如果不使用 SQL Mail,如何在 SQL Server 中发送电子邮件 察看本文应用于的产品 文章编号 : 312839 最后修改 : 2006年12月21日 修订 : 10.1 本页 概要 SQ ...

  2. 在mysql中更新数据sql语句怎么写_在MySQL中,更新数据库表记录的SQL语句,包括______语句...

    在MySQL中,更新数据库表记录的SQL语句,包括______语句 答:insert replace update delete 在域F中,设其特征为2,对于任意a,b∈F,则(a+b)2 等于多少 ...

  3. mysql管理应用_如何在PHP和MySQL中制作出色的库存管理应用程序

    mysql管理应用 by Richard 理查德(Richard) 如何在PHP和MySQL中制作出色的库存管理应用程序 (How to Make an Awesome Inventory Manag ...

  4. mysql必会语法_sql语法:sql必读必会(二)mysql中的函数大全

    AVG 函数 作用:AVG 函数返回数值列的平均值.NULL 值不包括在计算中 语法:SELECT AVG(列) FROM 表 求id平均值(实在没字段了,就是意思意思) id大于平均值的记录 COU ...

  5. @sql 单元测试_如何在SQL单元测试中使用假表?

    @sql 单元测试 In this article on SQL unit testing, we will talk about how to isolate SQL unit tests from ...

  6. pl/sql 测试函数_如何在SQL单元测试中使用伪函数?

    pl/sql 测试函数 In this article series, we are exploring SQL unit testing, in general, and also we are r ...

  7. 如何限制服务器sql内存占用,如何在 SQL Server 中使用配置选项调整内存使用量

    更多信息 您可以使用最小服务器内存和最大服务器内存配置选项来设置 SQL Server 数据库引擎使用的内存(缓冲池)量的上下限.在设置最小服务器内存和最大服务器内存选项之前,请查阅以下 Micros ...

  8. MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

  9. h5棋牌源码中MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

最新文章

  1. APUE(第九章)进程关系
  2. 如何让U盘支持大于4G的文件
  3. codeforces div3 D Circular Dance (链式向前星)
  4. 数据库逻辑删除的sql语句_通过数据库的眼睛查询sql的逻辑流程
  5. idea 控制台程序的打包
  6. secureCRT使用退格键(backspace)出现^H解决的方法
  7. 无法将 flash.display::BitmapData 转换为 flash.display.Bitmap
  8. 【华为机试】—— 12字符串反转
  9. dubbo 运行过程
  10. 用神经网络分类根号2与根号x的数据汇总
  11. 关于计算机安全的英语文章,计算机专业英语期末论文
  12. ffmpeg 查看bayer rg8 \ bg8 像素格式图片方法
  13. 将CAD图纸中的线型和文字样式合并的方法技巧(二)
  14. 带选择头像的用户注册页面
  15. 小程序助力银行数字化转型
  16. 图解AODV协议(demo)
  17. 《我是一只IT小小鸟》书评──将要成为IT小小鸟
  18. 如何使用浏览器对网络请求编辑重发(Edit and Resent) 以及: fetch API 中 ReadablleStream 的打印方法
  19. 球差透射电镜测试样品的优势有哪些?
  20. Matlab之求导篇

热门文章

  1. android 实现毫秒定时器,Android实现定时器的五种方法实例详解
  2. 在cmd中输入cat命令时提示:cat不是内部命令或者外部命令也不是可运行的程序或批处理文件
  3. 基于fpga的交通灯的设计
  4. 智慧社区建设项目项目建议书
  5. 利用庖丁解牛工具进行中文分词
  6. 机器学习——聚类——密度聚类法——DBSCAN
  7. 使用List集合的subList方法截取时报java.lang.IndexOutOfBoundsException: toIndex = xx
  8. 信息学奥赛一本通答案dj打印ASCII码1020
  9. QCC5121 QCC5124 蓝牙5.0芯片 蓝牙音频Soc
  10. 政府形象塑造_塑造业务应用程序架构的10大技术趋势