IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL,Mysql疑难杂症 -> 正文阅读

[大数据]SQL,Mysql疑难杂症

1.sql中的表 就是一种 List(list(map))的数据结构

2.表就是数据

3.那么数据 有 3种功能:

	1.数据作为 条件比较的 数据 (这时 数据只能是 单列的,这里也是 子查询的结果 如果是单列才可 将数据作为 比较的数据)
	  简单来说就是单列table
	
	2.作 查询表 加在 from + 数据/ 增删改 table(这里 单列,多列都可以)

	3.数据 作为 数据容量不变 只是 拆分了的 条件

4.sql的每一步都是 都是在 不断的 创建 虚拟表的 过程中的
包括表连接,过滤条件后的,…

5.创建临时表,可以是表连接,以及过滤,每一次过滤,都会生成一张临时虚拟table,还有 数据的拆分(即多个子数据,分组)

6.简单来说,我们写sql,就是在 表连接,以及 在过滤表,以及在拆分表(当然这过程,一直在形成新的临时表,新的临时表也可作表连接,和表过滤条件,和表拆分条件)

7.在简单点来说,由上面的 数据的功能类型分为大体的3种,而我们的 sql就是对 数据的操作,数据的连接,数据的过滤,形成新的数据,数据的拆分,然后新的数据又可以用来 连接 过滤 拆分,就是数据的 增多,和减少,以及拆分(容量不变,数据的个数变多)

8.所以任何操作 就是 数据的增加,和过滤,和拆分不变,也就是说 除了 数据连接(表连接),其他都是 数据过滤,和 数据拆分

9.数据 + 数据的变化过程 + 数据在这个过程中起到的3个作用,就是sql的体现

10.对于关键字来说,就是过滤关键字,连接关键字,以及拆分关键字 这三大类,考虑的时候以 这三大类来考虑即可

11.我们在分析 sql的过程(子查询不算,子查询就算一个sql过程,只是这个sql过程结束了的 数据,给 另一个 sql 的过程用,这也是 符合 上面说的 sql的本质 就是数据的变化过程,以及数据在这变化过程中体现的3种作用)

	1 FROM 执行笛卡尔积(数据的连接,此时数据的作用是作为 from)
	  笛卡尔积(交叉联接),生成虚拟表VT1,获取不同数据源的数据集。
	
	  FROM子句执行顺序为从后往前、从右到左,FROM 子句中写在最
	  后的表(基础表 driving table)将被最先处理,即最后的表为驱动表,
	  当FROM 子句中包含多个表的情况下,我们需要选择数据最少的表作为基础表。
	
	2 ON 应用ON过滤器(数据的过滤,此时数据的作用是作为 过滤条件)
	  对虚拟表VT1 应用ON筛选器,ON 中的逻辑表达式将应用到虚拟表 VT1中的各个行,
	  筛选出满足ON 逻辑表达式的行,生成虚拟表 VT2 。
	
	3 JOIN 添加外部行(数据的连接,数据的作用是作为连接条件)
	  如果指定了OUTER JOIN保留表中未找到匹配的行将作为外部行添加到虚拟表 VT2,生成虚拟表 VT3。保留表如下:
	
	  LEFT OUTER JOIN把左表记为保留表
	  RIGHT OUTER JOIN把右表记为保留表
	  FULL OUTER JOIN把左右表都作为保留表
	  在虚拟表 VT2表的基础上添加保留表中被过滤条件过滤掉的数据,非保留表中的数据被赋予NULL值,最后生成虚拟表 VT3。
	
	4 WHERE 应用WEHRE过滤器(数据的过滤,数据的作用是作过滤条件)
	  对虚拟表 VT3应用WHERE筛选器。根据指定的条件对数据进行筛选,并把满足的数据插入虚拟表 VT4。
	
	  由于数据还没有分组,因此现在还不能在WHERE过滤器中使用聚合函数对分组统计的过滤。
	  同时,由于还没有进行列的选取操作,因此在SELECT中使用列的别名也是不被允许的。
	  
	5 GROUP BY 分组(数据拆分,用作拆分条件)
	  按GROUP BY子句中的列/列表将虚拟表 VT4中的行唯一的值组合成为一组,生成虚拟表VT5。
	  如果应用了GROUP BY,那么后面的所有步骤都只能得到的虚拟表VT5的列或者是聚合函数(count、sum、avg等)。
	  原因在于最终的结果集中只为每个组包含一行。
	
	  同时,从这一步开始,后面的语句中都可以使用SELECT中的别名。
	
	6 AGG_FUNC 计算聚合函数
	  计算 max 等聚合函数。SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。常用的 Aggregate 函数包涵以下几种:
	
	7 WITH 应用ROLLUP或CUBE
	  对虚拟表 VT5应用ROLLUP或CUBE选项,生成虚拟表 VT6。
	
	  CUBE 和 ROLLUP 区别如下:
	
	  CUBE 生成的结果数据集显示了所选列中值的所有组合的聚合。
	  ROLLUP 生成的结果数据集显示了所选列中值的某一层次结构的聚合。
	
	8 HAVING 应用HAVING过滤器(数据的过滤,专对对 每个 子数据为基础 分别过滤)
	  对虚拟表VT6应用HAVING筛选器。根据指定的条件对数据进行筛选,并把满足的数据插入虚拟表VT7。
	
	  HAVING 语句在SQL中的主要作用与WHERE语句作用是相同的,但是HAVING是过滤聚合值,
	  在 SQL 中增加 HAVING 子句原因就是,WHERE 关键字无法与聚合函数一起使用,HAVING子句主要和GROUP BY子句配合使用。
	
	9 SELECT 选出指定列
	  将虚拟表 VT7中的在SELECT中出现的列筛选出来,并对字段进行处理,计算SELECT子句中的表达式,产生虚拟表 VT8。
	
	10 DISTINCT 行去重(过滤)
	  将重复的行从虚拟表 VT8中移除,产生虚拟表 VT9。DISTINCT用来删除重复行,只保留唯一的。
	
	11 ORDER BY 排列(过滤)
	  将虚拟表 VT9中的行按ORDER BY 子句中的列/列表排序,生成游标 VC10 ,注意不是虚拟表。
	  因此使用 ORDER BY 子句查询不能应用于表达式。同时,ORDER BY子句的执行顺序为从左到右排序,是非常消耗资源的。
	
	12 LIMIT/OFFSET 指定返回行(过滤)
	  从VC10的开始处选择指定数量行,生成虚拟表 VT11,并返回调用者。

12.分组的本质,就是数据的拆分,目的就是为了 统计大数据中,各个小数据的统计(分组后,就以 一个组为 一个数据这个数据就是 普通的数据,然后分组后,我们有多个 子数据,即每次操作都是以 子数据为基础的,例如全表也是一个组,我们每次操作都是以 这个组为基础的)

	1.对分组来说,考虑每个子数据即可
	
	2.分组后,数据字段只能用作 统计作用,因为组有多个,和组只有一个的不同
	  多个组,就得有多个组的 返回结果,都是mysql不支持,mysql的结果都只能是一个组的

	3.分组 没有没有忽略 null的 只有 count(*)
	
	4.每个组的查询结果 只有 1行,这样才能符合mysql的,主要是统计字段
	
	5.多个组,也可以有 统一的结果,在 group by 字段1,.. 后加上 with rollup 或者 with cube
	  这样,在原来的 分组的结果集后面,还会加上对 多个组一起的一个统计结果行

13.distinct 过滤关键字细节

1.基本用法

distinct用于筛选唯一值,可以作用于单个列或者多个列。作用于单个列时有以下几个注意点:

1.distinct必须放在所有指定字段名之前,不允许

select <name1>, distinct <name2> from ...

2.distinct作用于多个列,结果按照指定的多个列的值得组合进行筛选

2.和count一起用

1.可以使用

select count(distinct name) from ....

2.因为count是不能统计多个字段的,因此下面的语句不能执行:

select count(distinct name1, name2) from ....

3.应该写成嵌套查询的形式:

select count(*) from (select distinct name1, name2 from...)

3.和order by一起用

1.distinct的执行顺序在order by 之前,因此两者同时出现时,先执行distinct产生只包含唯一值的临时表,再对临时表使用order by。

2.如果order by中的字段和distinct后面的字段名不相同,则语句会出错,因为结果只含有distinct后的唯一字段的值,应在distinct后的字段名中包含order by的字段。

14.连接查询 优于 子查询的原因

表关联 可以 利用到 2张表的索引(不是说的连接条件)
而子查询不行,只有在子查询,有外表 和 内表,只有一张表 用索引,先查的用索引,即内表先用,内表并不是说 ()里面的表,in() 里面的是内表因为先查,exsits() 不是内表是外表,因为后查询

15.关键字真正要讨论的就是过滤关键字,在不同的阶段,有不同的过滤关键字

16.in 要谨慎使用,in() 不多时,最好用 = or =

17.条件过滤关键字使用的时候,得考虑好选哪个,例如 子查询的结果集只有 一个,那么 用 = ,如果是 多个,那么 用 关键字 in

18.exist 和 in 的区别
简单来说,就是小表驱动大表,详细文章exist 和 in的使用和区别

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:36:19  更:2022-03-12 17:37:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:26:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码