首页 > 数据库 >【SQL】⼀条 SQL 查询语句的执⾏顺序

【SQL】⼀条 SQL 查询语句的执⾏顺序

时间:2024-06-24 14:00:24浏览次数:17  
标签:语句 COUNT employees 查询 num SQL employee id

SQL 查询语句的执行顺序与编写查询语句的顺序不同,理解 SQL 查询的执行顺序有助于更好地优化和调试 SQL 查询。下面是 SQL 查询语句的基本的执行顺序:

  1. FROM: 确定数据源,包含表连接(JOIN)操作。
  2. ON: 定义连接条件(对于 JOIN 子句)。
  3. WHERE: 过滤数据,排除不符合条件的行。
  4. GROUP BY: 对数据进行分组。
  5. HAVING: 过滤分组后的数据,类似于 WHERE 但作用于分组后。
  6. SELECT: 投影,选择要返回的列,包含计算派生列。
  7. DISTINCT: 去除重复的行。
  8. ORDER BY: 对结果集进行排序。
  9. LIMIT / OFFSET: 限制返回的行数,跳过指定数量的行。

SQL 查询示例

SELECT DISTINCT department_id, COUNT(employee_id) AS num_employees
FROM employees
WHERE salary > 50000
GROUP BY department_id
HAVING COUNT(employee_id) > 5
ORDER BY num_employees DESC
LIMIT 10;

解释每一步的执行

  1. FROM: 选择数据源 employees 表。

    FROM employees
    
  2. WHERE: 过滤数据,仅保留 salary > 50000 的行。

    WHERE salary > 50000
    
  3. GROUP BY: 对 department_id 列进行分组。

    GROUP BY department_id
    
  4. HAVING: 过滤分组后的数据,仅保留 COUNT(employee_id) > 5 的分组。

    HAVING COUNT(employee_id) > 5
    
  5. SELECT: 选择要返回的列,计算派生列 COUNT(employee_id) AS num_employees

    SELECT department_id, COUNT(employee_id) AS num_employees
    
  6. DISTINCT: 去除重复的 department_id 行(此示例中不需要,因为 GROUP BY 已经确保唯一)。

    SELECT DISTINCT department_id, COUNT(employee_id) AS num_employees
    
  7. ORDER BY: 按 num_employees 降序排序结果。

    ORDER BY num_employees DESC
    
  8. LIMIT: 限制返回的行数,仅返回前 10 行。

    LIMIT 10
    

执行顺序总结

尽管 SQL 语句是按一定的书写顺序,但数据库引擎执行查询的顺序不同。理解这种执行顺序有助于优化查询性能和编写复杂查询。

图示化执行顺序

1. FROM employees
2. WHERE salary > 50000
3. GROUP BY department_id
4. HAVING COUNT(employee_id) > 5
5. SELECT department_id, COUNT(employee_id) AS num_employees
6. DISTINCT (if applicable)
7. ORDER BY num_employees DESC
8. LIMIT 10

这种顺序有助于理解 SQL 查询优化的基本原理,并帮助排除查询中的错误或性能问题。

标签:语句,COUNT,employees,查询,num,SQL,employee,id
From: https://blog.csdn.net/hui_zai_/article/details/139757133

相关文章

  • 【SQL】MySQL 的基础架构
    MySQL是一种广泛使用的开源关系型数据库管理系统,其架构设计具有高度的可扩展性和灵活性。理解MySQL的基础架构有助于更好地配置、优化和管理MySQL数据库。下面是MySQL的基础架构概述:MySQL架构概览MySQL的架构主要分为以下几个层次:连接层(ConnectionLayer)服务层(S......
  • SQLServer游标
    一.游标的作用:定位到结果集中的某一行(结果集:在完成了数据库的操作之后出现的所有的结果的集合)二.游标分为三类1.静态游标(static):操作游标时即使数据发生变化,游标中的数据也不会发生变化2.动态游标(dynamic):操作游标时若数据发生变化,则游标中数据同样改变3.键集驱动游标(keyse......
  • 详解 ClickHouse 的查询优化
    一、单表查询1.使用prewhere替代whereprewhere和where语句的作用相同,都是用来过滤数据prewhere和where语句的不同在于:prewhere只支持MergeTree族系列引擎的表prewhere首先会读取指定的列数据来判断数据过滤,等待数据过滤之后再读取select声明的列字段......
  • 【MySQL】掌握 ALTER TABLE 的艺术:灵活修改表结构的全方位指南
    【MySQL】掌握ALTERTABLE的艺术:灵活修改表结构的全方位指南一、引言:MySQL数据库的基石与本文使命二、技术概述:`ALTERTABLE`的威力初探定义与核心特性核心优势代码示例:增加新列三、技术细节:深入`ALTERTABLE`的背后原理剖析特性与难点四、实战应用:场景与解决方案应......
  • MySQL数据库管理
    一:使用MySQL数据库1:查看数据库结构[root@localhost~]#mysql-uroot-ppwd123mysql>showdatabases;mysql>usemysqlmysql>showtables;mysql>describeuser;mysql>select*fromuser\G;备注:information_schema数据库:保存着关于MySQL服务器所维护的所......
  • MySQL数据库管理
    一、使用MySQL数据库1.1查看数据库结构1.查看当前服务器中的数据库2.查看当前数据库中有哪些表3.查看表的结构        数据库目前标准的指令集是SQL。SQL是StructuredQueryLanguage的缩写,即结构化查询语言。它是1974年由Boyce和Chamberlin提出来......
  • 纯真IP库查询方法(2024-6-19更新qqwry.dat后无法查询,修改代码)
    2024-6-19更新qqwry.dat后使用pthon38那篇文章里的代码无法查询,使用pythom2的代码,修改之后python3可用,将文件放到工程里查询,不用Lib库里的。修改后的qqwry.py如下,python3可用。coding=utf-8forPython2.7为https://pypi.python.org/pypi/qqwry-py3的Python2版版本:2017-10-......
  • 库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践
    1问题域业务发展的初期,我们的数据库架构往往是单库单表,外加读写分离来快速的支撑业务,随着用户量和订单量的增加,数据库的计算和存储往往会成为我们系统的瓶颈,业界的实践多数采用分而治之的思想:分库分表,通过分库分表应对存系统读写性能瓶颈和存储瓶颈;分库分表帮我们解决问题的同时......
  • 使用CEntOS 7.9系统管理MySQL数据库
    一:使用MySQL数据库1:查看数据库结构[root@localhost~]#mysql-uroot-ppwd123mysql>showdatabases;mysql>usemysqlmysql>showtables;mysql>describeuser;mysql>select*fromuser\G;备注:information_schema数据库:保存着关于MySQL服务器所维护的所有其......
  • 【学习中】sql注入-字符型注入
    随笔里的内容都是个人理解,如果有不对的地方,还望各位大佬多多指正。一、理论基础1、什么是字符型注入字符型注入它发生在用户输入的参数被后端系统当作字符串处理,并且这些参数值在SQL查询语句中被特殊符号(如引号或括号)包裹起来的情况下。这种注入攻击的原理在于,如果后端系统......