网站 数据库 sql 导入,上海设计院排名,wps免费模板网站,网站备案审核要多久文章目录 sql的执行顺序sql语句的格式实际的执行顺序#xff1a;虚拟表 vs 数据集虚拟表 结果集总结嵌套查询在sql查询中的执行顺序 前文我们了解了sql常用的语句#xff0c;这次我们对于这些语句来个小思索 戳这里→
sql专题 之 常用命令 sql的执行顺序 SQL语句的执行顺序是… 文章目录 sql的执行顺序sql语句的格式实际的执行顺序虚拟表 vs 数据集虚拟表 结果集总结嵌套查询在sql查询中的执行顺序 前文我们了解了sql常用的语句这次我们对于这些语句来个小思索 戳这里→
sql专题 之 常用命令 sql的执行顺序 SQL语句的执行顺序是数据库查询优化和结果生成的关键 sql语句的格式 select distinct 要查的字段,sum(列字段),开窗函数from 左表l [left|inner] join 右表r on 连接条件where 筛选条件1 and 筛选条件2group by 分组的字段having 组的条件order by 排序的字段limit 限制数量;实际的执行顺序 ① from 左表l ② [left|inner] join 右表r on 连接条件⑧ select ⑨ distinct 要查的字段,⑤ sum(列字段),⑦ 开窗函数③ where 筛选条件1 and 筛选条件2④ group by 分组的字段⑥ having 组的条件⑩ order by 排序的字段⑪ limit 限制数量;1、from 识别查询的数据源即确定要查询的表。 如果from子句中包含多个表那么就会进行第二步 2、join on 对from句中的表进行连接操作。可以是内连接inner join、左连接left join、右连接right join。连接的结果会生成一个新的包含所需数据的虚拟表 3、where … and 对虚拟表中的记录进行进一步的筛选以排除不符合条件的记录。筛选后的结果又会生成一个新的虚拟表 4、group by 对虚拟表中的数据按照一个或者多个行进行分组分组后仍会生成一个新的虚拟表 5、聚合函数avg、sum、count等 使用聚合函数对每个组进行计算并得出每个组的统计信息然后将计算结果添加到group by的虚拟表中 6、having 对分组之后的结果进行进一步的筛选筛选后的结果会生成一个新的虚拟表 7、开窗函数 对分组后的结果进行窗口函数计算并生成一个新的结果集 8、select [distinct] 在having生成的虚拟表中选出符合条件的列并生成一个新的结果集。 如果使用了别名也会进行替换。 9、distinct 去除结果集中的重复行。 去重后的结果也会生成一个新的结果集。 10、order by 对结果集中的数据进行排序。 排序后的结果会生成一个游标注意不是表了。因为排序会改变数据的物理顺序 11、limit/offset返回限定的数量 返回限制的数据数量或者返回指定从哪条记录开始返回。
虚拟表 vs 数据集
虚拟表 通常指一种不实际存储数据的表结构可是是视图、派生表或临时表。基于其他表或者查询的结果动态生成 视图create view my_view as select * from student where class_id is not null这里的my_view是一个视图它是基于student表中class_id不为空的条件生成的一个虚拟表。 视图的虚拟表结构可以被定义并存储在数据库中供后续查询使用 派生表select * from student where class_id is not null as s1s1为派生表是基于student表中class_id不为空的条件动态生成的 虚拟表的特点 虚拟表是基于其他表或查询的结果动态生成的本身不存储数据数据库管理系统可以对虚拟表进行查询优化因为它们通常是基于特定查询需求动态生成的。可以被定义并存储在数据库中供后续查询重用。即可重用性
结果集 SQL查询执行后返回的数据集合称为结果集它包含了符合查询条件的所有行和列。 select sno,name from student where class_id is not null这个查询会返回一个结果集其中包含student表中满足class_id不为空的所有行和sno、name列 特点 包含了查询返回的实际数据这些数据可以是来自一个或多个表的行和列的组合。结果集通常是临时的。一旦查询执行完毕结果集就会被释放除非它被存储在某个地方如变量、临时表或文件中。可处理性的。结果集可以在编程语言中通过API进行处理如遍历、排序、筛选等。
总结
存储与生成 虚拟表通常不存储实际数据而是基于其他表或查询动态生成 结果集是查询执行后实际返回的数据集合。 持久性 虚拟表可以存储在数据库中供后续查询重用 结果集通常是临时的一旦查询完成就会被释放。 用途 虚拟表常用于简化复杂查询、提高查询可读性和可维护性 结果集则是查询执行后的直接输出用于数据处理和展示。
嵌套查询在sql查询中的执行顺序 以下的代码都是简化的我们假设有开窗函数、group by、having、order by、limit等限制 在 select 子句中的嵌套查询 SELECT sno,(SELECT AVG(score) FROM student) AS average_score
FROM student;# 上述sql语句执行起来性能不是很高咱们在这里只是仅作为举例分析切勿较真哈
# 对上述查询的优化如下
WITH AverageScore AS ( SELECT AVG(score) AS avg_score FROM student)
SELECT s.sno, a.avg_score AS average_score
FROM student s, AverageScore a;优先执行嵌套中的子查询然后是外层的顺序按照咱们上方介绍的来 在 WHERE 子句中的嵌套查询 SELECT sno, name
FROM student
WHERE class_id IN (select id FROM class WHERE class_teacher is not null);优先执行嵌套中的子查询然后是外层的顺序按照咱们上方介绍的来
SELECT sno, name
FROM select * from newStudent where sex女as s
where age18from本来就优先from中的嵌套更得优先了。