既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 本文纯粹就是小杰为了更加全面的了解学习mysql的读书笔记, 小杰觉得这本书写的相当不错, 感兴趣的朋友可以去读阅。小杰没有全读, 只是读那种小杰不熟悉的知识点, 但是这本书是真心写的超赞.
- 小杰在文末也会附上它的pdf的云盘地址, 大家一起学习,共同进步, 知识不分高低, 计算机的学习小杰认为也是一个 量变 —> 质变 的过程
- 天道酬勤, 水滴石穿, 在不同的阶段就干好自己当前阶段力所能及之事, 至少是没有在寝室的床上瘫着消磨时光 -------- 愿大家都学有所成,所获
第一章 — 了解SQL Day 4-20
1.1.1 什么是数据库?
简单来说数据库(database)就是一个保存数据的容器, 数据是按照一定的结构组织起来的.
理解数据库的一种最简单的办法是将其想象为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。
注意: 特别区分数据库 和 数据库管理软件(eg: mysql)
1.1.2 表
表是一种结构化的文件.
表(table) 某种特定类型数据的结构化清单 — 员工信息表, 学生表, 用户表 …
表类比C语言中的struct结构体来理解
数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的, 这表示数据库中没有其他表具有相同的名字。 — 表名唯一性指的是同一个database中表名唯一
A数据库中的B表 和 C数据库中的B表 — 两个B表表名一致, 但是并不冲突
1.1.3 列和数据类型
表是由列组成的, 列包含表的部分信息 eg: 学生表的 name 列 age 列 no. 列 grade 列. — 列也称字段, 一列就是表中的一个字段
- 分解数据为列 — 按照字段(列) 进行排序或者过滤出所需数据
数据库中每个列都有相应的数据类型。 — 合理的定义列数据类型 (可以带来存储空间的节约 + 性能上的提升)
1.1.4 行
一行:存储的一条实际信息. — 一条记录. eg: 员工表中具体的张三的一行记录信息 eg
1.1.5 主键
表中每一行都应该有可以唯一标识自己的一列(或一组列)。
主键特性: 唯一存在 且不为null — 主键可以唯一标识一行
(在查询的时候有着至关重要的作用, 因为确定主键就确定标识一行记录)
eg : 场景引入,现在存在一个学生表,存在s_id, s_name, s_age 三个字段, 我们需要查询s_id为3的学生s_name, 我们就可以通过 s_id = 3 确定对应记录 — 进而确定 s_name
唯一标识表中每行的这个列(或这组列)称为主键。主键用来表示 一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。
主键通常是定义一列, 但是也可以同时使用多个列复合构成一个主键, 复合主键 — 组合唯一
1.2 什么是SQL
****SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。 — SQL并不是一款具体的数据库软件, 而是几乎所有的数据库软件都支持的结构化查询语言
1.3 小结
这一章介绍了什么是SQL以及它 为什么很有用。因为SQL是用来与数据库打交道的,所以,我们也复习了一些基本的数据库术语。
读完一小练 :
题目要求: 就是查找存在超过5名学生报名的课程
解决方式1:group by + having 进行分组后的条件查询, 按照class 班级进行分组, 分组之后统计每个班级的学生人数 >= 5则是复合要求的
select
class
from
courses
group by
class
having
count(distinct student) >= 5;
解决方式2:思路是一致的, 但是可以利用子查询的方式增加对于子查询的运用熟练度
查询每个班级的人数作为新的表, 然后直接按照 num >= 5删选结果就OK了, 产生临时表, 从临时表中查询, 复合查询
select
class
from
(select
class,
count(distinct student) as num
from
courses
group by
class) as temp_table
where
num >= 5;
- 如上是三张表, orders是一张中间表
- 题目要求: 编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。
- 解题思路: 很明显的我们需要利用主键锁定记录, 进而锁定记录中的 salesperson - name 信息
- 找到 name 和 RED 相关的所有orders记录
- 利用orders记录中的sales_id外键找到 salesperson中 的 对应记录,
- 将这些记录中的name除开即为ans.
-- sales_id 筛选出来ans
select
name
from
salesperson
where
-- 步骤 1, 2 通过中间表找到非RED公司对应的sales_id
sales_id not in (
select
o.sales_id
from
orders o inner join company c on o.com_id = c.com_id
where
c.name = 'RED'
);
- 题目要求:将连续的 id 号学生进行对换id,最后一个单的 id 不管, 最终结果按照id 升序返回, 所以最后需要进行一个order by
利用好select 实现id的对换, 题目要求很明晰了, 思路也是相当的easy : 兑换 id 说白了就是 将 奇数 id 进行 + 1 偶数 id 进行 - 1 操作, 使得, id 实现对换. 注意: 最后一条单独的奇数 id 不管
写个伪代码逻辑
伪代码逻辑喔:
if (id == 奇数 && id != end()) return id + 1 后移动
else if (id == 偶数 && id != end()) return id - 1; 前移动
else return id; 最后一个 不需要移动
实现:
-- IF(expr,v1,v2)如果表达式expr成立,返回结果v1;否则,返回结果v2。
select
(if(id % 2 = 0, id - 1, -- 是偶数, 直接return id - 1
if(id != (select count(distinct id) from seat),
-- 是奇数, 进一步判断是不是end
id + 1, id))) as id
,student
from
seat
order by id;
第二章 — MySQL简介 Day 4-21
2.1 什么是mysql
MySQL是一种****DBMS,即它是一种数据库软件.
DBMS — 用于数据库中数据的存储,查询,增删查改等实际功能完成的一款管理数据库的软件
MYSQL的最大优势: 开源, 开源带来了免费, 稳定, 可靠, 多人维护监督的好处
MYSQL的缺陷不足: 对于很多其他DBMS所提供的特性和功能不支持, 但是现在也在不断地完善支持
2.1.1 客户机—服务器软件
DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户机—服务器的DBMS.
MySQL是基于客户机—服务器的数据库。
MYSQL部件拆分
服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。
与数据文件打交道的只有服务器软件。关于数据、数据添加、删除 和数据更新的所有请求都由服务器软件完成。
我们平时使用地其实是客户机, 我们在客户机上面地DBMS软件上发出请求, 进行操作, 这些请求都会通过网络提交到服务器软件上面去, 然后****服务器软件对这些请求进行处理, 应答结果到客户机软件.
所有这些活动对用户都是透明的。数据存储在别的地方,或者数据库服务器为你完成这个处理这一事实是隐藏的。你不需要直接访问数据文件。事实上,多数网络的建立使用户不具有对数据的访问权,甚至不具有对存储数据的驱动器的访问权. — 为何要间接访问数据, 避免客户机用户直接访问数据文件?
这样的意义何在?因为为了使用MySQL,你需要访问运行MySQL服 务器软件的计算机和发布命令到MySQL的客户机软件的计算机。
2.1.2 MySQL版本
仅作一点了解, 4版本开始有了innodb 引擎, 开始支持事务处理了.
2.2 MySQL工具
如前所述,MySQL是一个客户机—服务器DBMS,因此,为了使用 MySQL,需要有一个客户机,即你需要用来与MySQL打交道(给MySQL 提供要执行的命令)的一个应用。
MySQL工具 — 是为了帮助我们使用MySQL, 给MySQL打交道用的. 种类一般是命令行终端 + 图形化界面工具
2.2.1 mysql命令行实用程序
命令行终端来给MySQL提供要执行地命令, 与MySQL打交道
每个MySQL安装都有一个名为mysql的简单命令行实用程序。
mysql命令行实用程序是使用最多的实用程序之一
2.2.2 MySQL Administrator
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
iBA5bCP5p2wMzEy,size_20,color_FFFFFF,t_70,g_se,x_16)
2.2.2 MySQL Administrator
[外链图片转存中…(img-RZcPGbly-1715833711021)]
[外链图片转存中…(img-MwK7sTbv-1715833711021)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新