SQL语句原理解析(原创)
基本的sql语句很好理解这里不做分析,这里只考虑复杂的sql语法和关键词用法的实验分析:
一,join关联的作用:
作用:
1,为了生成信息信息更加全面的中间表;
2,为了where可以使用含有单表外字段的条件
3,如果既不需要得到更多的字段信息,也不需要where查询更多条件,就不需要关联
join的使用细节:
1,2张表的join共有7中可能的结果 4+3(where)
2,join相当于创建一张临时表使用on作为连接条件,临时表具有更精准的信息
3,join的两张表之间的关系相当于ER实体之间的关系,所有在连接的时候可能会产生更多的行,这些行里面可能会很多null值
4,如果是3张或以上表的join,从左往右分解成2张表的join关系
二,where,having与 group by连用的区别
select 列a,聚合函数 from 表名 where 过滤条件 group by 列a having 过滤条件
group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选
需要注意having和where的用法区别:
1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
2.where肯定在group by 之前
3.where后的条件表达式里不允许使用聚合函数,而having可以。
三、当一个查询语句同时出现了where,group by,having,order by的时候,
执行顺序和编写顺序是:
1.执行where xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。
5.针对第4个结果集排序。
select s_name,avg(score) from student
where score>=60 and s_name !=’jr’
group by s_name
having avg(s_score)>=70
order by avg(s_score) desc
四,子查詢
子查询是一个比较复杂的话题,需要一篇的篇幅分析,请查看
https://www.cnblogs.com/tkzc2013/p/10767336.html
五,表连接与连接查询
https://blog.csdn.net/xiao1_1bing/article/details/81112620
六,SQL执行顺序
–第一步:执行FROM
–第二步:WHERE条件过滤
–第三步:GROUP BY分组
–第四步:执行SELECT投影列,聚集函数
–第五步:HAVING条件过滤
–第六步:执行ORDER BY 排序
举例:
//错误写法
SELECT student_class, AVG(student_age) FROM t_student WHERE AVG(student_age)>20 GROUP BY student_class;
//正确写法
SELECT student_class, AVG(student_age) FROM t_student GROUP BY (student_class) HAVING AVG(student_age)>20;
七,group by
1,group by和distinct类似可以去重;
2,group by可以多级分组,相对少用,从左往右计算
group by col1,col2,...
SQL语句原理解析(原创)的更多相关文章
- ORACLE之SQL语句内部解析过程【weber出品】
一.客户端通过监听连接到数据库,数据库开启一个server process进程来接收客户端传过来的sql. 1.这条sql语句从来都没有被执行过.(硬解析) 2.这条sql语句被执行过.(软解析) 二 ...
- mybatis源码-Mapper解析之SQL 语句节点解析(一条语句对应一个MappedStatement)
目录 一起学 mybatis 0 <sql> 节点解析 1 解析流程 2 节点解析 2.1 解析流程 2.2 <include> 节点的解析 2.3 Node.ELEMENT_ ...
- SQL语句原理与高效SQL语句(转)
做软件开发的programers,大部分都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么还能保证下一段时间系统还能流畅的运行 ...
- SQL注入原理解析以及举例1
sql注入是指web应用程序对用户输入数据的合法性没有判断,导致攻击者可以构造不同的sql语句来实现对数据库的操作. sql注入漏洞产生满足条件: 1:用户能够控制数据的输入. 2:原本需要执行的代码 ...
- 【Mybatis】SQL语句的解析执行过程原理
sqlSession简单介绍 拿到SqlSessionFactory对象后,会调用SqlSessionFactory的openSesison方法,这个方法会创建一个Sql执行器(Executor),这 ...
- sql 语句 名称解析,是 由内向外的。
子查询内 找不到的 字段 会 向外 寻找,还是找不到 就报错:找到了就不报错,但是 子查询语句就毫无意义了: 解决办法: 字段前面要跟上表的名称. 一般 字段无效 立刻 报错.
- 基于简单sql语句的sql解析原理及在大数据中的应用
基于简单sql语句的sql解析原理及在大数据中的应用 李万鸿 老百姓呼吁打土豪分田地.共同富裕,总有一天会实现. 全面了解你所不知道的外星人和宇宙真想:http://pan.baidu.com/s/1 ...
- SQL优化的四个方面,缓存,表结构,索引,SQL语句
一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...
- 【PLSQL】绑定变量,活跃SQL,软硬解析解析
************************************************************************ ****原文:blog.csdn.net/clar ...
随机推荐
- Appium环境搭建-精简版
Appium自动化环境准备 安装配置JDK 下载Android SDK并配置环境变量 安装模拟器或连接真机 安装appium desktop 安装python和pycharm (开发语言和开发工具) ...
- SSM框架开发遇到的问题
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+re ...
- openflow packet_out和packet_in分析
任务目的 1. 掌握OpenFlow交换机发送Packet-in消息过程及其消息格式. 2. 掌握OpenFlow控制器发送Packet-out消息过程及其消息格式. 实验原理 Packet-In 使 ...
- abp添加动态菜单
abp中MenuDefinition封装了导航栏上的主菜单的属性,MenuItemDefinition则封装了子菜单的属性,子菜单可以引用其他子菜单构成一个菜单树. MenuDefinitio成员如下 ...
- django restframework Serializer field
SerializerMethodField 这是一个只读字段.它通过调用它所连接的序列化类的方法来获得它的值.它可用于将任何类型的数据添加到对象的序列化表示中. 签名: SerializerMetho ...
- 20165223《网络对抗技术》Exp1 PC平台逆向破解
目录--PC平台逆向破解 1 逆向及BOF基础实践说明 1.1 实践内容 1.2 实践要求 1.3 基础知识 2 实验步骤 2.1 直接修改程序机器指令,改变程序执行流程 2.2 通过构造输入参数,造 ...
- “三次握手,四次挥手”你真的懂吗?TCP
“三次握手,四次挥手”你真的懂吗? mp.weixin.qq.com 来源:码农桃花源 解读:“拼多多”被薅的问题出在哪儿?损失将如何买单? 之前有推过一篇不错的干货<TCP之三次握手四次挥手 ...
- JavaScript DOM 高级程序设计读书笔记一
创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...
- linux date -s
修改linux的时间可以使用date指令 修改日期: 时间设定成2009年5月10日的命令如下: #date -s 05/10/2009 修改时间: 将系统时间设定成上午10点18分0秒的命令如下. ...
- docker核心概念与配置安装
一.Docker的三大核心概念: 镜像(image) 容器(container) 仓库(repository) 1.Docker镜像类是与虚拟机镜像,可以把它理解为一个只读的模板. 不仅仅是操作系统 ...