MySql必知必會1-10章總結(jié)

mysql命令行客戶端登錄

#默認端口3306 主機本地localhost
mysql -u root -p
#寫全的話
mysql -u root -p -h localhost -P 3307

解釋一下:-u 用戶名為root -p 密碼待輸入 -h 主機名localhost -P 注意大寫P ,意思是端口號3307

數(shù)據(jù)庫操作

#展示所有數(shù)據(jù)庫
show databases;
#使用數(shù)據(jù)庫
use kls;
#展示數(shù)據(jù)庫中所有的表
show tables;
#展示person表的字段
show columns from person;
#show columns from 可以用describe代替
describe person;
image.png

mysql不區(qū)分大小寫,但是為了易于閱讀,開發(fā)人員經(jīng)常把關(guān)鍵字大寫,列和表名小寫。(反正我是遵守不了,看大寫的英文難受)

檢索不同的行

如果查詢學(xué)生表的年齡,每個年齡只出現(xiàn)一次

select distinct age from student;

限制返回結(jié)果數(shù)

limit 5 表示從第1行開始,返回5條記錄

select name from student limit 5;

limit 5, 5表示從第5行開始,返回5條數(shù)據(jù)

select name from student limit 5,5;

另一種寫法:limit 2 offset 3 代表從行3(也就是第四行)開始取2行

select name from student limit 2 offset 3;

排序order by

注意:order by 不僅可以按照檢索的列排序,用非檢索的列排序也是合法的。
注意:在多個列進行降序排序,需要在每個列指定DESC關(guān)鍵字,因為不指定的都默認ASC升序排列。
注意:order by 和 limit連用的時候,limit放在order by的后面。

between操作符

用來檢索在兩個數(shù)值之間的記錄,例如查詢在18-20歲之間的學(xué)生

select * from student t where t.age between 18 and 20;

通配符 % 和 _

mysql使用LIKE操作符跟%通配符進行模糊搜索。

#查詢姓李的學(xué)生
select name from student where name like '李%';

①注意:根據(jù)mysql的配置方式,搜索是要區(qū)分大小寫的,例如模糊搜索中'jet%'是不會匹配JetPack的。
②注意'%jet%'表示匹配任何位置包括jet文本的值,而不論他之前或之后出現(xiàn)什么值。
③%表示搜索模式指定位置有0到多個任意字符。
④注意通配符_下劃線,只能匹配1個字符,不能多也不能少。
⑤%不會匹配NULL行,即使是like '%'也不會匹配NULL行。
⑥通配符一般處理時間比其他搜索要長,其他操作能達到盡量不要使用,使用通配符時候除非有絕對必要,否則不要把通配符用在開始處,因為放在開始處,搜索會最慢。

使用mysql正則表達式

mysql使用 regexp 表示后面跟的內(nèi)容為正則表達式

基本字符匹配

#正則匹配姓名為小剛的行
select * from student where name regexp '小剛';

. 點號是正則表達式中的一個重要字符,表示匹配任意一個字符。

#正則匹配0前面有任意一個字符的行,例如10、20等
select * from student where age regexp '.0';

正則表達式不區(qū)分大小寫,為了區(qū)分大小寫可以使用binary關(guān)鍵字

#下面例子則匹配jet 1000 或者 jet a000等
... where name regexp binary 'jet .000';

進行OR匹配

正則表達式利用|來表示or操作

#匹配名字中包括小明或小李的
... where name regexp '小明|小李';

匹配幾個字符之一

使用[]包裹的字符,表示匹配其中之一

#正則匹配包括1或2或3的學(xué)號
... where id regexp '[123]';

解釋:[123][1|2|3]的縮寫,其實[]就是正則中另一種形式的or語句,為什么加[]是因為如下:

image.png

字符集合也可以被否定,即匹配除指定字符之外的任何東西,即[^123]匹配除123這三個字符之外的任何東西。

正則匹配范圍

#例如
[0-9]
[a-z]
[1-3]
[a-e]
#將會匹配到1 Ton anvil 或 .5 ton anvil等 
... where name regexp '[1-5] Ton';

正則匹配特殊字符\\轉(zhuǎn)義

如果需要轉(zhuǎn)義\本身,需要使用\\\
為什么正則表達式用兩個\\呢?因為在mysql當(dāng)中,mysql自己解釋一個,正則表達式庫解釋一個。

正則匹配字符類

image.png

正則匹配多個實例

image.png

image.png

正則定位符

image.png

例如我們想搜索一個以.點號或者數(shù)字開頭的結(jié)果,怎么辦?
[0-9\.]是不行的,因為他會在文本的任意位置開始查找,解決辦法就是使用定位符^從文本開始位置查找。

... where name regexp '^[0-9\\.]';

創(chuàng)建計算字段

簡單來說,數(shù)據(jù)庫中存儲的結(jié)果不是我們最終想要的,例如省市區(qū)分別存儲在3列中,我們需要連在一列顯示。

拼接字段Concat()函數(shù)

#將first_name、 ( 、last_name、和)這四個字符串拼接起來,例如: 李 (小明)
select Concat(first_name, ' (' , last_name, ')') as name from student;

Trim()LTrim() 、RTrim()函數(shù)

分別為去掉左右兩邊的空格、去掉左邊空格、去掉右邊空格

如何測試計算?

image.png
#例如查詢當(dāng)前時間
select  now();
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容