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
 
参考资料:
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
|