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

SQL语句执行问题

执行顺序

select  [all|distinct]
<目标列的表达式1> AS [别名],
<目标列的表达式2> AS [别名]...
from <表名1或视图名1> [别名],<表名2或视图名2> [别名]...
[where <条件表达式>]
[group by <列名>]
[having <条件表达式>]
[order by <列名> [asc(从小到大排序)|desc(从大到小排序)]]
[limit <数字或列表>];

通过FROM子句中找到需要查询的表,

通过WHERE子句进行非聚合函数筛选判断:

通过GROUP BY子句完成分组操作;

通过聚合函数完成计算操作

通过HAVING子句完成组函数筛选判断,

通过SELECT子句选择显示的列或表达式及组函数,

通过ORDER BY子句进行排序操作。

通过LIMIT子句进行分页操作

别名的用法详解

select empno,ename,count(*) as sum 
from emp 
where sum>7  
group by sum 
having sum>7 
order by sum 
limit(5,2)修正后
select empno,ename,count(*) as sum 
from emp 
group by empno,ename 
having sum>7 
order by sum 
limit 5,2;

原语句存在的问题

  1. where** 子句中使用聚合函数**:WHERE 子句在分组操作(GROUP BY)之前执行,而 sum 是通过 GROUP BY 分组后使用 COUNT(*) 计算出来的聚合结果,所以不能在 WHERE 子句中引用聚合别名 sum
  2. limit** 语法错误**:LIMIT 子句的正确语法是 LIMIT offset, row_count 或者 LIMIT row_count,在 MySQL 中不需要括号,正确写法是 LIMIT 5, 2

别名用法详解

列别名

在 SQL 中,列别名用于为查询结果中的列指定一个新的名称。可以使用关键字 AS 来指定别名,也可以省略 AS。在你的语句里,count(*) as sum 就是给 COUNT(*) 函数的结果指定了一个别名 sum,之后在 HAVINGORDER BY 子句中就可以使用这个别名来引用聚合结果。

表别名

表别名用于为表指定一个简短的名称,在多表查询时可以简化表名的引用,提升 SQL 语句的可读性。不过在你给出的语句里没有使用表别名。

修正后的 SQL 语句及解释

-- 从 emp 表中查询数据
SELECT empno,ename,COUNT(*) AS sum
FROM emp
-- 按 empno 和 ename 进行分组
GROUP BY empno, ename
-- 筛选出分组后记录数大于 7 的组
HAVING sum > 7
-- 按照记录数(即 sum 列)进行升序排序
ORDER BY sum
-- 跳过前 5 条记录,取接下来的 2 条记录
LIMIT 5, 2;

代码解释

  1. SELECT** 子句**:从 emp 表中选择 empnoename 列,同时使用 COUNT(*) 函数统计每个分组中的记录数,并将结果命名为 sum
  2. FROM** 子句**:指定数据来源为 emp 表。
  3. GROUP BY** 子句**:按照 empnoename 进行分组,这样 COUNT(*) 函数会分别统计每个 empnoename 组合的记录数。
  4. HAVING** 子句**:在分组之后进行筛选,只保留 sum 大于 7 的分组。
  5. ORDER BY** 子句**:按照 sum 列进行升序排序。
  6. LIMIT** 子句**:跳过前 5 条记录,取接下来的 2 条记录。
http://www.xdnf.cn/news/6837.html

相关文章:

  • 【AI算法工程师面试指北】ResNet为什么用avgpool结构?
  • Python 基础之函数命名
  • Redis持久化机制详解:保障数据安全的关键策略
  • MySQL表的约束(上)
  • LeetCode 第 45 题“跳跃游戏 II”
  • Spring之Bean的初始化 Bean的生命周期 全站式解析
  • PyTorch实现CrossEntropyLoss示例
  • AIGC在电商行业的应用:革新零售体验
  • 计算机网络(1)——概述
  • Docker入门指南:镜像、容器与仓库的核心概念解析
  • Redis的Hot Key自动发现与处理方案?Redis大Key(Big Key)的优化策略?Redis内存碎片率高的原因及解决方案?
  • STM32 | FreeRTOS 递归信号量
  • C# 深入理解类(静态函数成员)
  • golang中的反射示例
  • 大模型AI原生应用效果测试与评估视频课来啦
  • Python多进程编程执行任务
  • sudo apt update是什么意思呢?
  • (3)python爬虫--Xpath
  • 2022河南CCPC(前四题)
  • pip升级或者安装报错怎么办?
  • 致敬经典 << KR C >> 之打印输入单词水平直方图和以每行一个单词打印输入 (练习1-12和练习1-13)
  • 最小二乘法拟合直线,用线性回归法、梯度下降法实现
  • SLAM定位常用地图对比示例
  • 【深度学习新浪潮】大模型时代,我们还需要学习传统机器学习么?
  • 计算机视觉与深度学习 | Python实现EMD-VMD-LSTM时间序列预测(完整源码和数据)
  • React Flow 节点事件处理实战:鼠标 / 键盘事件全解析(含节点交互代码示例)
  • 跨国应用程序的数据存储方案常见的解决方案
  • R语言空间数据处理入门教程
  • Redis——过期删除策略和内存
  • golang读、写、复制、创建目录、删除、重命名,文件方法总结