sql语句的书写顺序:select ---> from --->where ---> group by ---> having ---> order by
    其中where和having是不能同时使用的,并且having和group by 是联合使用的;

这是程序员或DBA写SQL的顺序;

sql语句的解析顺序 :

from --->where ---> group by ---> having ---> select  ---> order by

大体的过程如下,我还没完全理解;每一步形成一个虚表,这个虚表又作为下一步骤的输入,这样得到最后的结果;

SQL语句的解析顺序

1. FROM FROM后面的表标识了这条语句要查询的数据源;FROM过程之后会生成一个虚拟表VT1;
    FROM又可以包括三个子步骤,如果只是单表查询的话不包括这三个;

1-J1 笛卡尔积 这个步骤会计算两个相关联表的笛卡尔积(CROSS JOIN) ,生成虚拟表VT1-J1;
        如果是连接查询,计算关联表的笛卡尔积,得到虚拟表VT1-J1;
    1-J2 ON过滤 ,生成虚拟表VT1-J2;
    1-J3 如果使用了外连接,添加外部行,生成虚拟表VT1-J3;

2. WHERE 对步骤1生成的临时表进行过滤,得到VT2表;

3. GROUP BY ,对VT2表GROUP BY,生成VT3表;

4. HAVING ,得到VT4表;

5. SELECT 对SELECT子句中的元素进行处理,生成VT5表;
    5-1 计算表达式 计算SELECT 子句中的表达式,生成VT5-1;
    5-2 DISTINCT 寻找VT5-1中的重复列,并删掉,生成VT5-2;
    5-3 TOP 从ORDER BY子句定义的结果中,筛选出符合条件的列,生成VT5-3表;
    ORDER BY 从VT5-3中的表中,根据ORDER BY 子句的条件对结果进行排序,生成VC6表;

表的笛卡尔积

笛卡尔积指的是两个集合所有的组合情况;

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)};

那么两个表的笛卡尔积就是指两个表连接的所有组合情况;两个表连接,每个表有5条记录,笛卡尔积是25条记录;

下图大概是百度百科的,

就是连接查询的情况下,如果2个表连接,每个表有100条记录;中间有个计算笛卡尔积的过程,会形成一个一万行记录的集合,再从中筛选,这是在C语言的层面、数据库引擎中实现;

看上去没错,它是先笛卡尔积,再ON过滤;

表的笛卡尔积可参阅此文,

https://blog.csdn.net/weixin_44953658/article/details/127087480

SQL语句的解析顺序、数据库表的笛卡尔积相关推荐

  1. Oracle数据库查看表空间sql语句、查看Oracle数据库表空间剩余 、修改表空间、库备份

    一  Oracle数据库查看表空间sql语句 1.oracle查看表空间当前用户 SQL>  select  username,default_tablespace  from user_use ...

  2. SQL语句实现两个数据库表直接操作

    转自:http://blog.163.com/haitaosong_accp/blog/static/5523025920094222105655/ 原表及数据:(原始表有N个) tb1 id  aa ...

  3. jpa 默认生成sql语句_springboot-jpa自动创建数据库表

    第一步创建springboot项目,jpa,mysql, 代码如下: application.yml spring: datasource: url: jdbc:mysql://127.0.0.1:3 ...

  4. SQL语句的书写顺序和解析顺序

    数据库是java开发必经之路,而sql语句的书写和语句的解析也是非常的重要的. sql语句的书写顺序:select ---> from --->where ---> group by ...

  5. SQL语句的解析过程

    SQL语句的解析过程 由于最近需要做一些sql query性能提升的研究,因此研究了一下sql语句的解决过程.在园子里看了下,大家写了很多相关的文章,大家的侧重点各有不同.本文是我在看了各种资料后手机 ...

  6. SQL语句的书写顺序和执行顺序

    sql语句的书写顺序: select >> from >> where >> group by >> having >> order by ...

  7. 合肥工业大学—SQL Server数据库实验三:SQL语句创建和删除基本表

    SQL语句创建和删除基本表 1. 编写6个基本表 2. 修改基本表结构,完整性约束条件 3. 用Drop table 语句删除基本表 1. 编写6个基本表 设有简单教学管理的6个关系模式如下: 系(系 ...

  8. SQL语句判断指定的数据库、表、字段、存储过程是否存在

    SQL语句判断指定的数据库.表.字段.存储过程是否存在 直接上代码,对大家有用就好! 代码 --判断[TestDB]是否存在 if exists(select 1 from master..sysda ...

  9. 数据库:SQL语句的执行顺序,及每一步的详细解释

    一.SQL语句的执行顺序举例(sqlServer版): (8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list&g ...

最新文章

  1. C#使用log4net记录日志
  2. *[hackerrank]Maximizing XOR
  3. STC用PCA测量脉宽_用好手中的频谱仪-无线电信号监测技巧
  4. 【题解】luogu p1032 字串变换
  5. leetcode76 最小覆盖子串
  6. qqkey获取原理_HIT我守护的一切手游电脑版苹果版有吗 HIT我守护的一切iOS电脑版模拟器...
  7. 数字电路基础知识——锁存器与触发器的建立时间和保存时间(一)
  8. Unity发布WebGL之后读取StreamingAssets文件路径数据
  9. Android 手写签名 (图片合成)
  10. [Servlet] HttpServletRequest
  11. 嵌入式设备时间同步管理
  12. Linux(Ubuntu)下使用OneNote
  13. C++: 生成给定范围内的所有多维索引。 模拟任意数量的嵌套循环的行为(附完整源码)
  14. Big Faceless Applet PDF阅读器
  15. 降维算法-LDA线性判别分析实例
  16. Vultr 教程目录
  17. 解决单行文本省略号显示问题
  18. SourceTree报错git -c diff.mnemonicprefix=false fatal: Unable to create ‘D:/xxx/.git/index.lock‘: File
  19. sincerit little w and Soda(规律题)
  20. 持续迭代、永久更新的WIN NFT HORSE,具有无穷无尽的生命力

热门文章

  1. KEA128主芯片的解读(时钟)
  2. 十大主流集群调度系统大盘点
  3. linux下sqlplus用法,linux也适用的sqlplus 用法
  4. Dev-Cpp下载与安装(图文教程)
  5. 树与二分图-2022RoboCom 世界机器人开发者大赛-本科组(省赛)
  6. 排名预测(附python代码)
  7. MFC Windows 程序设计[二十八]之字体样式(附源码)
  8. 高等教育计算机应用方面的文章,计算机技术在高等教育中的应用
  9. 推荐一个基于 Vue 的低代码平台
  10. jsp页面中文 contenttype=text/html;c,JSP中文乱码问题解决