三表查询SQL怎么写?----小白初学+案例引入

背景:

接上一篇的数据库三范式设计数据库三范式设计---小白初学+案例引入-CSDN博客

为了从我们设计的三张表中联合获取完整的计算历史记录,我们来写下对应的SQL查询语句!

首先确认整体的查询语句结构:

select a from b join c)

sql 复制代码
SELECT [要选择的字段]
FROM [主表]
JOIN [关联表1] ON [关联条件]
JOIN [关联表2] ON [关联条件]
JOIN [关联表3] ON [关联条件]
ORDER BY [排序字段]
LIMIT [返回条数]

先写select的部分:

sql 复制代码
SELECT 
    c.id,                      -- 计算记录ID
    o1.param AS num1,          -- 第一个操作数的值,命名为num1
    op.operator,               -- 运算符
    o2.param AS num2,          -- 第二个操作数的值,命名为num2
    c.result,                  -- 计算结果
    c.spend_time,              -- 计算耗时
    c.created_at               -- 创建时间

from部分:

sql 复制代码
FROM cal c            -- 从calculations表查询,简称为c

join部分 :

1.关联第一个操作数:

sql 复制代码
JOIN operands o1               -- 关联operands表,简称为o1
  ON c.id = o1.cal_id          -- 通过cal_id关联
  AND o1.position = 1          -- 只取position=1的记录(第一个操作数)

2.关联运算符:

sql 复制代码
JOIN operators op              -- 关联operators表,简称为op
  ON c.id = op.cal_id          -- 通过cal_id关联

3.关联第二个操作数:

sql 复制代码
JOIN operands o2               -- 再次关联operands表,简称为o2
  ON c.id = o2.cal_id          -- 通过cal_id关联
  AND o2.position = 2          -- 只取position=2的记录(第二个操作数)

4.最后的排序和限制部分:

sql 复制代码
ORDER BY c.created_at DESC     -- 按创建时间降序排列(最新记录在前)
LIMIT ?                        -- 限制返回条数(参数化查询)

为什么需要这样设计?

  1. 数据关联:通过calculation_id将三张表的记录关联起来

  2. 操作数定位:使用position=1/2区分第一个和第二个操作数

  3. 结果整合:将分散存储的数据重新组合成完整的计算记录


实际效果:

第一步:cal表:比如我们就看这个id=38的,可以知道其耗时10ms,结果是22

第二步:operands表:找到前面说的38,对应的两个操作数是66和3

第三步:operators表:也是找到38,运算符号是除号

最后:总结可以知道 ,66/3=22没毛病!!

相关推荐
小猿姐1 小时前
实测对比:哪款开源 Kubernetes MySQL Operator 最值得用?(2026 深度评测)
数据库·mysql·云原生
倔强的石头_3 小时前
从 “存得下” 到 “算得快”:工业物联网需要新一代时序数据平台
数据库
TDengine (老段)4 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
GottdesKrieges4 小时前
OceanBase数据库备份配置
数据库·oceanbase
SPC的存折5 小时前
MySQL 8组复制完全指南
linux·运维·服务器·数据库·mysql
运维行者_5 小时前
OpManager MSP NetFlow Analyzer集成解决方案,应对多客户端网络流量监控挑战
大数据·运维·服务器·网络·数据库·自动化·运维开发
炸炸鱼.6 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
softshow10266 小时前
Etsy 把 1000 个 MySQL 分片迁进 Vitess
数据库·mysql
Ronaldinho Gaúch7 小时前
MySQL基础
数据库·mysql
不剪发的Tony老师7 小时前
Noir:一款键盘驱动的现代化数据库管理工具
数据库·sql