版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
MySQL與SQL項(xiàng)目7【能力目標(biāo)】
掌握MySQL的基礎(chǔ)用?法。掌握MySQL中的數(shù)據(jù)類?型。熟悉MySQL中的運(yùn)算符與表達(dá)?式。理解MySQL中的常見內(nèi)置函數(shù)及其功?能。【素養(yǎng)目標(biāo)】培養(yǎng)精益求精的工匠精神,建立規(guī)范編寫程序代碼的意?識。目標(biāo)學(xué)習(xí)導(dǎo)航圖7-1項(xiàng)目7所講內(nèi)容在數(shù)據(jù)庫系統(tǒng)開發(fā)中的位置認(rèn)識SQL7.17.1.1SQL簡介
SQL是一種由美國國家標(biāo)準(zhǔn)協(xié)會(AmericanNationalStandardInstitute,ANSI)規(guī)范的標(biāo)準(zhǔn)計算機(jī)語言,用于訪問和處理數(shù)據(jù)庫系統(tǒng)。
SQL具有面向數(shù)據(jù)庫執(zhí)行查詢、從數(shù)據(jù)庫取回數(shù)據(jù)、在數(shù)據(jù)庫中插入新的記錄、更新及刪除數(shù)據(jù)庫中的記錄、創(chuàng)建庫和表、在數(shù)據(jù)庫中創(chuàng)建存儲過程及視圖、設(shè)定表及視圖對象的權(quán)限等功能。不同類型的數(shù)據(jù)庫使用的SQL語句會略有不同,但都會遵循基本的標(biāo)準(zhǔn)SQL。7.1.2SQL的組成
SQL分為四大部分:數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言、數(shù)據(jù)查詢語言和數(shù)據(jù)控制語?言。
1.?dāng)?shù)據(jù)定義語言
數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)的主要操作對象為數(shù)據(jù)庫、表、視圖、索引和觸發(fā)器等。最常用的語句如CREATE、ALTER、DROP等?!纠?-1】創(chuàng)建數(shù)據(jù)庫userTest,并在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表user。
執(zhí)行結(jié)果如圖7-2所?示。CREATEDATABASEuserTest;USEuserTest;CREATETABLEuser(uidINTNOTNULLPRIMARYKEY,usernameVARCHAR(10)NOTNULL);圖7-2在數(shù)據(jù)庫userTest中創(chuàng)建表user圖7-3修改表結(jié)構(gòu)(增加一列)【例7-2】修改表user的表結(jié)構(gòu)(增加一列)。ALTERTABLEuserADDpasswordCHAR(8)NOTNULL;DESCuser;執(zhí)行結(jié)果如圖7-3所?示。7.1.2SQL的組成2.?dāng)?shù)據(jù)操縱語言
數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)的主要操作對象為數(shù)據(jù)(行),常見關(guān)鍵字有INSERT(插入數(shù)據(jù))、UPDATE(更新數(shù)據(jù))、DELETE(刪除數(shù)據(jù))?!纠?-3】在表user中插入一條數(shù)?據(jù)。INSERTINTOuserVALUES(1101,'JIM','020311');SELECT*FROMuser;執(zhí)行結(jié)果如圖7-4所?示。圖7-4使用DML的INSERT語句插入數(shù)據(jù)7.1.2SQL的組成2.?dāng)?shù)據(jù)操縱語言
數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)的主要操作對象為數(shù)據(jù)(行),常見關(guān)鍵字有INSERT(插入數(shù)據(jù))、UPDATE(更新數(shù)據(jù))、DELETE(刪除數(shù)據(jù))?!纠?-3】在表user中插入一條數(shù)?據(jù)。INSERTINTOuserVALUES(1101,'JIM','020311');SELECT*FROMuser;執(zhí)行結(jié)果如圖7-4所?示。圖7-4使用DML的INSERT語句插入數(shù)據(jù)7.1.2SQL的組成圖7-5使用DML的UPDATE語句更新數(shù)據(jù)【例7-4】將表user中uid為1101的用戶名改為WangMing。UPDATEuserSETusername='WangMing'WHEREuid=1101;SELECT*FROMuser;執(zhí)行結(jié)果如圖7-5所?示。7.1.2SQL的組成
3.?dāng)?shù)據(jù)查詢語言
數(shù)據(jù)查詢語言(DataQueryLanguage,DQL)一般指數(shù)據(jù)檢索語句,用來從表中獲取數(shù)據(jù),確定數(shù)據(jù)在應(yīng)用程序中的顯示方式。通常使用SELECT語句來查詢數(shù)據(jù)記錄,SELECT語句能夠進(jìn)行單表查詢、連接查詢、嵌套查詢,以及集合查詢等各種不同復(fù)雜程度的數(shù)據(jù)庫查詢。4.?dāng)?shù)據(jù)控制語言
數(shù)據(jù)控制語言(DataControlLanguage,DCL)主要用于控制用戶的訪問權(quán)限,常用的有GRANT、REVOKE、COMMIT、ROLLBACK等語句。7.1.2SQL的組成認(rèn)識常量和變量7.21.字符串常量字符串常量通常使用英文的單引號或雙引號引起來。如果字符串常量中含有換行符號、單引號、雙引號、“%”或“\”,就需要在符號前面加上轉(zhuǎn)義字符“\”。SELECT'\"hello\"\nworld\n\\Hi!';執(zhí)行結(jié)果如圖7-6所?示。7.2.1認(rèn)識常量【例7-5】字符串常量的用法舉?例。圖7-6字符串常量的用法舉例【例7-6】數(shù)值常量用法舉?例。SELECT12+20+23.5-8.7+3;圖7-7數(shù)值常量用法舉例7.2.1認(rèn)識常量2.?dāng)?shù)值常量
數(shù)值常量分為整數(shù)常量和浮點(diǎn)數(shù)常量,它通常與算術(shù)運(yùn)算符結(jié)合使?用。執(zhí)行結(jié)果如圖7-7所?示。【例7-7】布爾常量用法舉?例。SELECTTRUE,FALSE,120<80;圖7-8布爾常量用法舉例7.2.1認(rèn)識常量3.布爾常量布爾常量的取值有TRUE和FALSE,在SQL中使用數(shù)值1和0表示。通常布爾常量與比較運(yùn)算符或邏輯運(yùn)算符配合使?用。執(zhí)行結(jié)果如圖7-8所?示。SET@變量名=值;7.2.2認(rèn)識變量
1.用戶自定義變量
用戶自定義變量是由用戶自己定義的變量,可以暫存值,并傳遞給同一連接中的下一條SQL語句使用的變量,它的作用域?yàn)楫?dāng)前會話(客戶端連接)。
用戶自定義變量的聲明通常以@開始,用SET關(guān)鍵字給變量賦值。變量的聲明和初始化格式如?下。MySQL中的變量類似于動態(tài)語言,在賦值時,會根據(jù)具體的值來確定變量的數(shù)據(jù)類型。也就是說,int、string類型的值都可以賦給同一個變量。MySQL將未分配值的變量默認(rèn)設(shè)為NULL,類型為字符?串。SET@name='Kate';SELECT@name;7.2.2認(rèn)識變量1.用戶自定義變量
對用戶變量賦值的方式有兩種,一種是直接用“=”,另一種是用“:=”。使用SET對用戶變量進(jìn)行賦值時,兩種方式都可以使用;使用SELECT語句對用戶變量進(jìn)行賦值時,只能使用“:=”,因?yàn)樵赟ELECT語句中,“=”會被看作比較運(yùn)算?符。【例7-8】創(chuàng)建一個用戶變量并查詢其?值。執(zhí)行結(jié)果如圖7-9所?示。圖7-9布爾常量用法舉例【例7-9】將【例7-8】中定義的用戶變量插入表user中,并進(jìn)行查?詢。
INSERTINTOuserVALUES(1102,@name,'223311');SELECT*FROMuser;
執(zhí)行結(jié)果如圖7-10所示。
7.2.2認(rèn)識變量圖7-10使用定義的用戶變量7.2.2認(rèn)識變量2.系統(tǒng)變量MySQL服務(wù)器維護(hù)兩種變量,分別是全局系統(tǒng)變量和會話系統(tǒng)變量。(1)全局系統(tǒng)變量
全局系統(tǒng)變量針對所有默認(rèn)設(shè)置。全局系統(tǒng)變量在MySQL啟動時,由服務(wù)器自動將它們初始化為默認(rèn)值,這些默認(rèn)值可以通過my.ini文件更?改。
(2)會話系統(tǒng)變量
會話系統(tǒng)變量針對當(dāng)前用戶。用戶登錄MySQL會使用全局系統(tǒng)變量,如果會話中更改了變量值,會使用更改后的值,不過只對當(dāng)前用戶有效。
【例7-11】修改系統(tǒng)變量character_set_client為gbk字符?集。SET@@session.character_set_client='gbk';SELECT@@character_set_client;
執(zhí)行結(jié)果如圖7-12所示。圖7-12修改系統(tǒng)變量character_set_client為gbk字符集在MySQL中,有一部分系統(tǒng)變量的值是不可以修改的,例如VERSION和系統(tǒng)日期??梢孕薷牡南到y(tǒng)變量可通過SET語句進(jìn)行修改,語法格式如?下。
SET@@[GLOBAL.|SESSION.]系統(tǒng)變量名=EXPR7.2.2認(rèn)識變量在MySQL中查看系統(tǒng)變量最常用的方法是使用SHOWvariables語句,使用SHOWglobalvariables語句可以顯示所有全局系統(tǒng)變量,使用SHOWsessionvariables語句可以顯示會話系統(tǒng)變量??梢赃\(yùn)用通配符%實(shí)現(xiàn)系統(tǒng)變量的模糊查?詢?!纠?-12】運(yùn)用通配符查看所有以char開頭的系統(tǒng)變?量。SHOWvariablesLIKE'char%';7.2.2認(rèn)識變量
執(zhí)行結(jié)果如圖7-13所示。
圖7-13查看所有以char開頭的系統(tǒng)變量認(rèn)識MySQL的數(shù)據(jù)類型7.3MySQL支持的5種整數(shù)類型按存儲空間由小到大分別為:TINYINT、SAMLLINT、MEDIUMINT、INT(INTEGER)和BIGINT,它們表示的數(shù)據(jù)范圍如表7-1所?示。7.3.1認(rèn)識整數(shù)類型整數(shù)類型字節(jié)數(shù)有符號數(shù)無符號數(shù)TINYINT1(-128,127)(0,255)SMALLINT2(-32768,32767)(0,65535)MEDIUMINT3(-8388608,8388607)(0,16777215)INT(INTEGER)4(-231,231-1)(0,232-1)BIGINT8(-263,263-1)(0,264-1)表7-1整數(shù)類型表示的數(shù)據(jù)范圍【例7-13】創(chuàng)建一個表test_int,包括int_i、int_u兩個字段。創(chuàng)建完成后插入兩條記錄并查看插入效?果。CREATETABLEtest_int(int_iINT(8),int_uINTUNSIGNED);INSERTINTOtest_intVALUES(1000,1322);INSERTINTOtest_intVALUES(-1000,-1322);執(zhí)行結(jié)果如圖7-14所?示。圖7-14整數(shù)類型的應(yīng)用7.3.1認(rèn)識整數(shù)類型
根據(jù)表7-1可知,插入第二條記錄出錯是因?yàn)閿?shù)據(jù)?1322超出了無符號整數(shù)類型數(shù)據(jù)表示的數(shù)據(jù)范?圍。
7.3.2認(rèn)識浮點(diǎn)數(shù)類型
浮點(diǎn)數(shù)主要用于表示實(shí)數(shù)(帶有小數(shù)點(diǎn)的數(shù)值),通常采用M(尾數(shù))×B(基數(shù))的E(指數(shù))次方形式表示。MySQL中的浮點(diǎn)數(shù)類型主要包括FLOAT(單精度浮點(diǎn)數(shù))、DOUBLE(雙精度浮點(diǎn)數(shù))。在數(shù)據(jù)的正負(fù)問題上,浮點(diǎn)數(shù)與整數(shù)類型數(shù)據(jù)類似,也分為有符號數(shù)及無符號數(shù),并使用UNSIGNED修飾符標(biāo)識無符號浮點(diǎn)數(shù)(無負(fù)數(shù))。MySQL中浮點(diǎn)數(shù)類型表示的數(shù)據(jù)范圍如表7-2所?示。表7-2浮點(diǎn)數(shù)類型表示的數(shù)據(jù)范圍浮點(diǎn)數(shù)類型字節(jié)數(shù)有符號數(shù)無符號數(shù)表示數(shù)據(jù)FLOAT4(-3.402823466E+38,-1.175494351E-38)、0、(1.175494351E-38,3.402823466351E+38)0、(1.175494351E-38,3.402823466E+38)單精度浮點(diǎn)數(shù)DOUBLE8(-1.7976931348623157E+308,-2.2250738585072014E-308)、0、(2.2250738585072014E-308,1.7976931348623157E+308)0、(2.2250738585072014E-308,1.7976931348623157E+308)雙精度浮點(diǎn)數(shù)
在MySQL中,單精度與雙精度浮點(diǎn)數(shù)的定義形式分別表示為:FLOAT(M,D)、DOUBLEPRECISION(M,D)。其中“(M,D)”的M表示該值的總共位數(shù),D表示小數(shù)點(diǎn)后的位數(shù)。【例7-14】創(chuàng)建表test_float,包括ff1和ff2兩個字段,然后向表中插入一條記?錄。CREATETABLEtest_float(ff1FLOAT,ff2FLOAT);INSERTINTOtest_floatVALUES(1.1111,11111159);SELECT*FROMtest_float;
7.3.2認(rèn)識浮點(diǎn)數(shù)類型執(zhí)行結(jié)果如圖7-15所示。
通過【例7-14】可以看出,浮點(diǎn)數(shù)類型的數(shù)據(jù)一旦超過規(guī)定的位數(shù),如FLOAT的7位,則其表示的數(shù)據(jù)就是不確定的了,所以應(yīng)用時需要特別注?意。圖7-15浮點(diǎn)數(shù)類型應(yīng)用MySQL在處理日期/時間類型的數(shù)據(jù)時提供了3種數(shù)據(jù)類型:日期類型、時間類型、混合日期。根據(jù)要求的日期/時間精度不同,數(shù)據(jù)類型可設(shè)置為DATE、TIME、DATETIME、TIMESTAMP和YEAR中的某一種,不同日期/時間類型能夠表示的數(shù)據(jù)及字節(jié)數(shù)、日期格式、取值范圍不同,如表7-3所?示。
7.3.3認(rèn)識日期/時間類型表7-3日期/時間類型的數(shù)據(jù)范圍類型字節(jié)數(shù)日期格式最小值最大值表示數(shù)據(jù)DATE3YYYY-MM-DD1000-01-019999-12-31日期TIME3HH:MM:SS-838:59:59838:59:59時間DATETIME8YYYY-MM-DDHH:MM:SS1000-01-0100:00:009999-12-3123:59:59混合日期時間TIMESTAMP8YYYY-MM-DDHH:MM:SS1970-01-0100:00:002037-12-3123:59:59混合日期時間YEAR1YYYY19012155年份值【例7-15】創(chuàng)建表test_Date,包括d、t、y、dt、ts共5個字段,然后插入兩條記?錄。CREATETABLEtest_Date(dDATE,tTIME,yYEAR,dtDATETIME,tsTIMESTAMP);INSERTINTOtest_DateVALUES('2020-02-05','15:48:34','2020','2020-02-0515:48:34','2020-02-0515:48:34');INSERTINTOtest_DateVALUES('202002-05','15:78:34','20','2020-02-051548
34','2020-02-0515:48:34');7.3.3認(rèn)識日期/時間類型執(zhí)行結(jié)果如圖7-16所示。
通過【例7-15】可以看出,第一條插入語句采用標(biāo)準(zhǔn)日期/時間格式,可以成功實(shí)現(xiàn)操作。第二條記錄中的日期格式不符合要求,所以出現(xiàn)了語法錯?誤。圖7-16日期/時間類型應(yīng)用7.3.3認(rèn)識日期/時間類型MySQL提供多種不同的字符串?dāng)?shù)據(jù)類型,如CHAR和VARCHAR類型、BLOB和TEXT類型等。運(yùn)用它們可以使存儲的數(shù)據(jù)范圍從簡單的一個字符擴(kuò)大到巨大的文本塊或二進(jìn)制字符串,具體的數(shù)據(jù)表示情況如表7-4所示。
7.3.4認(rèn)識字符串和二進(jìn)制類型表7-4字符串和二進(jìn)制數(shù)據(jù)表示情況類型字節(jié)數(shù)表示數(shù)據(jù)CHAR0~255字節(jié)定長字符串VARCHAR0~65535字節(jié)變長字符串BLOB0~65535字節(jié)二進(jìn)制形式的長文本數(shù)據(jù)TEXT0~65535字節(jié)長文本數(shù)據(jù)TINYBLOB0~255字符不超過255個字符的二進(jìn)制字符串TINYTEXT0~255字節(jié)短文本字符串MEDIUMBLOB0~16777215字節(jié)二進(jìn)制形式的中等長度文本數(shù)據(jù)MEDIUMTEXT0~16777215字節(jié)中等長度文本數(shù)據(jù)LONGBLOB0~4294967295字節(jié)二進(jìn)制形式的極大文本數(shù)據(jù)LONGTEXT0~4294967295字節(jié)極大文本數(shù)據(jù)CREATETABLEtest_char(cCHAR(4),
vcVARCHAR(4));INSERTINTOtest_charVALUES('ab','AA');SELECTLENGTH(c),LENGTH(vc)FROMtest_char;1.CHAR和VARCHAR類型
CHAR類型用于定義定長字符串,使用時必須在其后加上圓括號,且括號內(nèi)用一個大小修飾符來指定字符串長度,其中大小修飾符的取值范圍是0~255。
VARCHAR類型是CHAR類型的一個變體,被稱為可變長度的字符串類型。VARCHAR類型的用法與CHAR相同,但表示的數(shù)據(jù)長度為0~65535字節(jié)?!纠?-16】創(chuàng)建表test_char,包含c和vc兩個字段,這兩個字段均定義長度為4個字符,在該表中插入一條記錄并查看兩個字段值的長?度。7.3.4認(rèn)識字符串和二進(jìn)制類型執(zhí)行結(jié)果如圖7-17所?示。圖7-17CHAR與VARCHAR類型應(yīng)用
可見,CHAR和VARCHAR類型最大的不同之處在于MySQL數(shù)據(jù)庫處理長度指示器的方法:CHAR類型把長度指示器的值直接視為字符串的長度大小,在長度不足的情況下用空格補(bǔ)足;而VARCHAR類型則將長度指示器的值看作可表示字符串的最大長度值,并且只使用存儲字符串實(shí)際需要的長度來存儲對應(yīng)值。7.3.4認(rèn)識字符串和二進(jìn)制類型2.BLOB和TEXT類型
為了保存大文本數(shù)據(jù)塊或二進(jìn)制的大對象,MySQL提供了TEXT和BLOB兩種類型。根據(jù)存儲數(shù)據(jù)內(nèi)容的大小不同,二者都設(shè)置有不同的子類型。大型的數(shù)據(jù)用于存儲文本塊、圖像和聲音文件等二進(jìn)制數(shù)據(jù)類?型。
BLOB是一個二進(jìn)制大對象,可以容納可變數(shù)量的數(shù)據(jù)。TEXT被視為字符字符串,類似于CHAR和VARCHAR。BLOB類型區(qū)分大小寫,而TEXT類型不區(qū)分大小寫。7.3.4認(rèn)識字符串和二進(jìn)制類型認(rèn)識運(yùn)算符與表達(dá)式7.4
在MySQL中,算術(shù)運(yùn)算符是最常見、最簡單易用的一種運(yùn)算符。它主要面向數(shù)值類型數(shù)據(jù)的計算。算術(shù)運(yùn)算符包括加(+)、減(-)、乘(*)、除(/)、取模(%)。1.加法運(yùn)算符(+)用于求兩個或多個數(shù)值之和。如果整數(shù)數(shù)據(jù)與浮點(diǎn)數(shù)數(shù)據(jù)進(jìn)行運(yùn)算,則結(jié)果將自動轉(zhuǎn)換為浮點(diǎn)數(shù)數(shù)?據(jù)。SELECT24+3.14+2,18+22;執(zhí)行結(jié)果如圖7-18所?示。7.4.1認(rèn)識算術(shù)運(yùn)算符【例7-17】計算24+3.14+2和18+22的結(jié)?果。圖7-18加法運(yùn)算的結(jié)果
2.減法運(yùn)算符(-)用于求一個值與另一個值的差,運(yùn)算后可能會改變操作數(shù)的符號。減法運(yùn)算符作為一元運(yùn)算符時,用于更改操作數(shù)的符號(即取負(fù)值)。SELECT4.7-5.2,7.15-3.14,26-18;7.4.1認(rèn)識算術(shù)運(yùn)算符【例7-18】計算4.7-5.2、7.15-3.14和26-18的結(jié)?果。【例7-19】運(yùn)用【例7-13】表test_int中的無符號數(shù)int_u參與減法運(yùn)?算。SELECTint_u-1000FROMtest_int;SELECTint_u-1350FROMtest_int;對于加、減法運(yùn)算,如果執(zhí)行的是無符號數(shù)據(jù)的運(yùn)算,則結(jié)果默認(rèn)為無符號數(shù),此時若運(yùn)算結(jié)果出現(xiàn)負(fù)值,就會報錯。注意3.乘法運(yùn)算符(*)用于獲得兩個數(shù)值的乘積。運(yùn)算結(jié)果的符號與參與運(yùn)算的所有操作數(shù)符號相?關(guān)。【例7-20】計算3*10、0.6*15和-12.5*2的結(jié)?果。SELECT3*10,0.6*15,-12.5*2;7.4.1認(rèn)識算術(shù)運(yùn)算符圖7-21乘法運(yùn)算的結(jié)果4.除法運(yùn)算符(/)用于計算一個值除以另一個值的商。除法運(yùn)算的結(jié)果使用浮點(diǎn)數(shù)表?示。針對除數(shù)為0的情況,MySQL會返回結(jié)果NULL?!纠?-20】計算18/3、21.0/7和5/0的結(jié)?果。SELECT18/3,21.0/7,5/0;圖7-22除法運(yùn)算的結(jié)果5.模運(yùn)算符(%)用于計算一個值除以另一個值的余數(shù)。模運(yùn)算符的功能與MOD()函數(shù)相?同?!纠?-22】計算17%5、10%3、5%-3和-2%4的結(jié)?果。SELECT17%5,10%3,5%-3,-2%4;7.4.1認(rèn)識算術(shù)運(yùn)算符圖7-18加法運(yùn)算的結(jié)果
在算術(shù)運(yùn)算中,如果出現(xiàn)字符串參與運(yùn)算的情況,則字符串表示的數(shù)字會自動地轉(zhuǎn)換為數(shù)字。如果字符串的第一個字符是數(shù)字,那么它就轉(zhuǎn)換為這個數(shù)字的值,否則字符串將被轉(zhuǎn)換為?零?!纠?-23】計算'91BQ'+'5'、'BQ91'+2和'8y'×5×'wxz'的結(jié)?果。SELECT'91BQ'+'5','BQ91'+2,'8y'*5*'wxz';圖7-24字符串參與算術(shù)運(yùn)算的結(jié)果
MySQL中,運(yùn)用SELECT語句進(jìn)行查詢時,允許用戶對表達(dá)式的左邊操作數(shù)與右邊操作數(shù)進(jìn)行比較運(yùn)算,如果比較運(yùn)算結(jié)果為真,則返回1,否則返回0。比較運(yùn)算結(jié)果不確定時,返回NULL。MySQL中對NULL值的條件判斷,使用ISNULL(為空)與ISNOTNULL(不為空)專用運(yùn)算符表?示。
比較運(yùn)算符主要包括等于(=)、全等于(<=>)、不等于(!=或<>)、小于(<)、小于等于(<=)、大于(>)、大于等于(>=)以及BETWEEN…AND、LIKE等。7.4.2認(rèn)識比較運(yùn)算符
1.“=”和“<=>”運(yùn)算符“=”運(yùn)算符用于比較運(yùn)算符左、右兩側(cè)的操作數(shù)是否相等。如果運(yùn)算符兩側(cè)的操作數(shù)相等,則返回1,否則返回0。需要注意的是,NULL不能用“=”運(yùn)算符進(jìn)行比較。“<=>”和“=”運(yùn)算符類似,當(dāng)運(yùn)算符兩側(cè)的操作數(shù)相同時返回1,“<=>”運(yùn)算符可以用來比較NULL。【例7-24】求'AA'='aa'、5.12=4和'5q'=5的比較結(jié)?果。SELECT'AA'='aa',5.12=4,'5q'=5;執(zhí)行結(jié)果如圖7-25所?示。7.4.2
認(rèn)識比較運(yùn)算符圖7-25“=”比較運(yùn)算的結(jié)果通過【例7-24】可以看到,在MySQL中如果無特別說明,則字符串的比較是不區(qū)分大小寫的,所以“AA”與“aa”是相等的。同時在比較運(yùn)算中,與數(shù)值進(jìn)行比較的字符串會自動轉(zhuǎn)換為數(shù)?字。3.“<>”與“!=”運(yùn)算符都表示不等于,即如果運(yùn)算符兩側(cè)的操作數(shù)不等,則返回1,否則返回0。NULL也不能使用“<>”運(yùn)算符來比?較?!纠?-25】求't'<>'L'、15<>20和1<>1.0的結(jié)?果。SELECT't'<>'L',15<>20,1<>1.0;圖7-26“<>”比較運(yùn)算的結(jié)果4.當(dāng)運(yùn)算符“<”左側(cè)的操作數(shù)小于右側(cè)的操作數(shù)時返回1,否則返回0。當(dāng)運(yùn)算符“<=”左側(cè)的操作數(shù)小于等于右側(cè)的操作數(shù)時返回1,否則返回0?!纠?-26】計算'APPLE'<'PEAR'、15<10、-1<1.6和14<=14.0的結(jié)果。運(yùn)算符按照ASCⅡ碼值比較字符?串。SELECT'APPLE'<'PEAR',15<10,-1<1.6,14<=14.0;圖7-27“<”與“<=”比較運(yùn)算的結(jié)果7.4.2
認(rèn)識比較運(yùn)算符
4.“>”與“>=”運(yùn)算符
當(dāng)運(yùn)算符“>”左側(cè)的操作數(shù)大于右側(cè)的操作數(shù)時返回1,否則返回0。當(dāng)運(yùn)算符“>=”左側(cè)的操作數(shù)大于等于右側(cè)的操作數(shù)時返回1,否則返回0?!纠?-27】計算'TEA'>'PEAR'、18>10、-1>1.6和3.14>=1.40的結(jié)果。運(yùn)算符按照ASCⅡ碼值比較字符?串。SELECT'TEA'>'PEAR',18>10,-1>1.6,3.14>=1.40;
執(zhí)行結(jié)果如圖7-28所?示。7.4.2
認(rèn)識比較運(yùn)算符圖7-28“>”與“>=”比較運(yùn)算的結(jié)果5.“BETWEEN…AND”運(yùn)算符“BETWEEN…AND”運(yùn)算符用于范圍查詢,需要設(shè)置“條件1”和“條件2”兩個參數(shù),即范圍的起始值和終止值。其基本語法格式如?下。BETWEEN條件1AND條件2
【例7-28】在數(shù)據(jù)庫ssms中查詢表elective中成績在60~70分的學(xué)生的學(xué)?號。7.4.2
認(rèn)識比較運(yùn)算符
需要注意,條件1對應(yīng)的值要小于等于條件2的值。如果表示數(shù)據(jù)不在某個范圍內(nèi),則可以使用NOTBETWEEN…AND。USEssms;SELECTS_IDFROMelectiveWHEREGradeBETWEEN60AND70;6.“LIKE”運(yùn)算符模糊匹配
根據(jù)SQL標(biāo)準(zhǔn),“LIKE”運(yùn)算符在每個字符的基礎(chǔ)上執(zhí)行匹配,一般會與通配符“%”(匹配0個或多個字符)和“_”(匹配任意單個字符)搭配使用。還可以使用NOTLIKE運(yùn)算符來表示不匹?配?!纠?-29】在數(shù)據(jù)庫ssms中查詢表student中姓王的學(xué)生的信?息。SELECTS_ID,Name,Major,SexFROMstudentWHERENameLIKE'王%';
執(zhí)行結(jié)果如圖7-30所?示。7.4.2
認(rèn)識比較運(yùn)算符圖7-30“LIKE”運(yùn)算符的應(yīng)用1
【例7-30】在數(shù)據(jù)庫ssms中查詢表student中學(xué)號倒數(shù)第二位為“4”的學(xué)生的信?息。SELECTS_ID,Name,Major,SexFROMstudentWHERES_IDLIKE'%4_';
執(zhí)行結(jié)果如圖7-31所?示。7.4.2
認(rèn)識比較運(yùn)算符圖7-31“LIKE”運(yùn)算符的應(yīng)用2注意
運(yùn)用“LIKE”運(yùn)算符時,如果要查詢的內(nèi)容中包含通配符“%”或“_”,則需要使用轉(zhuǎn)義字符進(jìn)行匹配查詢,“\%”表示匹配一個“%”,“\_”表示匹配一個“_”。
邏輯運(yùn)算符也稱為布爾運(yùn)算符,用來確認(rèn)條件表達(dá)式邏輯結(jié)果的真(TRUE)或假(FALSE)。MySQL支持4種類型的邏輯運(yùn)算符,包括邏輯與運(yùn)算符(AND或&&)、邏輯或運(yùn)算符(OR或||)、邏輯非運(yùn)算符(NOT或!)、邏輯異或運(yùn)算符(XOR或^)。1.邏輯與運(yùn)算
邏輯與運(yùn)算的語法規(guī)則為當(dāng)所有操作數(shù)均為非零值并且不為NULL時,計算所得結(jié)果為1;當(dāng)一個或多個操作數(shù)為0時,所得結(jié)果為0;操作數(shù)中有一個操作數(shù)為NULL,則返回結(jié)果為NULL?!纠?-31】查詢表student中姓王且性別為男的學(xué)生的信?息。SELECTS_ID,Name,Major,SexFROMstudentWHERENameLIKE'王%'ANDSex=1;圖7-32“AND”運(yùn)算符的應(yīng)用7.4.3認(rèn)識邏輯運(yùn)算符2.邏輯或運(yùn)算
邏輯或運(yùn)算的語法規(guī)則為當(dāng)兩個操作數(shù)均為NOTNULL時,如果有任意一個操作數(shù)為非零值,則結(jié)果為1,否則為0;當(dāng)操作數(shù)有一個為NULL時,如果另一個操作數(shù)為非0值,則結(jié)果為1,否則為NULL;如果兩個操作數(shù)均為NULL,那么所得結(jié)果也為NULL?!纠?-32】查詢表student中姓王的學(xué)生或總學(xué)分在50分以上的學(xué)生的信?息。SELECTS_ID,Name,Major,Sex,Total_CreditFROMstudentWHERENameLIKE'王%'ORTotal_Credit>50;圖7-33“OR”運(yùn)算符的應(yīng)用7.4.3認(rèn)識邏輯運(yùn)算符3.邏輯非運(yùn)算
邏輯非運(yùn)算的語法規(guī)則為返回與操作數(shù)相反的結(jié)果。當(dāng)操作數(shù)為0時,結(jié)果為1,否則結(jié)果為0。注意,進(jìn)行非運(yùn)算的操作數(shù)如果為NOTNULL,則返回值為NULL?!纠?-33】計算!(35<20)and(15>10)的結(jié)?果。SELECT!(35<20)and(15>10);7.4.3認(rèn)識邏輯運(yùn)算符4.邏輯異或運(yùn)算
邏輯異或運(yùn)算的語法規(guī)則為當(dāng)任意一個操作數(shù)為NULL時,返回值為NULL。對于為NOTNULL的操作數(shù),如果兩者的邏輯值相異,即其中一個邏輯值為真且不為NULL,另一個邏輯值為假,則返回結(jié)果為1,否則返回結(jié)果為0?!纠?-34】計算(3<5)XOR(2>6)的結(jié)?果。SELECT(3<5)XOR(2>6);
位運(yùn)算符主要是指對二進(jìn)制位的邏輯運(yùn)算。位運(yùn)算通常將給定參與運(yùn)算的操作數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)后,對各個操作數(shù)的每一位(bit)進(jìn)行指定的邏輯運(yùn)算,最后將所得的二進(jìn)制結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)作為最終結(jié)果。位運(yùn)算符主要包括按位與(&)、按位或(|)、按位異或(^)、按位取反(~)、按位移位(“>>”按位右移和“<<”按位左移)運(yùn)算1.按位與運(yùn)算(&)按位與運(yùn)算表示對多個操作數(shù)的二進(jìn)制數(shù)進(jìn)行按位邏輯與操?作?!纠?-35】計算5&6的結(jié)?果。SELECT5&6;7.4.4認(rèn)識位運(yùn)算符2.按位或運(yùn)算(|)按位或運(yùn)算表示對多個操作數(shù)的二進(jìn)制數(shù)進(jìn)行按位邏輯或操?作?!纠?-36】計算25|32的結(jié)?果。SELECT25|32;3.按位異或運(yùn)算(^)
按位異或運(yùn)算表示對多個操作數(shù)的二進(jìn)制數(shù)按位進(jìn)行邏輯異或操?作?!纠?-37】計算7^9的結(jié)?果。SELECT7^9;圖7-38“^”運(yùn)算符的應(yīng)用4.按位取反運(yùn)算(~)
按位取反運(yùn)算表示對操作數(shù)對應(yīng)的二進(jìn)制數(shù)進(jìn)行按位取反操作。按位取反原來存放0的位,取反后取值均變?yōu)??!纠?-38】計算~16的結(jié)?果。SELECT~16;圖7-39“~”運(yùn)算符的應(yīng)用7.4.4認(rèn)識位運(yùn)算符5.移位運(yùn)算
移位運(yùn)算符“>>”表示按位右移,即將左操作數(shù)向右移動右操作數(shù)指定的位?數(shù)?!?lt;<”表示按位左移,即將左操作數(shù)向左移動右操作數(shù)指定的位?數(shù)?!纠?-39】計算4>>2的結(jié)?果。SELECT4>>2;7.4.4認(rèn)識位運(yùn)算符【例7-40】計算7<<2的結(jié)?果。SELECT7<<2;右移位中將7轉(zhuǎn)換為二進(jìn)制數(shù),得到000…0111(共64位),然后將數(shù)據(jù)左移兩位,得到000…11100(共64位),其對應(yīng)的十進(jìn)制數(shù)為28。注意7.4.5認(rèn)識運(yùn)算符優(yōu)先級
如果表達(dá)式中包含了多個運(yùn)算符,則優(yōu)先級高的運(yùn)算符先運(yùn)算,如果運(yùn)算符的優(yōu)先級相同,則MySQL通常會按照表達(dá)式中運(yùn)算符出現(xiàn)的順序,從左到右依次進(jìn)行運(yùn)算(賦值運(yùn)算符除外)。運(yùn)算符的優(yōu)先級由低到高的順序如表7-9所?示??梢允褂脠A括號“()”,括號內(nèi)的運(yùn)算符具有最高的運(yùn)算優(yōu)先級。表7-9運(yùn)算符的優(yōu)先級(由低到高)優(yōu)先級(由低到高)運(yùn)算符1=(賦值)、:=2||、OR、XOR3&&、AND4NOT5BETWEEN、CASE、WHEN、THEN和ELSE6=、<=>、>=、>、<=、<、<>、!=、IS、LIKE、REGEXP和IN7|8&9<<和>>10?和+11*、/、%12^(按位異或)13~(一元,取負(fù))和~(按位取反)14!15()
7.4.6認(rèn)識表達(dá)式
表達(dá)式通常是由常量、變量、列名、運(yùn)算符和函數(shù)組合而成的。通過運(yùn)算,一個表達(dá)式最終都可以得到一個確定的運(yùn)算結(jié)果值。表達(dá)式的結(jié)果值取決于參與運(yùn)算的相關(guān)數(shù)據(jù)的數(shù)據(jù)類?型。
根據(jù)表達(dá)式的組成與表達(dá)式的運(yùn)算結(jié)果可以對表達(dá)式進(jìn)行分類。根據(jù)表達(dá)式值的不同數(shù)據(jù)類型,可以將表達(dá)式分類為字符表達(dá)式、數(shù)值表達(dá)式或者日期表達(dá)式。根據(jù)表達(dá)式運(yùn)算結(jié)果的不同,可以將表達(dá)式分為標(biāo)量表達(dá)式(運(yùn)算結(jié)果為單個值)、行表達(dá)式(運(yùn)算結(jié)果為表的一行)、表表達(dá)式(結(jié)果為一個或多個行表達(dá)式)。
認(rèn)識系統(tǒng)內(nèi)置函數(shù)7.5
數(shù)學(xué)函數(shù)用于完成復(fù)雜的算術(shù)操作及專門的數(shù)學(xué)運(yùn)算,數(shù)學(xué)函數(shù)應(yīng)用中一旦出現(xiàn)錯誤操作,其返回值通常為NULL。表7-10所示是一些常見的數(shù)學(xué)函?數(shù)。表7-10常見的數(shù)學(xué)函數(shù)7.5.1使用數(shù)學(xué)函數(shù)函數(shù)名稱描述ABS()返回絕對值ROUND()返回整數(shù)部分或保留部分小數(shù)位TRUNCATE()截斷為指定的小數(shù)位數(shù)RAND()返回一個隨機(jī)浮點(diǎn)值SIGN()返回參數(shù)的符號SQRT()返回參數(shù)的平方根PI()返回圓周率POW()將參數(shù)提高到指定的冪1.ABS(x)
ABS(x)的作用是返回某數(shù)的絕對值,可用于二者間差距的計?算?!纠?-41】在數(shù)據(jù)庫ssms的表elective中查詢與學(xué)號為201101的學(xué)生的課程101成績相差不超過5分的學(xué)生的學(xué)?號。SELECTS_IDFROMelectiveWHEREABS(Grade-(SELECTGradeFROMelectiveWHERES_ID='201101'AND
C_ID='101'))<=5;7.5.1使用數(shù)學(xué)函數(shù)2.ROUND(x,d)
ROUND(x,d)的返回值為離x最近的整數(shù)(四舍五入)并保留d位小數(shù),如果不指定d的值,則d默認(rèn)為0,即ROUND(x)返回的是一個整?數(shù)?!纠?-42】計算ROUND(150.157,2)、ROUND(150,2)和ROUND(3.52)的結(jié)?果。SELECTROUND(150.157,2),ROUND(150,2),ROUND(3.52);3.TRUNCATE(x,d)
TRUNCATE(x,d)的返回值為x并保留d位小數(shù)?!纠?-43】計算TRUNCATE(76.28,1)、TRUNCATE(26.79,-2)和TRUNCATE(3.14,0)的結(jié)?果。SELECTTRUNCATE(76.28,1),TRUNCATE(26.79,?2),TRUNCATE(3.14,0);7.5.1使用數(shù)學(xué)函數(shù)4.RAND()
RAND()函數(shù)返回的結(jié)果為0~1的隨機(jī)浮點(diǎn)數(shù)。要取得某個范圍內(nèi)的隨機(jī)數(shù)可以使用表達(dá)式實(shí)?現(xiàn)?!纠?-44】運(yùn)用RAND()函數(shù)產(chǎn)生一個0~100的隨機(jī)?數(shù)。SELECTRAND()*100;5.SIGN(x)SIGN(x)的作用是返回參數(shù)x的符號標(biāo)識。當(dāng)x為負(fù)數(shù)時,返回值為-1;當(dāng)x為正數(shù)時,返回值為1;當(dāng)x取值為0時,返回值為0?!纠?-45】求SIGN(13)、SIGN(-212)和SIGN(0)的返回結(jié)?果。SELECTSIGN(13),SIGN(-212),SIGN(0);7.5.1使用數(shù)學(xué)函數(shù)6.SQRT(x)的作用是返回x的平方根,用于數(shù)學(xué)中開平方的求值運(yùn)?算?!纠?-46】計算SQRT(144)的結(jié)?果。SELECTSQRT(144);7.PI()函數(shù)用于返回圓周率,返回結(jié)果默認(rèn)顯示的小數(shù)位數(shù)為6位,但實(shí)際在MySQL內(nèi)部使用的是完整的雙精度?值?!纠?-47】計算半徑為10的圓的面?積。SELECTPI()*10*10;7.5.1使用數(shù)學(xué)函數(shù)8.POW(x,y)用于返回x的y次方,其功能與POWER(x,y)相?同?!纠?-48】計算2的10次?方。SELECTPOW(2,10);
MySQL為便于完成字符串的相關(guān)操作,提供了多種字符串函數(shù),包括獲取字符串長度的函數(shù)、大小寫轉(zhuǎn)換的函數(shù)、連接字符串的函數(shù)、刪除空格的函數(shù)等。本任務(wù)介紹幾個常見的字符串函數(shù),如表7-11所?示。表7-11常見的字符串函數(shù)7.5.2使用字符串函數(shù)函數(shù)名稱描述CHAR_LENGTH()返回參數(shù)中的字符數(shù)CONCAT()返回串聯(lián)的字符串UPPER()轉(zhuǎn)換為大寫LOWER()轉(zhuǎn)換為小寫LPAD()、RPAD()返回字符串參數(shù),用指定的字符串左填充或右填充LEFT()、RIGHT()返回指定的最左邊的或最右邊的字符LTRIM()、RTRIM()、TRIM()刪除前導(dǎo)、尾部、首尾空格REPLACE()替換出現(xiàn)的指定字符串STRCMP()比較兩個字符串SUBSTRING()、MID()返回指定的子字符串1.CHAR_LENGTH(str)的作用為返回字符串str包含的字符數(shù),注意與LENGTH()函數(shù)區(qū)分。LENGTH()的作用為返回字符串str占用的空間大小,多字節(jié)字符算作單個字符。【例7-49】查看字符串“ILOVECHINA!”包含的字符?數(shù)。SELECTCHAR_LENGTH('ILOVECHINA!');7.5.2
使用字符串函數(shù)CHAR_LENGTH()函數(shù)的應(yīng)用2.CONCAT()函數(shù)返回參數(shù)列表中的字符串連接產(chǎn)生的新字符串,該函數(shù)中的參數(shù)可能有一個或多個。如果所有參數(shù)的值都為非二進(jìn)制字符串,則結(jié)果為非二進(jìn)制字符串。如果參數(shù)包含任何二進(jìn)制字符串,則結(jié)果為二進(jìn)制字符串。數(shù)字參數(shù)會被轉(zhuǎn)化為與之相等的二進(jìn)制字符串格式。如果CONCAT()函數(shù)的返回值為NULL,則表示參數(shù)列表包含NULL?!纠?-50】在數(shù)據(jù)庫ssms的表student中查詢學(xué)號為201101的學(xué)生的學(xué)號、姓名、性別,并將這些信息連接成一個字符串顯?示。USEssms;SELECTCONCAT('學(xué)號:',S_ID,',姓名:',Name,',性別:',Sex)FROMstudentWHERE
S_ID='201101';7.5.2
使用字符串函數(shù)CONCAT()函數(shù)的應(yīng)用3.UPPER(str)UPPER(str)的作用是返回str根據(jù)當(dāng)前字符集映射將所有字符更改為大寫的字符串,在MySQL8.0中函數(shù)默認(rèn)的字符集為utf8mb4。【例7-51】將字符串“character_set”中的字母變?yōu)榇?寫。SELECTUPPER('character_set');4.LOWER(str)LOWER(str)的作用是返回str根據(jù)當(dāng)前字符集映射將所有字符更改為小寫的字符串,同UPPER()一樣,其默認(rèn)字符集也為utf8mb4?!纠?-52】將字符串“Let’sLearnMySQL8.0”中的字母轉(zhuǎn)換為小?寫。SELECTLOWER('Let\'sLearnMySQL8.0');7.5.2
使用字符串函數(shù)5.LPAD(str,len,padstr)與RPAD(str,len,padstr)LPAD(str,len,padstr)返回的字符串為在原字符串str的左邊填充padstr,直到字符長度達(dá)到len。與LPAD(str,len,padstr)相對應(yīng)的是,RPAD(str,len,padstr)返回的字符串為在原字符串str的右邊填充字符padstr直到字符串長度為len。但無論是LPAD()還是RPAD()函數(shù),如果參數(shù)列表中的len取值小于str對應(yīng)的長度,則返回值輸出的結(jié)果為str的前l(fā)en個字?符?!纠?-53】應(yīng)用LPAD()與RPAD()函數(shù)進(jìn)行字符串的左填充和右填?充。SELECTLPAD('version',9,'@'),RPAD('1',4,'0');7.5.2
使用字符串函數(shù)LPAD()與RPAD()函數(shù)的應(yīng)用6.LEFT(str,len)與RIGHT(str,len)LEFT(str,len)函數(shù)的返回值為字符串str最左邊的長度為len的子字符串,RIGHT(str,len)函數(shù)的返回值為str字符串最右邊的長度為len的子字符?串?!纠?-54】在數(shù)據(jù)庫ssms中運(yùn)用LEFT()與RIGHT()函數(shù)將表student中王姓學(xué)生的姓氏與名字分開顯?示。SELECTLEFT(Name,1)AS姓氏,RIGHT(Name,CHAR_LENGTH(Name)-1)AS名字FROMstudentWHERENamelike'王%';7.5.2
使用字符串函數(shù)
LEFT()與RIGHT()函數(shù)的應(yīng)用7.LTRIM(str)、RTRIM(str)與TRIM(str)LTRIM(str)可以刪除字符串str開始處的空格字符。RTRIM(str)刪除的是str結(jié)尾處的空格。TRIM(str)既可以刪除字符串str開始處的空格字符,也可以刪除結(jié)尾處的空格字符。但是需要注意,以上3個函數(shù)都無法刪除字符串str中間的空?格。【例7-55】運(yùn)用LTRIM()、TRIM()、RTRIM()函數(shù)刪除字符串的空?格。SELECTLTRIM('Susan,seeyou!')ASL,RTRIM('Susan,seeyou!')ASR,TRIM('Susan,seeyou!')ASLR;7.5.2
使用字符串函數(shù)
LTRIM()、TRIM()、RTRIM()函數(shù)的應(yīng)用8.REPLACE(str,from_str,to_str)REPLACE(str,from_str,to_str)的作用是將字符串str中所有出現(xiàn)的from_str字符串替換為字符串to_str。需要注意,搜索匹配from_str時會區(qū)分大小?寫?!纠?-56】運(yùn)用REPLACE()函數(shù)將字符串中的空格替換為“_”。SELECTREPLACE('HANMeiMei','','_');7.5.2
使用字符串函數(shù)9.STRCMP(str1,str2)STRCMP(str1,str2)的返回結(jié)果為整數(shù)值。其中,如果兩個字符串相同,則函數(shù)返回結(jié)果為整數(shù)0;如果參數(shù)str1小于str2,則返回結(jié)果為-1;如果str1大于str2,則返回結(jié)果為1。參數(shù)列表中str1與str2的比較按照先字母后數(shù)字的順序進(jìn)?行?!纠?-57】運(yùn)用STRCMP()函數(shù)比較字符串“aPPLE”與“BANANA”。SELECTSTRCMP('aPPLE','BANANA');10.SUBSTRING(str,pos)、SUBSTRING(str,pos,len)與MID(str,pos,len)SUBSTRING(str,pos)返回一個從字符串str的pos位置開始的子字符串。帶len參數(shù)的SUBSTRING(str,pos,len)表示從字符串str的pos位置開始,返回一個長度為len的子字符串。在參數(shù)列表中,如果pos的值為0,則表示返回空字符串;若pos取負(fù)值,則表示從str的尾部開始取字?符。MID(str,pos,len)的功能與用法和SUBSTRING(str,pos,len)完全相?同。【例7-58】運(yùn)用SUBSTRING()函數(shù)將給定字符串包含的郵箱服務(wù)器地址截取出?來。SELECTSUBSTRING('wangxiaom***@',13,7);7.5.2
使用字符串函數(shù)
SUBSTRING()函數(shù)的應(yīng)用
在MySQL中為了更好地實(shí)現(xiàn)日期與時間的表示、處理以及相關(guān)的轉(zhuǎn)換操作,系統(tǒng)提供了豐富的日期/時間函數(shù)。常見的日期/時間函數(shù)如表7-12所?示。表7-12常見的日期/時間函數(shù)7.5.3使用日期/時間函數(shù)名稱描述NOW()、CURRENT_TIMESTAMP()返回當(dāng)前系統(tǒng)日期和時間CURDATE()、CURRENT_DATE()返回當(dāng)前系統(tǒng)日期CURTIME()、CURRENT_TIME()返回當(dāng)前系統(tǒng)時間DATE()提取日期或日期/時間表達(dá)式的日期部分TIME()提取傳遞的表達(dá)式的時間部分YEAR()返回年份MONTH()、MONTHNAME()返回日期的月份,返回月份名稱DAY()、DAYOFMONTH()返回月份中的一天(0~31)DAYNAME()返回工作日的名稱HOUR()返回小時MINUTE()返回分鐘SECOND()返回秒(0~59)WEEKDAY()返回工作日索引DAYOFYEAR()返回一年中的某天(1~366)WEEKOFYEAR()返回日期的日歷周(1~53)YEARWEEK()返回年和周DATE_ADD() 將時間值(間隔)添加到日期值DATE_SUB() 從日期中減去時間值(間隔)1.用于獲取當(dāng)前系統(tǒng)日期/時間的函數(shù)用于獲取當(dāng)前系統(tǒng)日期/時間的函數(shù)有NOW()、CURDATE()、CURRENT_DATE()、CURTIME()、CURRENT_TIME()?!纠?-59】運(yùn)用NOW()和CURTIME()函數(shù)分別獲取當(dāng)前的日期/時間及時?間。SELECTNOW(),CURTIME();7.5.3使用日期/時間函數(shù)NOW()與CURTIME()函數(shù)的應(yīng)用2.用于獲得對應(yīng)日期/時間中的年、月、日及時間的函數(shù)用于獲得對應(yīng)日期/時間中的年、月、日及時間的函數(shù)有DATE()、TIME()、YEAR()、MONTH()、MONTHNAME()、DAY()、DAYOFMONTH()、DAYNAME()、HOUR()、MINUTE()、SECOND()?!纠?-60】在數(shù)據(jù)庫ssms中查詢與學(xué)號為201101的學(xué)生同年同月出生的學(xué)生的信?息。USEssms;SELECTS_ID,Name,Sex,BirthdayFROMstudentWHERE(YEAR(Birthday),MONTH(Birthday))=(SELECTYEAR(Birthday),MONTH(Birthday)FROMstudentWHERES_ID='201101');YEAR()與MONTH()函數(shù)的應(yīng)用7.5.3使用日期/時間函數(shù)3.獲得給定日期年份與周、年份與天等信息的函數(shù)用于獲得給定日期年份與周、年份與天等信息的函數(shù)有WEEKDAY()、DAYOFYEAR()、WEEKOFYEAR()、YEARWEEK()?!纠?-61】運(yùn)用DAYOFYEAR()與WEEKOFYEAR()函數(shù)返回表student中學(xué)號為201101的學(xué)生的出生日期及對應(yīng)的日歷?周。SELECTDAYOFYEAR(Birthday),WEEKOFYEAR(Birthday)FROMstudentWHERES_ID='201101';YEAR()與MONTH()函數(shù)的應(yīng)用7.5.3使用日期/時間函數(shù)4.日期的計算函數(shù)
DATE_ADD(date,intervalexprunit)與DATE_SUB(date,intervalexprunit)函數(shù)用于執(zhí)行日期算術(shù)。參數(shù)列表中,date指定開始日期或日期/時間值,expr是一個表達(dá)式,用于指定要從開始日期添加或減去的間隔值。unit是一個關(guān)鍵字,指定表達(dá)式的單?位。函數(shù)的返回值類型取決于參數(shù)date的值,如果date參數(shù)是一個DATE類型的值,函數(shù)計算中只涉及YEAR、MONTH或DAY部分(即沒有時間部分),那么結(jié)果仍為DATE類型。如果第一個參數(shù)是一個DATETIME(或TIMESTAMP)類型的值,或者第一個參數(shù)date為DATE類型的值,而unit關(guān)鍵字的單位為HOURS、MINUTES或SECONDS,則返回值的類型為DATETIME型?!纠?-62】運(yùn)用DATE_SUB()函數(shù)與DATE_ADD()函數(shù)計算2020年2月10日前45天和2023年2月10日后45天的日?期。SELECTDATE_SUB('2020-02-10',INTERVAL45day)ASbefore_45,DATE_ADD('2023-02-10',INTERVAL45day)ASafter_45;DATE_SUB()與DATE_ADD()函數(shù)的應(yīng)用7.5.3使用日期/時間函數(shù)7.5.4使用聚合函數(shù)
MySQL中,聚合函數(shù)也稱為聚集函數(shù),是一種對一組值進(jìn)行操作的組(匯總)函數(shù),返回結(jié)果通常為一個值。表7-13所示為常用的聚合函數(shù)。表7-13常用的聚合函數(shù)
函數(shù)名稱描述COUNT()、COUNT(DISTINCT)返回計數(shù)返回的行數(shù)SUM()返回總和AVG()返回參數(shù)的平均值MAX()返回最大值MIN()返回最小值GROUP_CONCAT()返回串聯(lián)的字符串BIT_AND()返回按位與BIT_OR()返回按位或BIT_XOR()返回按位異或【小結(jié)】
本項(xiàng)目對MySQL的組成、數(shù)據(jù)常量和變量、常見數(shù)據(jù)類型、運(yùn)算符表達(dá)式及系統(tǒng)內(nèi)置函數(shù)進(jìn)行了系統(tǒng)闡述,同時以案例形式介紹了相關(guān)操作及用法。其中,MySQL中的數(shù)據(jù)類型、運(yùn)算符及內(nèi)置函數(shù)是本項(xiàng)目的重點(diǎn)內(nèi)容,這些內(nèi)容在查詢及數(shù)據(jù)庫編程中會有所應(yīng)?用?!救蝿?wù)訓(xùn)練7】編寫MySQL語句1.實(shí)驗(yàn)?zāi)康恼莆誐ySQL中常量及變量的應(yīng)?用。掌握并靈活運(yùn)用運(yùn)算符與表達(dá)?式。運(yùn)用系統(tǒng)內(nèi)置函數(shù)完成數(shù)據(jù)庫中的運(yùn)算及查詢操?作。2.實(shí)驗(yàn)內(nèi)容運(yùn)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市2024-2025學(xué)年高二上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 數(shù)學(xué)-山東省濰坊市、臨沂市2024-2025學(xué)年度2025屆高三上學(xué)期期末質(zhì)量檢測試題和答案
- 2024甲乙雙方債務(wù)清償合同
- 2024年飯店股權(quán)轉(zhuǎn)讓合同范本一
- 2024建筑工程施工期間安全維護(hù)協(xié)議范本版B版
- 2024電力設(shè)施施工安全用電保障合同版B版
- 2025年度大棚蔬菜種植與農(nóng)業(yè)產(chǎn)業(yè)扶貧合作協(xié)議3篇
- 2024版勞務(wù)中介公司服務(wù)合同范本
- 2024童鞋品牌授權(quán)與獨(dú)家代理銷售合同3篇
- 2024版影視拍攝用高空吊籃臨時租賃合同2篇
- ?;愤\(yùn)輸安全培訓(xùn)裝卸工具與操作要求
- SJG 09-2024 建筑基樁檢測標(biāo)準(zhǔn)
- 數(shù)學(xué)和通信技術(shù)的關(guān)系與應(yīng)用
- 2024智慧城市城市數(shù)字孿生第1部分:技術(shù)參考架構(gòu)
- 2024年學(xué)習(xí)興稅(貨物勞務(wù)條線)考試題庫(帶答案)
- 《壓力性尿失禁》課件
- 20江蘇省蘇州市2023-2024學(xué)年高一上學(xué)期期末學(xué)業(yè)質(zhì)量陽光指標(biāo)調(diào)研歷史試卷
- 國企綜合素質(zhì)測評試題
- 新疆油田歷年投資計劃書
- 肺功能檢查的操作與結(jié)果解讀
- 松遼盆地南部致密砂巖儲層成因與天然氣聚集模式研究的中期報告
評論
0/150
提交評論