乾貨 | 帶你零基礎學習MySQL(三)

今天我們主要學習MySQL資料型別和其他查詢,由於程式碼比較多,就不一一截圖了,大家可以按照我提供的程式碼來執行,但是建議自己嘗試去寫出來,這樣效果會更好一點。讓我們開始敲程式碼吧~

乾貨 | 帶你零基礎學習MySQL(三)

一、資料型別

1。常見資訊種類

數值型別

字串

日期時間

列舉型別:例如性別、狀態

二進位制:例如影象、音訊、影片

2。 數值型別

乾貨 | 帶你零基礎學習MySQL(三)

(1)示例

—— 建立表格num_testcreate table num_test( —— 顯示4位寬度, 無符號, 左邊0填充 card_type int(4) unsigned zerofill, dist_rate decimal(12,2) ); —— 插入資料 insert into num_test values(1,0。66); insert into num_test values(2,123。4567); insert into num_test values(3,2); insert into num_test values(10000,3。456);

說明:

如果欄位使用unsinged來修飾時,不能為負數,欄位值只能是正數或0

正數定義時的長度,而不是儲存的大小,儲存大小由資料型別決定,僅僅是顯示寬度

如果使用zerofill時,數值左邊會以0填充

如果數值超過該型別的最大值,系統會報錯

浮點數小數部分超過指定位數範圍,浮點部分系統自動做四捨五入

如果整數插入浮點數字段,將自動轉換為浮點數

乾貨 | 帶你零基礎學習MySQL(三)

3。 字串型別

(1)char:定長字串

其最大儲存255個字元

如果實際內容不足指定長度,右邊會自動填充空格

如果不指定長度,則系統預設長度為1

如果超過設定的最大長度時,則無法存入

(2)varchar:變長字串

其最大可儲存65535個字元

實際操作中,按大小來分配儲存空間

如果超過指定最大長度時,則無法存入

(3)text:大文字型別

如果儲存內容大於65535位元組時,則使用該種類型

(4)比較char和varchar的特點

因為char是固定長度,如果不夠則儲存0,實際上是浪費儲存空間,而varchar是變動的,所以能節約儲存空間

因為char直接插入,不需要匹配,所以效能高,而varchar需要匹配,所以效能低

為了節約儲存空間,實際過程中推薦使用varchar(基本按照這個來設定)

乾貨 | 帶你零基礎學習MySQL(三)

4。列舉

(1)列舉的兩種型別

enum: 從給定值中選擇一個

set:從給定值中選擇多個

(2)示例

—— 建立表格enum_testCREATE TABLE enum_test ( NAME VARCHAR (32), sex enum (‘man’, ‘female’), courseSET (‘cook’, ‘dance’, ‘paint’));—— 插入範圍內的資料 insert into enum_test values(‘Jerry’,‘female’,‘cook,dance’); insert into enum_test values(‘Tom’,‘man’,‘paint’);—— 插入範圍外的資料(報錯) insert into enum_test values(‘Dekie’,‘man’,‘cook,football’);—— 報錯程式碼:[Err] 1265 - Data truncated for column ‘course’ at row 1

乾貨 | 帶你零基礎學習MySQL(三)

二、其他查詢

1。運算子

(1)比較運算子:>,<,>=,<=,=,<>或!=

—— 1。 查詢訂單金額大於300的資料 select * from orders where amt > 300; —— 自己嘗試改成500,800,1000等數字進行查詢—— 2:查詢狀態不等於2的訂單 select * from orders where status <> 2; —— 或者 where status != 2 ;—— 自己嘗試改成1或者其他的數字進行查詢

(2)邏輯運算子

and: 同時滿足多個條件

or:滿足多個條件中的一個

—— 1。查出訂單金額300~500之間的資料包含300和500 select * from orders where amt >= 300 and amt <= 500; ——2。查詢客戶編號為C0001、C0002的使用者所下的訂單 select * from orders where cust_id = ‘C0001’ or cust_id = ‘C0002’;——3。 查詢客戶編號為C0001、C0003的 客戶所下的、狀態為1訂單 select * from orders where (cust_id=‘C0001’ or cust_id=‘C0003’) and status = 1;—— 以上資料都可以進行更換,大家自己嘗試下,多練習多鞏固~

(3)範圍比較

between。。。and。。。: 在。。。。之間(特別注意其包含邊界值,如果想不包含,則用>,<)

in/not in:在/不在某個集合內

—— 1。查出訂單金額100~500之間的資料(包含100和500) select * from orders where amt between 100 and 500; —— 2。查詢使用者編號為C0001、C0003的使用者所下的訂單 select * from orders where cust_id in (‘C0001’,‘C0003’); —— 3。查詢使用者編號不包含C0001的使用者所下的訂單 select * from orders where cust_id not in (‘C0001’);

(4)模糊查詢

格式:where 欄位名 like “通配字串”

匹配一個字元:下劃線(_)

匹配任意多個字元:百分號(%)

—— 建立表格customercreate table customer( cust_id varchar(32), cust_name varchar(32), tel_no varchar(32) ) default charset=utf8; —— 插入資料 insert into customer values (‘C0001’,‘Jerry’,‘138111111111’), (‘C0002’,‘Dekie’,‘13855555555’), (‘C0003’,‘Dokas’,‘15877777777’); —— 查詢以D開頭的使用者名稱稱 select * from customer where cust_name like ‘D%’; —— 查詢名字中包含e的客戶資訊(任意位置) select * from customer where cust_name like ‘%e%’;—— 查詢首位字母是D,第三位是k的所有客戶資訊 select * from customer where cust_name like ‘D_k%’;—— 可以自己虛擬其他的資料來進行測試

(5)空值判斷

is null:判斷為空

is not null:判斷為非空

—— 查詢狀態為空的訂單 select * from orders where status is null; —— is not null則是status非空的訂單

乾貨 | 帶你零基礎學習MySQL(三)

2。查詢子句

(1)order by子句:對查詢結果進行排序

ASC:升序(預設排序方式)

DESC:降序

order by 排序欄位 ASC/DESC;—— 1。查詢所有訂單資訊,按照金額降序排列 select * from orders order by amt desc;—— 2。查詢所有訂單資訊,按照訂單先後順序排列 select * from orders order by order_id;

(2)limit子句:限制查詢顯示的筆數

limit n :限定顯示前n筆

limit m,n :從第m筆顯示,共顯示n筆

—— 1。查詢所有訂單,顯示金額最大的2筆 select * from orders order by amt desc limit 2; —— 2。查詢所有訂單,從第2筆開始顯示,總共顯示3筆(特別注意系統的位數均是以0開始的,如果是第二位,就是1,如果是第5位,就是4,以此類推) select * from orders order by amt desc limit 1,3;

(3)distinct:去重

—— 格式: select distinct(欄位名) from 表名; - 1。查詢訂單表一共有幾種訂單狀態 select distinct(status) from orders;—— 2。查詢有多少使用者下了訂單 select DISTINCT(order_id) from orders;

(4)Group by子句:對查詢結果進行分組,通常和聚合函式配合使用

—— 格式:group by 分組欄位—— 1。統計各種狀態訂單數量 select status,count(*) from orders group by status; —— 2。統計各種訂單狀態的最大金額 select status, max(amt) from orders group by status;

(5)Having子句:其作用是對分組聚合結果進行篩選,需要和group by子句配合使用

—— 統計各種狀態訂單數量,不顯示狀態為null的訂單(過濾掉null ) select status, count(*) from orders where amt>=0 group by status having status is not null;

(6)case 條件語句:根據設定的條件對目標變數進行分組

—— 統計訂單金額,並對其進行分級處理 SELECT *, CASEWHEN amt < 100 THEN ‘100-’WHEN amt >= 400 THEN ‘400+’ELSE ‘100-400’ END AS ‘金額區間’from orders;

(7)concat :連線字串

—— 將每個訂單編號、客戶ID和金額放在一起輸出SELECT order_id, CONCAT(cust_id, ‘+’, amt)from orders;

(8)coalesce:如遇空值,可替換成其他非空值

select status, coalesce (status, ‘0’) from orders;

(9)substr:擷取字元中所需要的字元

select substr ( order_id, 1, 4) from orders;

乾貨 | 帶你零基礎學習MySQL(三)

3。 聚合函式

(1)定義

聚合函式是對資料進行總結,將結果返回,並不需要返回表中具體資料。

(2)具體型別

—— 求某列最大值:max select max(amt) from orders;—— 求某列最小值:min select min(amt) from orders;—— 求某列的平均值:avg select avg(amt) from orders;—— 求某列的和:sum select sum(amt) from orders; —— 統計記錄筆數:count select count(*) from orders;

4。SQL語句執行先後順序

第1步:首先會執行from語句,去找到源資料的位置

第2步:然後執行where子句,選出所有滿足條件的資料

第3步:再執行group by子句,進行分組

第4步:然後根據分組,執行聚合函式

第5步:然後執行having子句,對聚合結果過濾

第6步:再執行order by子句,對結果進行排序

第7步:最後執行limit子句,限制顯示的內容

乾貨 | 帶你零基礎學習MySQL(三)

三、結束語

本次分享把SQL語句中日常用到的語句基本都介紹完了,希望大家能跟著一起動手操作起來,不僅僅是瞭解,要做到熟練敲程式碼。

下次將分享高階查詢(子查詢)、聯合查詢以及資料匯入匯出的操作,敬請期待吧。

如果喜歡本人的分享,歡迎關注,也歡迎在留言,進行交流分享,一起成長。

贈人玫瑰,手留餘香~

乾貨 | 帶你零基礎學習MySQL(三)