当前位置: 首页 > news >正文

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

背景:

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

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

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

select a from b join c)

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

 先写select的部分:

SELECT c.id,                      -- 计算记录IDo1.param AS num1,          -- 第一个操作数的值,命名为num1op.operator,               -- 运算符o2.param AS num2,          -- 第二个操作数的值,命名为num2c.result,                  -- 计算结果c.spend_time,              -- 计算耗时c.created_at               -- 创建时间

 from部分:

FROM cal c            -- 从calculations表查询,简称为c

join部分 :

1.关联第一个操作数:

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

2.关联运算符:

JOIN operators op              -- 关联operators表,简称为opON c.id = op.cal_id          -- 通过cal_id关联

 3.关联第二个操作数:

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

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

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没毛病!! 

http://www.dtcms.com/a/233173.html

相关文章:

  • Compose Multiplatform 实现自定义的系统托盘,解决托盘乱码问题
  • [Java 基础]数组
  • 世事无常,比较复杂,人可以简单一点
  • 钢轨滚动疲劳试验机
  • Spring框架知识体系全面总结
  • 图简记。。
  • 设计模式域——软件设计模式全集
  • 【Web应用】若依框架:基础篇21二次开发-页面调整
  • ceph pool 修改故障域
  • 【java面试】框架篇
  • 前端面试四之Fetch API同步和异步
  • MCP通信方式之Streamable HTTP
  • Prompt Tuning:生成的模型文件有什么构成
  • RC1110 could not open xxx_resource.rc
  • centos升级内核
  • 面试题:Java多线程并发
  • 高压危险铁塔大字金属安全警示牌技术解析
  • linux——磁盘和文件系统管理
  • Hive的TextFile格式优化方法
  • Spring Cloud 2025 正式发布,你的灾难要来了
  • 计算机磁盘旁黄色警示标志消除|BitLocker关闭方法
  • 【Android基础回顾】四:ServiceManager
  • 电子电路:什么是扩散电容?
  • 每日算法 -【Swift 算法】三数之和最接近目标值
  • 亲测解决The scripts pylupdate5.exe, pyrcc5.exe and pyuic5.exe which is not on PATH
  • CppCon 2015 学习:Concurrency TS Editor’s Report
  • <论文>(微软)WINA:用于加速大语言模型推理的权重感知神经元激活
  • 环境变量深度解析:从配置到内核的全链路指南
  • 策略梯度核心:Advantage 与 GAE 原理详解
  • dvwa12——XSS(Stored)