SQL语句各部分的执行顺序
select distinct...from t1 (left/right) join t2  on t1.xx=t2.xx where t1.xx=? and t2.xx=? group by t1.xx having ...order by ... limit ..

where:  筛选条件   分组之前
having: 筛选条件 前提:必然先分组 对分组后的结果再次筛选
where,group by,having三者同时出现,则顺序一定为:
where....group by ... having .... limit用法:
limit m,n 从索引m处开始,筛选n条件数据 -- 实现分页
limit m 从第一条数据开始,筛选前m条 1. from join 产生虚拟表v1 - 产生的是笛卡尔积
笛卡尔积:两表完全连接的结果叫做笛卡尔积,会产生m*n条数据
2. on 根据连接条件进行筛选,基于V1,产生虚拟表v2
3. left/right join 若是外连接,将主表中的所有数据进行补充到v2表中
4. where 根据查询条件,从v2中进行数据筛选,产生虚拟表v3
5. group by 对v3分组,产生虚拟表v4
经常会和聚合函数配合使用,聚合函数的结果在group by之后就会产生
使用场景: 统计每个班级的学生人数
select count(xx) ....group by bj_id
统计每个部门的人数
select count(xx) ... group by d.id
6. having 对分组后的结果再次筛选 ,产生虚拟表v5
7. select 选择最终要显示的字段,产生虚拟表v6
8. distinct 对结果集进行去重,产生虚拟表v7
9. order by 对结果根据某字段进行升序/降序排列
10. limit 选择需要的数据 where 和having区别:
where是在分组之前进行数据筛选,having是对分组后的结果再次筛选
where,group by,having若同时出现,则三者的顺序一定是
where在 group by之前,having在group by之后

009 面试题 SQL语句各部分的执行顺序的更多相关文章

  1. SQL 语句与性能之执行顺序

    select * , t3.Name from t1 left join t2 on t1.sysno = t2.Asysno left join t3 on t3.sysno = t2.Bsysno ...

  2. sql 语句 嵌套子查询 执行顺序分析

    --创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))inser ...

  3. SQL语句到底是怎么执行的

    写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必要了解一下sql语句的执行顺序.可以有时间自己写一个简单的数据库,理解会更加深入.下面就 ...

  4. SQL 语句在查询分析器执行很快,程序 Dapper 参数化查询就很慢(parameter-sniffing)

    这个问题困扰我好长时间了,使用SQLSERVER 事务探查器找到执行超时的SQL语句,参数查询都是通过执行exe sp_executesql 的存储过程调用,因为它能够分析并缓存查询计划,从而优化查询 ...

  5. [sqlserver脚本]查看指定SQL语句生成了哪些执行计划

    参考SQL技术内幕写了一段脚本,可以通过这段脚本查看执行指定SQL语句后,系统生成了哪些执行计划.使用时注意以下几点: 修改use MyTest,换成自己的数据库名字. 将 exec sp_page_ ...

  6. 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction

    今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...

  7. MYSQL语句中SELECT语句及其子句的执行顺序

    SELECT语句的执行的逻辑查询处理步骤:(8)SELECT (9)DISTINCT(11)<TOP_specification> <select_list>(1)FROM & ...

  8. 普通SQL语句可以用Exec执行

    例如存储过名为:myprocedure use AdventureWorks create procedure myprocedure @city varchar(20) as begin selec ...

  9. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

随机推荐

  1. Django安装+创建一个Django项目

    安装 选用pycharm    在终端输入命令:pip install django 安装完成后创建项目 1.在你想创建项目的目录下输入下面的代码 2.django-admin startprojec ...

  2. 手把手教你在Linux中快速检测端口的 3 个小技巧

    一个执着于技术的公众号 前言 无论是要解决网络连接问题还是配置防火墙,第一件事是要检查系统实际打开了哪些端口. 本文介绍了几种快速查找 Linux 系统上哪些端口向外部开放的方法. 什么是开放端口 监 ...

  3. JDBC:加载数据库驱动、连接数据库(详细讲解)

    加载数据库驱动: 1)由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构: 2)JDBC将整个数据库驱动器在底层抽象成 ...

  4. PowerJob高级特效-容器部署完整教程

    介绍 powerjob提供了容器功能,用来做一些灵活的任务处理.这里容器为 JVM 级容器,而不是操作系统级容器(Docker).(至于为什么取"容器"这个有歧义的名字是因为作者没 ...

  5. 用更云原生的方式做诊断|大规模 K8s 集群诊断利器深度解析

    背景 通常而言,集群的稳定性决定了一个平台的服务质量以及对外口碑,当一个平台管理了相当规模数量的 Kubernetes 集群之后,在稳定性这件事上也许会"稍显被动". 我们可能经常 ...

  6. 从URL输入到页面展现到底发生什么?DNS 解析&TCP 连接

    DNS 解析:将域名解析成 IP 地址 TCP 连接:TCP 三次握手 发送 HTTP 请求 服务器处理请求并返回 HTTP 报文 浏览器解析渲染页面 断开连接:TCP 四次挥手 一.什么是URL? ...

  7. 降维、特征提取与流形学习--非负矩阵分解(NMF)

    非负矩阵分解(NMF)是一种无监督学习算法,目的在于提取有用的特征(可以识别出组合成数据的原始分量),也可以用于降维,通常不用于对数据进行重建或者编码. NMF将每个数据点写成一些分量的加权求和(与P ...

  8. 用OpenMV自动识别颜色序列

    目录 用OpenMV自动识别颜色序列 用OpenMV自动识别颜色序列 新年假期过去啦~ 主控:OpenMV3 M7摄像头(STM32F765) IDE:OPENMV官方IDE 我将Capstone期间 ...

  9. GitHub 官方大动作频频「GitHub 热点速览 v.22.24」

    作者:HelloGitHub-小鱼干 本周 GitHub 官方 Blog 很是热闹,GitHub 官方大动作频频也带来了 GitHub Blog 的频繁更新,除了本周 News 快读收录的 GitHu ...

  10. 一文带你搞懂 JWT 常见概念 & 优缺点

    在 JWT 基本概念详解这篇文章中,我介绍了: 什么是 JWT? JWT 由哪些部分组成? 如何基于 JWT 进行身份验证? JWT 如何防止 Token 被篡改? 如何加强 JWT 的安全性? 这篇 ...