【SQL】以mysql为例系统学习DQL理论知识

  • 1、思维导图-知识体系
  • 2、数据库相关操作-查询
  • 2.1、单一select简单查询
  • 2.2、复杂数据库查询(重点)
  • 2.3、单一select的SQL语句执行过程理解
  • 3、扩展:Mysql结构


1、思维导图-知识体系

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

sqlserver dbo 架构 sql架构是什么_关系型数据库


sqlserver dbo 架构 sql架构是什么_关系型数据库_02

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

2.1、单一select简单查询

sqlserver dbo 架构 sql架构是什么_sqlserver dbo 架构_03

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

sqlserver dbo 架构 sql架构是什么_关系型数据库_04

重点:join操作(mysql的sql为例)

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


(8)SELECT:处理SELECT列表,就是需要展示虚拟表6的哪几列 形成虚拟表7
并且,group by 操作的字段列必须包含在select后面;
同时,从这一步开始,后面的语句中都可以使用SELECT中的别名。
(9)DISTINCT:(用distinct来返回不重复单字段或者多字段组合的条数)将重复的行从虚拟表7中移除




(10)Order by把查询出来的结果进行一个默认升序asc,降序排列desc,即order by;
如果根据一个列排序,那么按照字母顺序或者数字顺序;如果按照多个列排序,按照顺序,先一列,在此列中在按某中顺序排其他列,保持第一列顺序不变;如图实例2所示

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

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

sqlserver dbo 架构 sql架构是什么_关系型数据库_05


sqlserver dbo 架构 sql架构是什么_sql_06

参考资料:

http://ty2y.com/study/sqlyjzhbzxj.html

3、扩展:Mysql结构

sqlserver dbo 架构 sql架构是什么_sql_07


sqlserver dbo 架构 sql架构是什么_sql_08