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,根据规则拼凑而成。

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

代码示例

查询结果为字段情况

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

查询结果为表的情况

sql 复制代码
# 查询结果为表的情况
select st.id, st.name, scco.score
from student st
         inner join (select sc.score, sc.s_id
                     from scores sc
                              inner join course co on sc.c_id = co.id
                     where co.id = 1
                       and sc.score > 60) as scco on scco.s_id = st.id;

查询结果为子查询情况

sql 复制代码
#查询结果为 子查询条件的情况
select st.id, st.name
from student st
where st.id in (select sc.s_id
                from scores sc
                         left join course co on sc.c_id = co.id
                where co.id = 1
                  and sc.score > 60);
相关推荐
TDengine (老段)2 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
螺蛳粉 螺蛳粉4 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
泡泡鱼(敲代码中)6 小时前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
这个DBA有点耶8 小时前
从OLTP到OLAP到HTAP:数据库负载分类的技术演进与选型指南
数据库·mysql·架构
YangYang9YangYan10 小时前
商业数据分析校招项目怎么选,附项目设计与简历包装思路
大数据·数据库·数据分析
李白客10 小时前
数据库培训怎么选?零基础到DBA的学习路线与机构认证对比(2026)
数据库·学习
shark-chili10 小时前
关于AI辅助编程的认知
数据库·人工智能·redis·macos·缓存
SendTomo10 小时前
.ico透明图标在线生成下载平台深度解析
大数据·数据结构·数据库·数据仓库·个人开发
蓝速科技10 小时前
国产化信创终端等保合规核心防护与落地方案丨蓝速科技
大数据·运维·数据库·人工智能·科技
IvorySQL11 小时前
PostgreSQL 日报|在线校验和特性被回退(9 月 17 日)
数据库·人工智能·postgresql