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

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.lryc.cn/news/2378269.html

相关文章:

  • 2025系统架构师---选择题知识点(押题)
  • flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...
  • P5682 [CSP-J2019 江西] 次大值
  • Elasticsearch 性能优化面试宝典
  • 【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
  • 无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测
  • 计算机操作系统概要
  • C语言进阶-数组和函数
  • 图片通过滑块小图切换大图放大镜效果显示(Vue3)
  • [SSL]1Panel添加阿里云DNS账户
  • C语言编程中的时间处理
  • 计算机网络 : 网络基础
  • C++跨平台开发:突破不同平台的技术密码
  • 实现 STM32 PWM 输出:原理、配置与应用详解
  • Web 架构之负载均衡会话保持
  • 第一次做逆向
  • 【Linux网络】传输层协议TCP
  • AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
  • 排序算法之基础排序:冒泡,选择,插入排序详解
  • Linux常用命令42——tar压缩和解压缩文件
  • 网络协议分析 实验七 FTP、HTTP、DHCP
  • HTML 表格与div深度解析区别及常见误区
  • Linux 系统中设置开机启动脚本
  • linux-进程信号的产生
  • 内容中台重构企业知识管理路径
  • ubuntu22.04卸载vscode
  • AGI大模型(19):下载模型到本地之ModelScope(魔搭社区)
  • 基于Spring Boot+Layui构建企业级电子招投标系统实战指南
  • Kali安装详细图文安装教程(文章内附有镜像文件连接提供下载)
  • 2.4GHz无线芯片核心技术解析与典型应用