首页 > 数据库 >SQL语句执行顺序

SQL语句执行顺序

时间:2023-07-15 10:34:34浏览次数:43  
标签:语句 顺序 记录 列表 虚拟 分组 SQL 筛选

select distinct
    查询列表(要查的字段)
from
    左边的表们s
连接类型(left|inner) join 
    右边的表们s
on 
    连接条件
where
    筛选条件
group by
    分组的列表(按什么字段分组)
having
    having_condition
order by
    排序的字段
limit
    limit number;
1 from 左边的表们s
2 on 连接条件
3 连接类型(left|inner) join 右边的表们s
4 where 筛选条件
5 group by 分组列表(按什么字段分组)
6 having having_condition
7 select
8 distinct 查询列表(要查询的字段)
9 order by 排序的字段等
10 limit limit_number

123步骤先确定要查询的大表;4步骤确定要的记录,去掉不要的记录;56分组并筛选要的;78留下要的字段列;9排序一下;10留下想要的记录数。

语法格式:                           执行顺序

select 查询列表                          7

from 表1                                 1

连接类型 join 表2                         2

on 连接条件                               3

where 筛选条件                            4

group by 分组列表                         5

having 分组后的筛选条件                    6

order by 排序列表                         8

limit offset,size;                        9

几点说明:

①数字代表执行的顺序,正序

②offset 要显示记录(条目)的起始索引(起始索引从0开始)

③size 要显示记录(条目)的条数

④每执行完一个顺序,都会在内部生成一个虚拟表

进一步理解:

顺序1:定位到表1,内部形成一个虚拟表1(其实就是表1)

顺序2:表1和表2连接,形成一个虚拟的大表2,而且是笛卡尔现象表

顺序3:留下大表2中满足连接条件的记录,去掉不满足连接条件的记录,形成一个新的虚拟表3

顺序4:留下虚拟表3中满足筛选条件的记录,去掉不满足筛选条件的记录,形成一个新的虚拟表4

顺序5:根据分组列表,将分组列表的值相同的记录归到一组,形成一个新的虚拟表5

顺序6:留下虚拟表5中满足筛选条件的记录,去掉不满足筛选条件的记录,形成一个新的虚拟表6

顺序7:根据查询列表,比如是字段1,字段2,将表6中字段1和字段2拼接在一个形成一个虚拟表7, 并输出表7

顺序8:根据排序列表将表7进行排序形成一个新的虚拟表

顺序9:根据offset和size将表8中从offset条开始,取出size条记录拼接成一个新的虚拟表8,并输出表8

标签:语句,顺序,记录,列表,虚拟,分组,SQL,筛选
From: https://www.cnblogs.com/liwenfeng/p/17555724.html

相关文章

  • Mysql导入sql脚本报错,时间格式数据为空
    Mysql导入sql脚本报错,时间格式数据为空Mysql导入sql脚本时候导入的sql脚本中有时间格式为空的时候时间格字段会报错。解决方式也很简单:查看sql_mode:select@@session.sql_mode;查询结果:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,N......
  • SpringBoot+Vue3+MySQL集群 开发健康体检双系统
    第1章课程介绍试看4节|38分钟观看项目演示,熟悉大健康体检项目主要功能。掌握学习本课程的最佳方法,以及如何利用在线手册学习和答疑。第2章大健康体检项目全栈环境搭建16节|218分钟利用虚拟机或者云主机安装Linux系统和Docker环境,部署MongoDB、Redis、Minio和RabbitMQ等中......
  • mysql root权限恢复
    1.首先停止​​MySQL​​服务:servicemysqldstop2.加参数启动​​mysql​​:/usr/bin/mysqld_safe--skip-grant-tables& 然后就可以无任何限制的访问mysql了3.root用户登陆系统:mysql-uroot-pmysql4.切换​​数据库​​:usemysql5.显示所有的表:showtables;这里就可以访问表......
  • 107.SQL注入攻击
    107.SQL注入攻击?SQL注入攻击指的是攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,破坏原有SQL结构,并在数据库中执行,达到编写程序时意料之外结果的攻击行为。详细资料可以参考:《Web安全漏洞之SQL注入》《如何防范......
  • 有点意思的sql
    同事问我一个问题,要我写几条sql。假设表temp的结构是这样的:字段:id, name有这些记录:123,foo123,  bar123,test124, test125 foo126 bar127foo127test128foo128bar128test128else现在要写4条sql,找到符合下面四个条件的id:1.只有name=foo2.只有name=bar3.......
  • 在centos 7.9 系统docker上构建mysql 5.7
    1、拉取镜像[root@localhost~]#dockerpullmysql:5.7 2、查看镜像[root@localhost~]#dockerimages 3、根据镜像id构建mysql容器,且分配端口号[root@localhost~]#dockerrun-d-p3306:3306--namemysql-eMYSQL_ROOT_PASSWORD='OK'c20987f18b13命令说......
  • [极客大挑战 2019]EasySQL
    [极客大挑战2019]EasySQL题目来源:buuctf题目类型:web涉及考点:SQL注入先看题目,给了两个输入框:随便输入几个数进去,例如username=123,password=123:页面回显说是错误的用户密码,但注意到url中采用的是get传参:下一步寻找注入点,我们可以假设数据库中的查询语句为:select......
  • 关键sql
    分组后获取分组中对应的消息主体思路,先分组,然后获取关键数据,进行级联或利用EXISTS关键字SELECT*FROM(SELECTB.*FROM(SELECTACCEPTNO,TASK_ID,MAX(TIME_MARKER)ASMTMFROMKKWHERETIME_MARKER>5ANDFILD_COUNT<5GROUPBYACCE......
  • 快速离线安装MySql数据库
    一、mysal压缩文件通过ftp放入\opt-->解压cd/opttar-xzvfmysql-5.7.29-linux-glibc2.12-×86_64.tar.gz二、移动一>创建data目录一>创建用户组mvmysql-5.7.29-linux-glibc2.12-×86_64/usr/localcd/usr/localmvmysql-5.7.29-linux-glibc2.12-×86_64mysqlcd......
  • Mysql
    Mysql中的数据类型字段类型整型TINYINT,SMALLINNT,MEDIUMINT,INT,BIGINT分别使用8,16,24,32,64位的存储空间,一般情况下越小的列越好INT(11)中的数字只是规定了交互工具显示字符的个数,对于存储和计算来说没有任何意义。浮点数FLOAT和DOUBLE为浮点类型,DECIMAL为高精度小树类型,CPU原......