当前位置: 首页 > 编程笔记 >

一文告诉你Sql的执行顺序是怎样的

禹智渊
2023-03-14
本文向大家介绍一文告诉你Sql的执行顺序是怎样的,包括了一文告诉你Sql的执行顺序是怎样的的使用技巧和注意事项,需要的朋友参考一下

学过 Sql,或了解过 Sql 的人,应该都会写下面这行代码:

select * from t

上面代码表示查询 t 表中的所有信息,是 Sql 查询中最基础,最简单的一行代码,你可以把它理解成是其他编程语言中的Hello World。

select *只是你迈入 Sql 大门的第一步,在真实工作中,肯定不止这么简单的。我们来看一个例子。

现在有下面一个表 t ,存储了每个商品类别的成交明细,我们需要通过下面这张表获取订单量大于10对应的类别,并从中取出订单量前3的商品类别,会有一些测试的订单(catid=c666的为测试),我们需要过滤掉。

catid orderid
c1 1
c1 2
c1 3
c2 4
c2 5
c3 6
c100 10000

要做上面的需求,我们的 Sql 可以这么写:

select
 catid,
 count(orderid) as sales
from
 t
where 
 catid <> "c666"
group by 
 catid
having
 count(orderid) > 10
order by 
 count(orderid) desc
limit 3

上面的 Sql 代码中涉及到select、from、where、group by、having、order by、limit这7个关键词,基本上包括了 Sql 中所有的查询关键词,上面的顺序是这7个关键词的语法顺序,也就是你在写代码的时候,应该按照这个顺序写,那这7个关键词的执行顺序是什么样的呢?也就是先执行哪个再执行哪个?

可以肯定的是,肯定不是从上至下执行,如果是这样子的话,就没有写这篇文章的必要啦。

我一直坚持的一个态度就是,计算机在做事的时候和人没什么两样,基本逻辑和流程都一样,毕竟计算机也是人设计出来的。那既然这样,我们就来看看,如果是我们自己手动去做上面那个需求的时候,我们会怎么去做。

首先我是不是需要知道我要从哪个表去获取我想要的,也就是from;现在我知道从哪个表获取了,可是并不是这个表里面所有的信息都是我需要的,我需要把一些不需要的去掉(比如测试订单),或是把一些我需要的筛选出来,这就是where;现在我把我需要的订单明细筛选出来,可是我想要每个品类的订单量,这个时候是不是需要做一个分组聚合,也就是group by;分组聚合后的结果也并不是我们全部都要,我们只要大于10的品类,所以需要把大于10的筛选出来,非大于10的品类过滤掉,这就是having;现在我们想要的大部分信息都已经出来了,我们就可以用select把他们查询出来了;因为我们最后需要取前三的品类,所以我们需要把查询出来的结果进行一个降序排列,即order by;最后一步就是只把前三显示出来,做一个限制就行,也就是limit。

以上就是 Sql 语句的一个基本执行顺序,总结一下就是:

from-where-groupby-having-select-orderby-limit

到此这篇关于Sql的执行顺序的文章就介绍到这了,更多相关Sql的执行顺序内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 问题内容: 作者:HappyLittleFish 问题答案:

  • 问题内容: 我有SQL Server 2008 R2,Windows 7 OS。 在服务器内,我有一个通过以下SQL语句创建的表。 在表中,我具有以下值: 我确实对数据库执行了以下SQL语句: 服务器给我以下错误消息: 转换nvarchar值“ 1”时转换失败。 数据类型为int。 我以为我的内部SQL首先执行并创建了一个临时表,因此它不包含在表中,然后SQL解析器将用于过滤临时表。 但是以上似乎

  • 本文向大家介绍请问css/html/js/img的下载顺序是怎样的?都是并发执行的吗?相关面试题,主要包含被问及请问css/html/js/img的下载顺序是怎样的?都是并发执行的吗?时的应答技巧和注意事项,需要的朋友参考一下 应该是按照html内容的先后顺序加载吧 css/js默认是阻塞式加载 img是异步加载 所以默认情况下应该只有img是并发执行的 另外,可通过script标签的async属

  • 问题内容: 这个问题与执行顺序无关。这只是关于ORDER BY。 在标准执行中是: FROM WHERE GROUP BY HAVING SELECT ORDER BY TOP 编辑:这个问题或多或少是“ 执行ORDER BY表达式时SQL Server是否应用短路评估吗? ”的答案是有时!我只是还没有找到一个合理的理由。参见编辑#4。 现在假设我有一个这样的声明: 这不是我要执行的真实语句,而只

  • 问题内容: 如果我构建自己的函数“ myfunction”并执行以下查询: 如果mytable有100万行,但是在我之后只有100行。当我执行此查询时,myfunction将执行100或100万行吗? 在这种情况下会发生什么? 问题答案: 在第一个示例中,它将仅执行100次。您可以通过在函数中添加调试调用来验证这一点: 仅针对与子句筛选器匹配的行调用该函数。但是,据我所知,这并不能保证。 在第二个

  • 本文向大家介绍你是怎样对css文件进行压缩合并的?相关面试题,主要包含被问及你是怎样对css文件进行压缩合并的?时的应答技巧和注意事项,需要的朋友参考一下 使用在线网站进行压缩 使用 html-minifier 对 html 中的 css 进行压缩 使用 clean-css 对 CSS 进行压缩 css 压缩