今天我們主要學習MySQL資料型別和其他查詢,由於程式碼比較多,就不一一截圖了,大家可以按照我提供的程式碼來執行,但是建議自己嘗試去寫出來,這樣效果會更好一點。讓我們開始敲程式碼吧~
一、資料型別
1。常見資訊種類
數值型別
字串
日期時間
列舉型別:例如性別、狀態
二進位制:例如影象、音訊、影片
2。 數值型別
(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填充
如果數值超過該型別的最大值,系統會報錯
浮點數小數部分超過指定位數範圍,浮點部分系統自動做四捨五入
如果整數插入浮點數字段,將自動轉換為浮點數
3。 字串型別
(1)char:定長字串
其最大儲存255個字元
如果實際內容不足指定長度,右邊會自動填充空格
如果不指定長度,則系統預設長度為1
如果超過設定的最大長度時,則無法存入
(2)varchar:變長字串
其最大可儲存65535個字元
實際操作中,按大小來分配儲存空間
如果超過指定最大長度時,則無法存入
(3)text:大文字型別
如果儲存內容大於65535位元組時,則使用該種類型
(4)比較char和varchar的特點
因為char是固定長度,如果不夠則儲存0,實際上是浪費儲存空間,而varchar是變動的,所以能節約儲存空間
因為char直接插入,不需要匹配,所以效能高,而varchar需要匹配,所以效能低
為了節約儲存空間,實際過程中推薦使用varchar(基本按照這個來設定)
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
二、其他查詢
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非空的訂單
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;
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子句,限制顯示的內容
三、結束語
本次分享把SQL語句中日常用到的語句基本都介紹完了,希望大家能跟著一起動手操作起來,不僅僅是瞭解,要做到熟練敲程式碼。
下次將分享高階查詢(子查詢)、聯合查詢以及資料匯入匯出的操作,敬請期待吧。
如果喜歡本人的分享,歡迎關注,也歡迎在留言,進行交流分享,一起成長。
贈人玫瑰,手留餘香~