Mysql多表查询 思路 ——示例——sql顺序

参考练习题:https://blog.csdn.net/weixin_49627122/article/details/126380916

SQL顺序 

在 SQL 查询中,SELECT 语句的执行顺序不是按照查询语句的书写顺序执行的,而是按照逻辑执行阶段来进行。一般来说,SQL 查询的执行顺序可以分为以下几个步骤:

  1. FROM: 指定要查询的表,执行这一步时会生成一个虚拟的结果集,包含了所有所需的列和行。

  2. JOIN: 如果查询涉及到多个表,会执行连接操作(JOIN)来合并不同表中的数据。

  3. WHERE: 对每一行应用 WHERE 子句中的条件,筛选出满足条件的行。

  4. GROUP BY: 根据 GROUP BY 子句中的列进行分组。

  5. HAVING: 对每个分组应用 HAVING 子句中的条件,筛选出满足条件的分组。

  6. SELECT: 选择要在结果集中显示的列,应用聚合函数(如果有的话)。

  7. ORDER BY: 对结果集进行排序。

  8. LIMIT/OFFSET: 如果使用了 LIMITOFFSET,最后会应用这些限制。

虽然这是一个一般性的执行顺序,但实际的数据库系统可能会根据查询的具体情况进行一些优化,以提高性能。在复杂的查询中,数据库系统可能会重新安排执行计划,例如使用索引来加速搜索,以获得更高的执行效率。

需要注意的是,虽然 SQL 查询的逻辑执行顺序如上所述,但在实际执行中,数据库引擎可能会根据优化器的决策进行重新排列操作,以提高性能。

思路

多表最重要的还是要理清楚逻辑,根据slq运行顺序,将需求一步步的分为多个sql,根据规则拼凑而成。

字段可以作为,表查询结果的字段,  表也可以作为,查询结果的表

代码示例

查询结果为字段情况

# 查询结果为字段情况
SELECT st.id,st.name,(SELECT sc.s_idFROM scores scINNER JOIN course co ON sc.c_id = co.idWHERE co.id = 1AND sc.score > 60AND st.id = sc.s_idLIMIT 1 -- 限制只返回一个值) AS scco
FROM student st
WHERE (SELECT sc.s_idFROM scores scINNER JOIN course co ON sc.c_id = co.idWHERE co.id = 1AND sc.score > 60AND st.id = sc.s_idLIMIT 1 -- 限制只返回一个值) IS NOT NULL;

查询结果为表的情况

# 查询结果为表的情况
select st.id, st.name, scco.score
from student stinner join (select sc.score, sc.s_idfrom scores scinner join course co on sc.c_id = co.idwhere co.id = 1and sc.score > 60) as scco on scco.s_id = st.id;

查询结果为子查询情况

#查询结果为 子查询条件的情况
select st.id, st.name
from student st
where st.id in (select sc.s_idfrom scores scleft join course co on sc.c_id = co.idwhere co.id = 1and sc.score > 60);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北斗网格二维编码

东经为 E —— east:东方 西经为 W —— west:西方 南纬为 S —— south:南方 北纬为 N —— north 将计算好的编码添加到列表中 my_list [1, 2, 3] my_list.append(4) 参考文献 一级北斗网格计算 高等地图学作业_已知经纬度求图幅编号_.Vector的博客-CSDN博客 其他级别…

spring面试题—— 事务

一:Spring事物是什么? spring事务的本质是底层数据库对事务的支持,spring并不直接管理事物,而是提供了多种事务管理器,具体的实现由持久化框架自己来做。 二:Spring为什么需要事物? add方法&…

如何使用jszip文件格式转换与批量打包成zip下载

文章目录 概要技术细节文件下载小结 概要 在前端开发中,我们经常需要处理文件的格式转换和下载。本文将介绍如何通过 JavaScript 实现将文件 URL 转换为 Blob 类型格式或者 arraybuffer 格式,并通过 JSZip 库实现文件的压缩和下载。 技术细节 先安装所…

数据清洗、特征工程和数据可视化、数据挖掘与建模的主要内容

1.4 数据清洗、特征工程和数据可视化、数据挖掘与建模的内容 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.4节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数据科学…

vue3.2版本setup语法糖

setup语法糖&#xff1a; 一、Vue3.0 <script>里定义的变量、属性和方法必须 return 出来&#xff0c;<template>中才能使用&#xff1b;这样会导致在页面上变量会出现很多次。vue3.2只需在script标签中添加setup&#xff0c;就可以帮助我们解决这个问题,无需再写…

JVM 对象内存布局篇

对象的实例化 创建对象有哪些方式&#xff1f; 1、new对象 最常见的方式 变形1:X的静态方法 变形2:XxxBuilder/XxxFactory的静态方法 2、Class的newlnstance0:反射的方式&#xff0c;只能调用空参的构造器&#xff0c;权限必须是public 3、Constructor的newinstance(X):反射的…

软件多开助手的创新使用:在同一设备上玩转多个游戏

软件多开助手&#xff1a;在同一设备上玩转多个游戏的创新使用 随着科技的不断发展&#xff0c;手机和电脑已经成为我们生活中必不可少的工具。众多游戏爱好者也越来越追求在同一设备上同时体验多个游戏的乐趣。而软件多开助手的出现为这一需求提供了创新的解决方案。 传统上…

可视化监管云平台EasyCVR宠物粮食食品厂智能视频监控方案

由于我国养宠物群体的不断膨胀&#xff0c;宠物市场也占据了经济的很大一部分&#xff0c;宠物做为人类的好朋友&#xff0c;可以给人们带来极高的精神抚慰&#xff0c;作为“毛孩子”家长&#xff0c;爱宠人士自然不会亏待自家宠物&#xff0c;都会选择最好的口粮以供宠物食用…

【开源】基于Vue+SpringBoot的教学过程管理系统

项目编号&#xff1a; S 054 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S054&#xff0c;文末获取源码。} 项目编号&#xff1a;S054&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…

CompletableFuture:Java中的异步编程利器

前言&#xff1a; 在秋招的面试中&#xff0c;面试官问了很多关于异步编程相关的知识点&#xff0c;朋友最近也和我聊到了这个话题&#xff0c;因此今天咱们来讨论讨论这个知识点&#xff01; 随着现代软件系统的日益复杂&#xff0c;对于非阻塞性和响应性的需求也在不断增加…

Vue学习计划-Vue2--Vue核心(六)过滤器和自定义指令

1. 过滤器 定义&#xff1a;对要显示的数据进行特定格式转换再显示&#xff08;适用于一些简单逻辑的处理&#xff09;语法&#xff1a; 注册过滤器&#xff1a;Vue.filter(name, callback) 或 new Vue{filters:{}}使用过滤器&#xff1a;{{ xx | 过滤器名 }} 或 v-bind:属性 …

3 文本分类入门finetune:bert-base-chinese

项目实战&#xff1a; 数据准备工作 bert-base-chinese 是一种预训练的语言模型&#xff0c;基于 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;架构&#xff0c;专门用于中文自然语言处理任务。BERT 是由 Google 在 2018 年提出的一…

gpt1与bert区别

区别1&#xff1a;网络结构&#xff08;主要是Masked Multi-Head-Attention和Multi-Head-Attention&#xff09; gpt1使用transformer的decoder&#xff0c;单向编码&#xff0c;是一种基于语言模型的生成式模型&#xff0c;更适合生成下一个单词或句子 bert使用transformer的…

Domino多Web站点托管

大家好&#xff0c;才是真的好。 看到一篇文档&#xff0c;大概讲述的是他在家里架了一台Domino服务器&#xff0c;上面跑了好几个Internet的Web网站&#xff08;使用Internet站点&#xff09;。再租了一台云服务器&#xff0c;上面安装Nginx做了反向代理&#xff0c;代理访问…

轨迹分析:Palantir评估细胞分化潜能 类似于monocle2

轨迹分析是单细胞测序分析中重要的组成部分&#xff0c;它基于细胞谱系之间“具有中间态细胞”的理论基础&#xff0c;通过结合先验知识&#xff08;细胞注释、markers&#xff09;、细胞基因表达改变等&#xff0c;为在单细胞测序数据赋予了“假时间”&#xff08;pseudotime&…

图的深度优先搜索(数据结构实训)

题目&#xff1a; 图的深度优先搜索 描述&#xff1a; 图的深度优先搜索类似于树的先根遍历&#xff0c;是树的先根遍历的推广。即从某个结点开始&#xff0c;先访问该结点&#xff0c;然后深度访问该结点的第一棵子树&#xff0c;依次为第二顶子树。如此进行下去&#xff0c;直…

每天五分钟计算机视觉:通过残差块搭建卷积残差神经网络Resnet

本文重点 随着深度神经网络的层数的增加,神经网络会变得越来越难以训练,之所以这样就是因为存在梯度消失和梯度爆炸问题。本节课程我们将学习跳跃连接方式,它可以从某一网络层获取激活a,然后迅速反馈给另外一层,甚至是神经网络的更深层,从而解决梯度消失的问题。 传统的…

关于命令行方式的MySQL服务无法启动问题原因之一解决

这里无法启动服务的原因为系统某些进行占用了3306端口问题 当你遇到无法启动的问题时&#xff0c;可以尝试通过netstat -ano命令查看系统进行信息&#xff0c;验证是否3306端口被占用 在本地地址列如果发现3306端口被占用&#xff0c;则通过 taskkill /f /pid 进程id命令关闭进…

matlab 点云放缩变换

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 缩放可以独立应用于三个坐标轴,如将点 ( x , y , z ) ( x

dtm分布式事务框架之SAGA 实战

一.dtm分布式事务框架之SAGA 1.1DTM介绍 DTM是一款开源的分布式事务管理器&#xff0c;解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 通俗一点说&#xff0c;DTM提供跨服务事务能力&#xff0c;一组服务要么全部成功&#xff0c;要么全部回滚&#xff0c;避免只更…