文章目錄(PS:覺得不錯請點贊收藏支持一下)
- 一、資料庫介紹
- 1.1 概述
- 1.2 分類
- 1.3 作用
- 1.4 特點
- 二、關系型資料庫管理系統
- 2.1 介紹
- 2.2 分類
- 三、SQL的介紹
- 3.1 概述
- 3.2 作用
- 3.3 分類
- 3.4 說明
- MySQL 資料庫
- 一、介紹
- 1.1 概述
- 1.2 特點
- 二、資料型別&約束
- 2.1 資料型別
- 2.2 資料約束
- 三、命令列客戶端 MySQL
- 3.1 登錄&退出
- 3.2 資料庫操作的 SQL 陳述句
- 3.3 表結構操作的 SQL 陳述句
- 3.4 表資料操作的SQL陳述句
- 四、基本查詢
- 4.1 as 和 distinct 關鍵字
- 4.2 where 條件查詢
- 4.3 排序
- 4.4 分頁
- 4.5 分組
- 五、聚合函式
- 5.1 介紹
- 六、連接查詢
- 6.1 內連接查詢
- 6.2 左連接查詢
- 6.3 右連接查詢
- 6.4 自連接查詢
- 6.5 子查詢
一、資料庫介紹
1.1 概述
資料庫就是存盤和管理資料的倉庫,資料會按照一定的格式進行存盤,用戶可以對資料庫中的資料進行增加、洗掉、修改、查詢等操作,
1.2 分類
-
關系型資料庫
- 指采用了關系模型來組織資料的資料庫,簡單來說,關系模型指的就是二維表格模型,好比 Excel 檔案中的表格,強調使用表格的方式存盤資料,
- 核心元素【資料行、資料列、資料表、資料庫(資料表的集合)】
- 常用的資料庫【Oracle、Microsoft SQL Sever、MySQL、SQLite】
-
非關系型資料庫
- 又被稱為 NoSQL(Not Only SQL),意思是不僅僅是 SQL,對 NoSQL 最普遍的定義是"非關聯型的",強調 Key-Value 的方式存盤資料,
- 常用的非關系型資料庫【MongoDB、Redis】
1.3 作用
- 資料庫的作用就是存盤和管理資料,比如:我們在淘寶、京東等購物網站瀏覽的商品,這些資料都會存盤在資料庫,
1.4 特點
- 持久化存盤
- 讀寫速度極高
- 保證資料的有效性
二、關系型資料庫管理系統
2.1 介紹
資料庫管理系統(英語全拼: Relational Database Management System,簡稱 RDBMS) 是為管理關系型資料庫而設計的軟體系統,也可以理解為它是一個應用軟體,
2.2 分類
-
關系型資料庫服務端軟體
- 主要負責管理不同的資料庫,而每個資料庫里面會有一系列資料檔案,資料檔案是用來存盤資料的,其實資料庫就是一系列資料檔案的集合,
-
關系型資料庫客戶端軟體、
- 主要負責和關系型資料庫服務端軟體進行通信,向服務端傳輸資料或者從服務端獲取資料,
三、SQL的介紹
3.1 概述
SQL(英語全拼:Structured Query Language) 是結構化查詢語言,是一種用來操作RDBMS的資料庫的語言,也就是說 SQL 可以操作 Oracle、Microsoft SQL Sever、MySQL、SQLite 等關系型的資料庫,
3.2 作用
SQL 的作用是實作資料庫客戶端和資料庫服務端之間的通信,也就是說 SQL 是通信的橋梁,
3.3 分類
- DQL:資料查詢語言,用于對資料進行查詢,如:select
- DML:資料操作語言,對資料進行增加、洗掉、修改,如:insert、update、delete
- TPL:事務處理語言,對事務進行處理,如:begin、transaction、commit、rollback
- DCL:資料控制語言,進行授權與權限回收,如:grant、revoke
- DDL:資料定義語言,進行資料庫、表的管理等,如:create、drop
3.4 說明
- SQL 語言不區分大小寫
- 對于程式員來說,重點是資料的增、刪、改、查,必須熟練撰寫 DQL、DML,還能夠撰寫 DDL 完成資料庫、表的操作,其它操作如 TPL、DCL了解即可,
MySQL 資料庫
一、介紹
1.1 概述
MySQL 是一個關系型資料庫管理系統,在 Web 應用方面,MySQL 是最好的 RDBMS(英語全拼: Relational Database Management System,關系型資料庫管理系統)應用軟體,它是由瑞典 MySQL AB 公司開發,目前屬于 Oracle 旗下產品,MySQL 是最流行的關系型資料庫管理系統中的一個,
1.2 特點
- 開源,不需要支付額外的費用,
- 支持大型的資料庫,可以處理擁有上千萬條記錄的大型資料庫,
- 使用標準的 SQL 資料語言形式,
- 可以安裝在不同的作業系統,并且提供多種編程語言的操作介面,包括 C、C++、Python、Java等等,
二、資料型別&約束
眾所周知,資料庫中的資料保存在資料表中,為了在表中更加準確的存盤資料,保證資料的正確有效,開發者為表添加了一些強制性的驗證,比如:資料型別、約束,
2.1 資料型別
資料型別是指在創建表的時候為表中欄位指定資料型別,只有資料符合型別要求才能存盤起來,使用資料型別的原則:夠用就行,盡量使用取值范圍小的,這樣可以節省更多的存盤空間,
-
常用資料型別
- 整數:int,bit
- 小數:decimal
- 字串:varchar,char
- 日期時間:date,time,datetime
- 列舉型別:enum
-
說明
- decimal 表示浮點數,如:decimal(5,2) 表示共存5位數,小數占2位,
- char 表示固定長度的字串,如 char(3),如果填充 ‘ab’ 時會補一個空格為 'ab ',3 表示字符數,
- varchar 表示可變長度的字串,如 varchar(3),填充 ‘ab’ 時就會存盤 ‘ab’,3 表示字符數,
- 字串 text 表示存盤大文本,當字符大于 4000 時推薦使用,比如技術博客,
- 對于圖片、音頻、視頻等檔案,不存盤在資料庫中,而是上傳到某個服務器上,然后在表中存盤這個檔案的保存路徑,
附錄表
- 整數型別
| 型別 | 位元組大小 | 有符號范圍(signed) | 無符號范圍(Unsigned) |
|---|---|---|---|
| TINYINT(tinyint) | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT(smallint) | 2 | -32768 ~ 32767 | 0 ~ 65535 |
| MEDIUMINT(mediumint) | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
| INT/INTEGER(int/integer) | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
| BIGINT(bigint) | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
- 字串
| 型別 | 說明 | 使用場景 |
|---|---|---|
| CHAR(char) | 固定長度,小型資料 | 身份證號、手機號、電話、密碼 |
| VARCHAR(varchar) | 可變長度,小型資料 | 姓名、地址、品牌、型號 |
| TEXT(text) | 可變長度,字符個數大于 4000 | 存盤小型文章或新聞 |
| LONGTEXT(longtext) | 可變長度,極大型文本資料 | 存盤極大型文本資料 |
- 時間型別
| 型別 | 位元組大小 | 示例 |
|---|---|---|
| DATE(date) | 4 | ‘2021-01-01’ |
| TIME(time) | 3 | ‘12:29:59’ |
| DATETIME(datetime) | 8 | ‘2021-01-01 12:29:59’ |
| YEAR(year) | 1 | ‘2021’ |
| TIMESTAMP(timestamp) | 4 | ‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-01 00:00:01’ UTC |
2.2 資料約束
約束是指資料在資料型別限定的基礎上額外增加的要求,
- 常見的約束
- 主鍵
primary key:物理上存盤的順序,MySQL 建議所有表的主鍵欄位都叫 id ,型別為 int unsigned, - 自動增加
auto_increment:必須先定義了鍵,如:foreign key、primary key,才能使用自動增加,使用時該欄位的資料型別必須是整數型別,一個表中只能由一個自動增長欄位, - 非空
not null:此欄位不允許填寫空值, - 唯一
unique:此欄位的值不允許重復, - 默認
default:當不填寫欄位對應的值會使用默認值,如果填寫時以填寫為準, - 外鍵
foreign key:對關系欄位進行約束,當為關系欄位填寫值時,會到關聯的表中查詢此值是否存在,如果存在則填寫成功,不存在則填寫失敗并拋出例外,
- 主鍵
三、命令列客戶端 MySQL
3.1 登錄&退出
- 登錄命令
mysql -u root -p;
-u 后面是登錄的用戶名
-p 后面時登錄密碼,如果不填寫,回車之后會提示輸入密碼
- 退出命令
quit 或 exit 或 ctrl + d
3.2 資料庫操作的 SQL 陳述句
- 查看所有資料庫
show databases;
- 創建資料庫
create database 資料庫名 charset=utf8;
例:
create database python charset=utf8;
- 使用資料庫
use 資料庫名;
- 查看當前使用的資料庫
select database();
- 洗掉資料庫 !(慎重使用)
drop database 資料庫名;
3.3 表結構操作的 SQL 陳述句
- 查看當前資料庫中所有表
show tables;
- 創建表
create table 表名(
欄位名稱 資料型別 可選的約束條件,
欄位名稱 資料型別 可選的約束條件,
...
);
例: 創建一個學生表,添加學號(id),姓名(name),性別(gender)欄位
create table student(
id int primary key auto_increment,
name varchar(20),
gender enum('男','女','保密')
);
- 修改表-【添加欄位】
add: 增加
alter table 表名 add 欄位名 型別 約束;
- 修改表-【修改欄位型別】
modify: 只能修改欄位型別或約束,不能修改欄位名
alter table 表名 modify 欄位名 型別 約束;.
- 修改表-【修改欄位名和欄位型別】
change: 既能修改欄位名還能修改欄位型別和約束
alter table 表名 change 欄位原名 欄位新名 型別 約束;
- 修改表-【洗掉欄位】
drop: 可以洗掉欄位名
alter table 表名 drop 欄位名;
- 查看創表SQL陳述句
show create table 表名;
- 查看創庫SQL陳述句
show create database 資料庫名;
- 修改表名
alter table 舊表名 rename to 新表名;
- 洗掉表 !(慎重使用)
drop table 表名;
3.4 表資料操作的SQL陳述句
- 查詢資料
1. 查詢所有欄位
select * from 表名;
2. 查詢指定欄位
select 欄位名1,欄位名2... from 表名;
- 添加資料
1. 為表中所有欄位添加資料,值的順序需要與結構欄位的順序完全一一對應
insert into 表名 values(值1,值2...);
2. 為表中所有欄位添加多個資料,值的順序需要與結構欄位的順序完全一一對應
insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...)...;
3. 對表中指定的欄位添加資料,值的順序需要與指定的欄位名順序完全一一對應
insert into 表名(欄位名1,欄位名2) values(值1,值2);
4. 對表中指定的欄位添加多條資料,值的順序需要與指定的欄位名順序完全一一對應
insert into 表名(欄位名1,欄位名2) values(值1,值2),(值1,值2)....;
說明:
1. 如果有欄位是主鍵自動增長型別,那么在為表中所有欄位添加資料時需要占位,通常使用空值(0 或者 null 或者 default)來進行占位,
2. 為所有欄位添加資料時,如果其中一個欄位列有默認值可以使用 default 來占位,
- 修改資料
update 表名 set 欄位名1=值1,欄位名2=值2... where 條件;
- 洗掉資料
delete from 表名 where 條件
四、基本查詢
4.1 as 和 distinct 關鍵字
- as 關鍵字
使用 SQL 陳述句顯示結果時,顯示的欄位名不具備良好的可讀性,這時,我們可以使用 as 給欄位起一個別名
1. 使用 as 給欄位起別名
select id as 序號,name as 名字,gender as 性別 from 表名;
2. 使用 as 給表起別名
1) 如果是單表查詢,可以省略表名
select 欄位名1,欄位名2... from 表名;
2) 表名.欄位名 示例:
select 表名.欄位名1,表名.欄位名2... from 表名;
2) 使用 as 給表起別名 示例:
select 別名.欄位名1,別名.欄位名2... from 表名 as 別名;
- distinct 關鍵字
distinct : 去除重復資料行
select distinct 欄位名1,欄位名2... from 表名;
4.2 where 條件查詢
使用 where 條件查詢主要作用于對表中的資料進行篩選,獲取到想要的結果,
- 語法格式
select * from 表名 where 條件;
where 陳述句支持的運算子【比較運算子、邏輯運算子、模糊查詢、范圍查詢、空判斷】
- 比較運算子查詢
比較運算子分別有【=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、!=(不等于)、<>(不等于)】
舉例
1. 查詢 編號欄位 大于等于 5 的資料;
select * from 表名 where 編號欄位名 >= 5;
2. 查詢 編號欄位 不等于 2 的資料;
select * from 表名 where 編號欄位名 != 2;
比較好理解就不過多介紹了
- 邏輯運算子查詢
邏輯運算子包括【and、or、not】
舉例
1. 查詢 編號欄位大于5 并且 性別欄位為女 的資料;
select * from 表名 where 編號欄位名 >= 5 and 性別欄位名 = '女';
- 模糊查詢
- like:模糊查詢關鍵字
- %:表示任意多個任意字符
- _: 表示一個任意字符
舉例
1. 查詢 姓名欄位 姓為張 的資料;
select * from 表名 where 姓名欄位名 like '張%';
2. 查詢 姓名欄位 姓為張 名是一個字 的資料;
select * from 表名 where 姓名欄位名 like '張_';
- 范圍查詢
- between … and … 表示在一個連續的范圍內查詢
- in 表示在一個非連續的范圍內查詢
1. 查詢 編號欄位 3 到 6 的資料;
select * from 表名 where 編號欄位名 between 3 and 6;
2. 查詢 編號欄位 3 和 6 的資料;
select * from 表名 where 編號欄位名 in (3,6);
- 空判斷查詢
- 判斷為空使用:is null
- 判斷非空使用:is not null
1. 查詢 年齡欄位 內容為空 的資料;
select * from 表名 where 年齡欄位名 is null;
2. 查詢 年齡欄位 內容不為空 的資料;
select * from 表名 where 年齡欄位名 is not null;
注意:
> 不能使用 where 欄位名 = null 判斷為空
> 不能使用 where 欄位名 != null 判斷非空
> null 不等于 '' 空字串
4.3 排序
- 語法
select * from 表名 order by 欄位名1 desc [欄位名2 desc];
說明:
1. 先按照 欄位名1 進行排序,如果 欄位名1 的值相同時,則按照 欄位名2 排序,以此類推
2. asc 從小到大排序,即升序
3. desc 從大刀小排序,即降序
4. 默認按照 欄位名值 從小到大排序 (即 asc 關鍵字)
- 舉例
1. 查詢 所有資訊,按 年齡欄位 升序排序;
select * from 表名 order by 年齡欄位名;
2. 查詢 所有資訊,按 年齡欄位 降序排序;
select * from 表名 order by 年齡欄位名 desc;
4.4 分頁
- 語法
select * from 表名 limit start,count
說明:
1. limit 是分頁查詢關鍵字
2. start 表示開始行索引,默認為0
3. count 表示查詢條數
- 舉例
1. 查詢 表中前3條 資料;
select * from 表名 limit 0,3;
也可以這樣寫
select * from 表名 limit 3;
- 案例
已知每頁顯示 m 條資料,求第 n 頁顯示的資料
分析:需要求每頁的開始行索引
select * from 表名 limit (n-1)*m,m;
4.5 分組
- 語法
select 欄位名 from 表名 group by 欄位名 having 條件;
說明:
1. group by 是分組查詢的關鍵字
2. having 也是關鍵字,都是和 group by 一起使用,主要用于篩選,后面也可以是聚合函式
- 舉例
1. 對 學生表 中的 性別欄位 進行分組,并統計各組有多少人
select 性別欄位名,count(*) from 學生表 group by 性別欄位名
2. 對 學生表 中的 成績欄位 進行分組,篩選出大于60分的組,并統計各組有多少條資料
select 成績欄位名,count(*) from 學生表 group by 成績欄位名 having 成績欄位名 > 60;
注意: 使用 group by 分組查詢關鍵字后,查詢串列建議只出現分組欄位和聚合函式
五、聚合函式
5.1 介紹
聚合函式又叫組函式,通常是對表中的資料進行統計結果計算,一般結合分組 (group by) 來使用,用于統計和計算分組資料,
-
常用的聚合函式
- count(col):表示求指定 欄位 的總條數
- max(col):表示求指定 欄位 的最大值
- min(col):表示求指定 欄位 的最小值
- sum(col):表示求指定 欄位 的和
- avg(col):表示求指定 欄位 的平均值
-
舉例
1. 求 姓名欄位 總條數
select count(姓名欄位名) from 表名;
2. 求 年齡欄位 最大值
select max(年齡欄位名) from 表名;
3. 求 年齡欄位 最小值
select min(年齡欄位名) from 表名;
4. 求 身高欄位 的和
select sum(身高欄位名) from 表名;
5. 求 身高欄位 的平均值
select avg(身高欄位名) from 表名;
如果 身高欄位 中的值有 null 時,需要這樣寫
select avg(ifnull(身高欄位名,新的值)) from 表名;
說明:
> ifnull 函式: 表示判斷指定欄位的值是否為 null,如果為空使用自己提供的值
> 聚合函式默認忽略欄位為 null 的記錄,要想 指定欄位的值為 null 的記錄也參與計算,必須使用 ifull 函式對 null 值做替換,
六、連接查詢
連接查詢可以實作多個表的查詢,當查詢的欄位資料來自不同的表就可以使用連接查詢來完成,
連接查詢包括【內連接查詢、左連接查詢、右連接查詢、自連接查詢】
6.1 內連接查詢
查詢兩個表中符合條件的共有記錄
- 語法格式
select 欄位名 from 表1 inner join 表2 on 表1.欄位1 = 表2.欄位2;
說明:
1. inner join 就是內連接查詢關鍵字
2. on 就是連接查詢條件
- 舉例
使用 內連接 查詢學生表與班級表
select * from 學生表 inner join 班級表 on 學生表.欄位名 = 班級表.欄位名;
6.2 左連接查詢
以左表為主,根據條件查詢右表中的資料,如果根據條件查詢右表的資料不存在時使用 null 填充
- 語法格式
select 欄位名 from 表1 left join 表2 on 表1.欄位1 = 表2.欄位2
說明:
1. left join 就是左連接查詢關鍵字
2. on 就是連接查詢條件
3. 表1 是左表
4. 表2 是右表
- 舉例
使用 左連接 查詢學生表與班級表
select * from 學生表 left join 班級表 on 學生表.欄位名 = 班級表.欄位名;
6.3 右連接查詢
以右表為主,根據條件查詢左表中的資料,如果根據條件查詢左表的資料不存在時使用 null 填充
- 語法格式
select 欄位名 from 表1 right join 表2 on 表1.欄位1 = 表2.欄位2;
說明:
1. right join 就是右連接查詢關鍵字
2. on 就是連接查詢條件
3. 表1 是左表
4. 表2 是右表
- 舉例
使用 右連接 查詢學生表與班級表
select * from 學生表 right join 班級表 on 學生表.欄位名 = 班級表.欄位名;
6.4 自連接查詢
左表和右表是同一個表,根據連接查詢條件查詢兩個表中的資料
- 語法格式
select 表1別名.欄位名,表2別名.欄位名... from 表1 as 表1別名 right join 表2 as 表2別名 on 表1別名.欄位1 = 表2別名.欄位2;
說明:
> 自連接查詢必須對表起別名
6.5 子查詢
在一個 select 陳述句中,嵌入了另外一個 select 陳述句,那么被嵌入的 select 陳述句稱之為子查詢陳述句,外部那個 select 陳述句則稱為主查詢,
-
主查詢和子查詢的關系
- 子查詢是嵌入到主查詢中
- 子查詢是輔助主查詢的,要么充當條件,要么充當資料源
- 子查詢是可以獨立存在的陳述句,是一條完整的 select 陳述句
-
語法格式
select * from 表名 where 欄位名 條件 (select * from 表名);
- 舉例
查詢 大于平均年齡 的 學生表
select * from 學生表 where 年齡欄位 > (select avg(年齡欄位) from 學生表);
能不能續更就看你們啦 🤣
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/305009.html
標籤:其他
上一篇:Gin框架專案實戰(二)
