网站底部放什么,半商城性质网站源代码,wordpress无法预览,官方网站建设维护合作协议参考练习题#xff1a;https://blog.csdn.net/weixin_49627122/article/details/126380916
SQL顺序
在 SQL 查询中#xff0c;SELECT 语句的执行顺序不是按照查询语句的书写顺序执行的#xff0c;而是按照逻辑执行阶段来进行。一般来说#xff0c;SQL 查询的执行顺序可以…参考练习题https://blog.csdn.net/weixin_49627122/article/details/126380916
SQL顺序
在 SQL 查询中SELECT 语句的执行顺序不是按照查询语句的书写顺序执行的而是按照逻辑执行阶段来进行。一般来说SQL 查询的执行顺序可以分为以下几个步骤 FROM 指定要查询的表执行这一步时会生成一个虚拟的结果集包含了所有所需的列和行。 JOIN 如果查询涉及到多个表会执行连接操作JOIN来合并不同表中的数据。 WHERE 对每一行应用 WHERE 子句中的条件筛选出满足条件的行。 GROUP BY 根据 GROUP BY 子句中的列进行分组。 HAVING 对每个分组应用 HAVING 子句中的条件筛选出满足条件的分组。 SELECT 选择要在结果集中显示的列应用聚合函数如果有的话。 ORDER BY 对结果集进行排序。 LIMIT/OFFSET 如果使用了 LIMIT 或 OFFSET最后会应用这些限制。
虽然这是一个一般性的执行顺序但实际的数据库系统可能会根据查询的具体情况进行一些优化以提高性能。在复杂的查询中数据库系统可能会重新安排执行计划例如使用索引来加速搜索以获得更高的执行效率。
需要注意的是虽然 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);