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为例系统学习DQL理论知识 -> 正文阅读

[大数据]【SQL】以mysql为例系统学习DQL理论知识

1、思维导图-知识体系

一、sql是什么?一种计算机语言,一种操作数据库的结构化查询语言
SQL 是关系型数据库的标准语言,所有的关系型数据库管理系统(RDBMS),比如 MySQL、Oracle、SQL Server
二、数据库是什么?大量数据的集合,按照数据结构来组织、存储和管理数据的仓库
数据库的分类:1、关系型数据库、2、非关系型数据库
1、关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似, 数据以行和列的方式进行存储
2、非关系型数据库(NoSQL):对于非结构化海量的数据的处理更合适,大量的NoSql数据库如MongoDB、Redis;通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构或者文档。

在这里插入图片描述
在这里插入图片描述

2、数据库相关操作-查询

2.1、单一select简单查询

在这里插入图片描述

2.2、复杂数据库查询(重点)

在这里插入图片描述


重点:join操作(mysql的sql为例)
https://blog.csdn.net/qq_45911678/article/details/123682784

2.3、单一select的SQL语句执行过程理解

一个简单sql语句一般包含的关键字以及执行顺序如下图所示:

	(8)SELECT (9)DISTINCT
	(1)FROM [left_table]
	(3)<join_type> JOIN <right_table>
	(2)ON <join_condition>
	(4)WHERE <where_condition>
	(5)GROUP BY <group_by_list>
	(6)WITH <CUBE | RollUP>
	(7)HAVING <having_condition>
	(10)ORDER BY <order_by_list>
	(11)LIMIT <limit_number>
(1)from我需要知道我从哪个表里获取数据,如果from中包含多个表,则所有表执行笛卡尔积(交叉链接)如下图1所示。形成一个虚拟表1
(2)on这一步需要对虚拟表1 进行筛选,一般就是两个表的连接条件具有一个列,然后列值对应,然后只有那些使<join_condition>为真的行记录才被插入虚拟表2
(3)join要看<join_type>形成保留表:(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)
把保留表中未找到匹配的行将作为外部行添加到 虚拟表2  形成虚拟表3

注:如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,
直到处理完所有的表数据。  

(4)where用一些条件筛选虚拟表3 ,只有使<where_condition>为true的行才被插入 虚拟表4
(5)GROUP BY:按GROUP BY子句中的某一或者多个列的类型对虚拟表4中的行分组,对于同一类型列的其他列需要进行执行count聚合、max函数聚合等  形成虚拟表5

分组:如果是多个列类型进行分组操作,这里把某一列和另一列看成一个整体,例如:把名字和成绩看成一个整体,只要是name相同,grade不同,就不同的类型,也就是两条记录
(6)高级分组/超组:看参考资料

(7)SELECT:处理SELECT列表,就是需要展示虚拟表5的哪几列 形成虚拟表6
并且,group by 操作的字段列必须包含在select后面;
同时,从这一步开始,后面的语句中都可以使用SELECT中的别名。

(8)HAVING:对虚拟表5应用HAVING筛选器。HAVING是过滤聚合值,WHERE 关键字无法与聚合函数一起使用;只有使<having_condition>为 true 的组的记录才会被插入虚拟表7

(9)DISTINCT:(用distinct来返回不重复单字段或者多字段组合的条数)将重复的行从虚拟表7中移除
(10)Order by把查询出来的结果进行一个默认升序asc,降序排列desc,即order by;
如果根据一个列排序,那么按照字母顺序或者数字顺序;如果按照多个列排序,按照顺序,先一列,在此列中在按某中顺序排其他列,保持第一列顺序不变;如图实例2所示

注:order by 生成的不是虚拟表了,而是游标:
这一步是第一步也是唯一 一步可以使用SELECT列表中的列别名的步骤。
这一步不同于其它步骤的 是,它不返回有效的表,而是返回一个游标。
SQL是基于集合理论的。
集合不会预先对它的行排序,它只是成员的逻辑集合,成员的顺序无关紧要。
对表进行排序 的查询可以返回一个对象,包含按特定物理顺序组织的行。
ANSI把这种对象称为游标。

(11)limit做一个限制就行,也就是limit

sql表执行笛卡尔积
在这里插入图片描述

参考资料:

http://ty2y.com/study/sqlyjzhbzxj.html
分组操作理解:
https://www.cnblogs.com/YH-shjd-senvn/p/15890258.html
高级分组(超组(Suppergroups)):
https://www.cnblogs.com/marxist/p/12149863.html
去重distinct
https://blog.csdn.net/shenziheng1/article/details/102536146

重点:join操作(mysql的sql为例)
https://blog.csdn.net/qq_45911678/article/details/123682784

3、扩展:Mysql结构

https://blog.csdn.net/weixin_45797834/article/details/125522587

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 9:12:44-

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