MySQL數(shù)據(jù)庫教程(微課版 第2版) 課件 第5章 MySQL語言_第1頁
MySQL數(shù)據(jù)庫教程(微課版 第2版) 課件 第5章 MySQL語言_第2頁
MySQL數(shù)據(jù)庫教程(微課版 第2版) 課件 第5章 MySQL語言_第3頁
MySQL數(shù)據(jù)庫教程(微課版 第2版) 課件 第5章 MySQL語言_第4頁
MySQL數(shù)據(jù)庫教程(微課版 第2版) 課件 第5章 MySQL語言_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第5章MySQL語言——MySQL語言簡介MySQL教程(第2版)MySQL語言簡介(1)數(shù)據(jù)定義語言(DDL)。用于執(zhí)行數(shù)據(jù)庫的任務(wù),對(duì)數(shù)據(jù)庫及數(shù)據(jù)庫中的各種對(duì)象進(jìn)行創(chuàng)建、刪除、修改等操作。如前所述,數(shù)據(jù)庫對(duì)象主要包括表、默認(rèn)約束、規(guī)則、視圖、觸發(fā)器和存儲(chǔ)過程等。DDL主要語句及功能如表。語

句功

能說

明CREATE創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象不同數(shù)據(jù)庫對(duì)象,其CREATE語句的語法形式不同ALTER對(duì)數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象進(jìn)行修改不同數(shù)據(jù)庫對(duì)象,其ALTER語句的語法形式不同DROP刪除數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象不同數(shù)據(jù)庫對(duì)象,其DROP語句的語法形式不同MySQL語言簡介(2)數(shù)據(jù)操縱語言(DML)。用于操縱數(shù)據(jù)庫中各種對(duì)象,檢索和修改數(shù)據(jù)。DML主要語句及功能如表。語

句功

能說

明SELECT從表或視圖中檢索數(shù)據(jù)是使用最頻繁的SQL語句之一INSERT將數(shù)據(jù)插入到表或視圖中

UPDATE修改表或視圖中的數(shù)據(jù)既可修改表或視圖的一行數(shù)據(jù),也可修改一組或全部數(shù)據(jù)DELETE從表或視圖中刪除數(shù)據(jù)可根據(jù)條件刪除指定的數(shù)據(jù)(3)數(shù)據(jù)控制語言(DCL)。用于安全管理,確定哪些用戶可以查看或修改數(shù)據(jù)庫中的數(shù)據(jù),DCL包括的主要語句及功能如表。語

句功

能說

明GRANT授予權(quán)限可把語句許可或?qū)ο笤S可的權(quán)限授予其他用戶和角色REVOKE收回權(quán)限與GRANT的功能相反,但不影響該用戶或角色從其他角色中作為成員繼承許可權(quán)限第5章MySQL語言——常量和變量01常

量1.字符串常量2.數(shù)值常量3.十六進(jìn)制常量4.日期時(shí)間常量5.位列值6.布爾值7.NULL值常

量1.字符串常量字符串是指用單引號(hào)或雙引號(hào)括起來的字符序列,分為ASCII字符串常量和Unicode字符串常量。ASCII字符串常量是用單引號(hào)括起來的,由ASCII字符構(gòu)成的符號(hào)串,例如:‘hello’ ‘Howareyou!’Unicode字符串常量與ASCII字符串常量相似,但它前面有一個(gè)N標(biāo)志符(N代表SQL-92標(biāo)準(zhǔn)中的國際語言(NationalLanguage))。N前綴必須為大寫。只能用單引號(hào)括起字符串,例如:N‘hello’ N‘Howareyou!’Unicode數(shù)據(jù)中的每個(gè)字符用兩個(gè)字節(jié)存儲(chǔ),而每個(gè)ASCII字符用一個(gè)字節(jié)存儲(chǔ)。常

量在字符串中不僅可以使用普通的字符,也可使用轉(zhuǎn)義序列,它們用來表示特殊的字符,如表。序

列含

義\0一個(gè)ASCII0(NUL)字符\n一個(gè)換行符\r一個(gè)回車符(Windows中使用\r\n作為新行標(biāo)志)\t一個(gè)定位符\b一個(gè)退格符\Z一個(gè)ASCII26字符(CTRL+Z)\'一個(gè)單引號(hào)(“'”)\"一個(gè)雙引號(hào)(“"”)\\一個(gè)反斜線(“\”)\%一個(gè)“%”符。它用于在正文中搜索“%”的文字實(shí)例,否則這里“%”將解釋為一個(gè)通配符\_一個(gè)“_”符。它用于在正文中搜索“_”的文字實(shí)例,否則這里“_”將解釋為一個(gè)通配符常

量【例5.1】執(zhí)行如下語句:

SELECT'This\nis\nfour\nlines';執(zhí)行結(jié)果如圖。有以下幾種方式可以在字符串中包括引號(hào):(1)在字符串內(nèi)用單引號(hào)“'”引用的單引號(hào)“'”可以寫成“''”(兩個(gè)單引號(hào));(2)在字符串內(nèi)用雙引號(hào)“"”引用的雙引號(hào)“"”可以寫成“""”(兩個(gè)雙引號(hào));(3)可以在引號(hào)前加轉(zhuǎn)義字符(“\”);(4)在字符串內(nèi)用雙引號(hào)“"”引用的單引號(hào)“'”不需要特殊處理,不需要用雙字符或轉(zhuǎn)義字符。同樣,在字符串內(nèi)用單引號(hào)“'”引用的雙引號(hào)“"”也不需要特殊處理。執(zhí)行下面的語句:SELECT'hello','"hello"','""hello""','hel''lo','\'hello';執(zhí)行結(jié)果如圖。常

量2.?dāng)?shù)值常量數(shù)值常量可以分為整數(shù)常量和浮點(diǎn)數(shù)常量。整數(shù)常量即不帶小數(shù)點(diǎn)的十進(jìn)制數(shù),例如:1894,2,+145345234,–2147483648。浮點(diǎn)數(shù)常量是使用小數(shù)點(diǎn)的數(shù)值常量,例如:5.26,

1.39,101.5E5,0.5E

2。3.十六進(jìn)制常量十六進(jìn)制數(shù)值不區(qū)分大小寫,其前綴“X”或“x”可以被“0x”取代而且不用引號(hào)。即X'41'可以替換為0x41,注意,“0x”中x一定要小寫。十六進(jìn)制值的默認(rèn)類型是字符串。如果想要確保該值作為數(shù)字處理,可以使用CAST(...ASUNSIGNED)。執(zhí)行如下語句:SELECT0x41,CAST(0x41ASUNSIGNED);執(zhí)行結(jié)果如圖。常

量【例5.2】將字符串CAT轉(zhuǎn)換為16進(jìn)制常量。

SELECTHEX('CAT');執(zhí)行結(jié)果如圖。常

量4.日期時(shí)間常量日期時(shí)間常量:由用單引號(hào)將表示日期時(shí)間的字符串括起來的形式構(gòu)成。日期型常量包括年、月、日,數(shù)據(jù)類型為DATE,按年-月-日的順序表示,中間的間隔符“-”也可以使用如“\”“@”或“%”等特殊符號(hào)。例如:“2024-06-17”。時(shí)間型常量包括小時(shí)、分鐘、秒及微秒數(shù),數(shù)據(jù)類型為TIME,按“時(shí)-分-秒.微秒”的格式表示。例如:“12:30:43.00013”。5.位列值使用BIN函數(shù)可以將位列值顯示為二進(jìn)制常量。使用OCT函數(shù)可以將位列值顯示為數(shù)值常量。執(zhí)行下列語句:SELECTBIN(b'111101'+0),OCT(b'111101'+0);執(zhí)行結(jié)果如圖。常

量6.布爾值布爾值只包含兩個(gè)可能的值:TRUE和FALSE。FALSE的數(shù)字值為“0”,TRUE的數(shù)字值為“1”。【例5.3】獲取TRUE和FALSE的值。SELECTTRUE,FALSE;執(zhí)行結(jié)果如圖。7.NULL值NULL值可適用于各種列類型,它通常用來表示“沒有值”“無數(shù)據(jù)”等意義,并且不同于數(shù)字類型的“0”或字符串類型的空字符串。02變

量1.用戶變量2.系統(tǒng)變量變量1.用戶變量用戶變量與連接有關(guān)。也就是說,一個(gè)客戶端定義的變量不能被其他客戶端看到或使用。當(dāng)退出客戶端時(shí),該客戶端連接的所有變量將被自動(dòng)釋放??梢允褂肧ET語句定義和初始化一個(gè)變量。語法格式如下:SET@用戶變量=expr1[,@用戶變量2=expr2,…]其中,用戶變量名可以由當(dāng)前字符集的文字?jǐn)?shù)字字符、“.”“_”和“$”組成。Expr表示要給變量賦的值,可以是常量、變量或表達(dá)式?!纠?.4】創(chuàng)建用戶變量和查詢用戶變量的值。SET@name='王林';SET@user1=1,@user2=2,@user3=3;SET@user4=@user3+1;SELECT@name;其中:(1)創(chuàng)建用戶變量name并賦值為“王林”;(2)創(chuàng)建用戶變量user1并賦值為1,user2賦值為2,user3賦值為3;(3)創(chuàng)建用戶變量user4,它的值為user3的值加1;(4)查詢用戶變量name的值。執(zhí)行結(jié)果如圖。變量【例5.5】使用查詢給變量賦值。USExscjSET@student=(SELECT姓名FROMxsWHERE學(xué)號(hào)='221101');【例5.6】查詢表xs中名字等于student值的學(xué)生信息。SELECT學(xué)號(hào),姓名,專業(yè)名,出生日期 FROMxs WHERE姓名=@student;執(zhí)行結(jié)果如圖。對(duì)于SET語句,可以使用“=”或“:=”作為分配符。分配給每個(gè)變量的值可以為整數(shù)、實(shí)數(shù)、字符串或NULL值?!纠?.7】執(zhí)行如下語句:SELECT@t2:=(@t2:=2)+5ASt2;結(jié)果t2的值為7。變量2.系統(tǒng)變量和用戶變量一樣,系統(tǒng)變量也是一個(gè)值和一個(gè)數(shù)據(jù)類型,但不同的是,系統(tǒng)變量在MySQL服務(wù)器啟動(dòng)時(shí)就被引入并初始化為默認(rèn)值。【例5.8】獲得現(xiàn)在使用的MySQL版本。SELECT@@version;執(zhí)行結(jié)果如圖。【例5.9】獲得系統(tǒng)當(dāng)前時(shí)間。SELECTCURRENT_TIME;執(zhí)行結(jié)果如圖。變量在MySQL中,有些系統(tǒng)變量的值是不可以改變的,例如VERSION和CURRENT_DATE。而有些系統(tǒng)變量是可以通過SET語句來修改的,例如SQL_WARNINGS。SET語句的語法格式如下:SET系統(tǒng)變量名=expr |[GLOBAL|SESSION]系統(tǒng)變量名=expr |@@[global.|session.]系統(tǒng)變量名=expr(1)全局系統(tǒng)變量。當(dāng)啟動(dòng)MySQL的時(shí)候,全局系統(tǒng)變量就被初始化了,并且應(yīng)用于每個(gè)啟動(dòng)的會(huì)話。如果使用GLOBAL(要求SUPER權(quán)限)來設(shè)置系統(tǒng)變量,則該值被記住,并被用于新的連接,直到服務(wù)器重新啟動(dòng)為止?!纠?.10】將全局系統(tǒng)變量sort_buffer_size的值改為25000。SET@@global.sort_buffer_size=25000;變量(2)會(huì)話系統(tǒng)變量。會(huì)話系統(tǒng)變量只適用于當(dāng)前的會(huì)話。大多數(shù)會(huì)話系統(tǒng)變量的名字和全局系統(tǒng)變量的名字相同。當(dāng)啟動(dòng)會(huì)話的時(shí)候,每個(gè)會(huì)話系統(tǒng)變量都和同名的全局系統(tǒng)變量的值相同。一個(gè)會(huì)話系統(tǒng)變量的值是可以改變的,但是這個(gè)新的值僅適用于正在運(yùn)行的會(huì)話,不適用于其他會(huì)話?!纠?.11】將當(dāng)前會(huì)話的SQL_WARNINGS系統(tǒng)變量設(shè)置為ON。SET@@SQL_WARNINGS=ON;【例5.12】對(duì)于當(dāng)前會(huì)話,把系統(tǒng)變量SQL_SELECT_LIMIT的值設(shè)置為10。這個(gè)變量決定了SELECT語句的結(jié)果集中的最大行數(shù)。SET@@SESSION.SQL_SELECT_LIMIT=10;SELECT@@LOCAL.SQL_SELECT_LIMIT;執(zhí)行結(jié)果如圖。變量MySQL對(duì)于大多數(shù)系統(tǒng)變量都有默認(rèn)值。當(dāng)數(shù)據(jù)庫服務(wù)器啟動(dòng)的時(shí)候,就使用這些值?!纠?.13】把SQL_SELECT_LIMIT的值恢復(fù)為默認(rèn)值。用戶使用SHOWVARIABLES語句可以得到系統(tǒng)變量清單,使用SHOWGLOBALVARIABLES可以返回所有全局系統(tǒng)變量,使用SHOWSESSIONVARIABLES可以返回所有會(huì)話系統(tǒng)變量。要獲得與樣式匹配的具體的變量名稱或名稱清單,需使用LIKE子句,要得到名稱與樣式匹配的變量的清單,需使用通配符“%”。【例5.14】得到系統(tǒng)變量清單。SET@@LOCAL.SQL_SELECT_LIMIT=DEFAULT;SHOWVARIABLES;SHOWVARIABLESLIKE'max_join_size';SHOWGLOBALVARIABLESLIKE'max_join_size';SHOWVARIABLESLIKE'character%';第5章MySQL語言——運(yùn)算符與表達(dá)式01算術(shù)運(yùn)算符算術(shù)運(yùn)算符(1)“+”運(yùn)算符?!?”運(yùn)算符用于獲得兩個(gè)或多個(gè)值的和:SELECT1.2+3.09345,0.00000000001+0.00000000001;執(zhí)行結(jié)果如圖。(2)“–”運(yùn)算符?!皑C”運(yùn)算符用于從一個(gè)值中減去另一個(gè)值,并可以更改參數(shù)符號(hào):SELECT200-201,0.14-0.1,-2,-23.4;執(zhí)行結(jié)果如圖。“+”和“-”運(yùn)算符還可用于對(duì)日期時(shí)間值(如DATETIME)進(jìn)行算術(shù)運(yùn)算。例如:SELECT'2024-01-20'+INTERVAL22DAY;執(zhí)行結(jié)果如圖。算術(shù)運(yùn)算符(3)“*”運(yùn)算符?!?”運(yùn)算符用來獲得兩個(gè)或多個(gè)值的乘積:SELECT5*12,5*0,-11.2*8.2,-19530415*-19540319;執(zhí)行結(jié)果如圖。(4)“/”運(yùn)算符?!?”運(yùn)算符用來獲得一個(gè)值除以另一個(gè)值得到的商:SELECT12/2,1.6/-0.1,23/7,23.00/7.00000,1/0;執(zhí)行結(jié)果如圖。算術(shù)運(yùn)算符(5)“%”運(yùn)算符。“%”運(yùn)算符用來獲得一個(gè)或多個(gè)除法運(yùn)算的余數(shù):SELECT12%5,-32%7,3%0;執(zhí)行結(jié)果如圖。在運(yùn)算過程中,用字符串表示的數(shù)字可以自動(dòng)地轉(zhuǎn)換為字符串。當(dāng)執(zhí)行轉(zhuǎn)換時(shí),如果字符串的第一位是數(shù)字,那么它轉(zhuǎn)換為這個(gè)數(shù)字的值,否則,它轉(zhuǎn)換為零。例如:SELECT'80AA'+'1','AA80'+1,'10x'*2*'qwe';執(zhí)行結(jié)果如圖。02比較運(yùn)算符比較運(yùn)算符比較運(yùn)算符(又稱關(guān)系運(yùn)算符),用于比較運(yùn)算符兩邊的值,其運(yùn)算結(jié)果為邏輯值,邏輯值可以為以下3種之一:1(真)、0(假)及NULL(不確定)。表5.5列出了在MySQL中可以使用的各種比較運(yùn)算符。運(yùn)

符含

義運(yùn)

算符含

義=等于<=小于等于>

大于<>、!=不等于<

小于<=>相等或都等于空>=大于等于

【例5.15】執(zhí)行下列語句:SELECT5='5ab','5'='5ab';執(zhí)行結(jié)果如圖。比較運(yùn)算符(1)“=”運(yùn)算符?!?”運(yùn)算符用于比較運(yùn)算符的兩邊是否相等,也可以用于對(duì)字符串進(jìn)行比較,示例如下:SELECT3.14=3.142,5.12=5.120,'a'='A','A'='B','apple'='banana';執(zhí)行結(jié)果如圖。使用BINARY關(guān)鍵字示例如下:SELECT'Apple'='apple',BINARY'Apple'='apple';執(zhí)行結(jié)果如圖。比較運(yùn)算符(2)“<>”運(yùn)算符。與“=”運(yùn)算符相對(duì)立的是“<>”運(yùn)算符,它用來檢測運(yùn)算符的兩邊是否不相等,如果不相等則返回1,相等則返回0,示例如下:SELECT5<>5,5<>6,'a'<>'a','5a'<>'5b';執(zhí)行結(jié)果如圖。SELECTNULL<>NULL,0<>NULL,0<>0;執(zhí)行結(jié)果如圖。又如:比較運(yùn)算符(3)“<=”“>=”“<”和“>”運(yùn)算符。“<=”“>=”“<”“>”運(yùn)算符用來比較運(yùn)算符的左邊是小于或等于、大于或等于、小于還是大于運(yùn)算符的右邊,示例如下:SELECT10>10,10>9,10<9,3.14>3.142;執(zhí)行結(jié)果如圖。03邏輯運(yùn)算符邏輯運(yùn)算符邏輯運(yùn)算符用于對(duì)某個(gè)條件進(jìn)行測試,運(yùn)算結(jié)果為TRUE(1)或FALSE(0)。MySQL提供的邏輯運(yùn)算符如表。運(yùn)

符運(yùn)算規(guī)則運(yùn)

符運(yùn)算規(guī)則NOT或!邏輯非OR或||邏輯或AND或&&邏輯與XOR邏輯異或(1)NOT運(yùn)算符。邏輯運(yùn)算符中較簡單的是NOT運(yùn)算符,它對(duì)跟在它后面的邏輯測試判斷取反,把真變假,把假變真。例如:SELECTNOT1,NOT0,NOT(1=1),NOT(10>9);執(zhí)行結(jié)果如圖。邏輯運(yùn)算符(2)AND運(yùn)算符。AND運(yùn)算符用于測試兩個(gè)或更多的值(或表達(dá)式求值)的有效性,如果它的所有成分為真,并且不是NULL,它返回1,否則返回0。例如:SELECT(1=1)AND(9>10),('a'='a')AND('c'<'d');執(zhí)行結(jié)果如圖。(3)OR運(yùn)算符。如果包含的值或表達(dá)式有一個(gè)為真,并且不是NULL(不需要所有成分為真),它返回1,若全為假則返回0。例如:SELECT(1=1)OR(9>10),('a'='b')OR(1>2);執(zhí)行結(jié)果如圖。邏輯運(yùn)算符(4)XOR運(yùn)算符。如果包含的值或表達(dá)式一個(gè)為真,而另一個(gè)為假并且不是NULL,那么它返回1,否則返回0。例如:SELECT(1=1)XOR(2=3),(1<2)XOR(9<10);執(zhí)行結(jié)果如圖。04位運(yùn)算符位運(yùn)算符位運(yùn)算符在兩個(gè)表達(dá)式之間執(zhí)行二進(jìn)制位操作,這兩個(gè)表達(dá)式的類型可為整型或與整型兼容的數(shù)據(jù)類型(如字符型,但不能為image類型),位運(yùn)算符如表。運(yùn)

符運(yùn)算規(guī)則運(yùn)

符運(yùn)算規(guī)則&位AND~位取反|位OR>>

位右移^位XOR<<

位左移(1)“|”運(yùn)算符和“&”運(yùn)算符。“|”運(yùn)算符用于執(zhí)行一個(gè)位的或操作,而“&”用于執(zhí)行一個(gè)位的與操作。例如:SELECT13|28,3|4,13&28,3&4;執(zhí)行結(jié)果如圖。位運(yùn)算符(2)“<<”“>>”運(yùn)算符?!?lt;<”“>>”運(yùn)算符分別用于向左和向右移動(dòng)位,例如:SELECT1<<7,64>>1;執(zhí)行結(jié)果如圖。(3)“^”運(yùn)算符?!癪”運(yùn)算符用于執(zhí)行位異或(XOR)操作:SELECT1^0,12^5,123^23;執(zhí)行結(jié)果如圖。位運(yùn)算符(4)“~”運(yùn)算符?!啊边\(yùn)算符用于執(zhí)行位取反操作,并返回64位整型結(jié)果:SELECT~18446744073709551614,~1;執(zhí)行結(jié)果如圖。05運(yùn)算符優(yōu)先級(jí)運(yùn)算符優(yōu)先級(jí)當(dāng)一個(gè)復(fù)雜的表達(dá)式中有多個(gè)運(yùn)算符時(shí),運(yùn)算符優(yōu)先級(jí)決定執(zhí)行運(yùn)算的先后次序。執(zhí)行的次序有時(shí)會(huì)影響所得到的運(yùn)算結(jié)果。運(yùn)算符優(yōu)先級(jí)如表。運(yùn)

符優(yōu)先級(jí)運(yùn)

符優(yōu)先級(jí)+(正)、–(負(fù))、~(按位NOT)1NOT6*(乘)、/(除)、%(模)2AND7+(加)、–(減)3ALL、ANY、BETWEEN、IN、LIKE、OR、SOME8=,>,<,>=,<=,<>,!=,!>,!<比較運(yùn)算符4=(賦值)9^(位異或)、&(位與)、|(位或)5

在一個(gè)表達(dá)式中按先高(優(yōu)先級(jí)數(shù)字?。┖蟮停▋?yōu)先級(jí)數(shù)字大)的順序進(jìn)行運(yùn)算。06表達(dá)式表達(dá)式(1)表達(dá)式就是常量、變量、列名、運(yùn)算符和函數(shù)的組合。一個(gè)表達(dá)式通??梢缘玫揭粋€(gè)值。與常量和變量一樣,表達(dá)式的值也具有某種數(shù)據(jù)類型,可能的數(shù)據(jù)類型有字符類型、數(shù)值類型、日期時(shí)間類型。(2)表達(dá)式還可以根據(jù)值的復(fù)雜性來分類。①當(dāng)表達(dá)式的結(jié)果只是一個(gè)值,如一個(gè)數(shù)值、一個(gè)單詞或一個(gè)日期,這種表達(dá)式叫作標(biāo)量表達(dá)式。例如:1+2,'a'>'b'。②當(dāng)表達(dá)式的結(jié)果是由不同類型數(shù)據(jù)組成的一行值,這種表達(dá)式叫作行表達(dá)式。例如:學(xué)號(hào),'王林','計(jì)算機(jī)',15*10③若是表達(dá)式的結(jié)果為0個(gè)、1個(gè)或多個(gè)行表達(dá)式的集合,那么這個(gè)表達(dá)式就叫作表表達(dá)式。(3)表達(dá)式按照形式還可分為單一表達(dá)式和復(fù)合表達(dá)式。單一表達(dá)式就是一個(gè)單一的值,如一個(gè)常量或列名。復(fù)合表達(dá)式是由運(yùn)算符將多個(gè)單一表達(dá)式連接而成的表達(dá)式,例如:1+2+3,a=b+3,'2008-01-20'+INTERVAL2MONTH第5章MySQL語言——系統(tǒng)內(nèi)置函數(shù)01數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù)(1)GREATEST()函數(shù)和LEAST()函數(shù)。GREATEST()函數(shù)和LEAST()函數(shù)的功能分別是獲得一組數(shù)中的最大值和最小值,例如:SELECTGREATEST(10,9,128,1),LEAST(1,2,3);執(zhí)行結(jié)果如圖。數(shù)學(xué)函數(shù)還可以嵌套使用,例如:SELECTGREATEST(-2,LEAST(0,3)),LEAST(1,GREATEST(1,2));執(zhí)行結(jié)果如圖。數(shù)學(xué)函數(shù)(2)FLOOR()函數(shù)和CEILING()函數(shù)。FLOOR()函數(shù)用于獲得小于一個(gè)數(shù)的最大整數(shù)值,CEILING()函數(shù)用于獲得大于一個(gè)數(shù)的最小整數(shù)值,例如:SELECTFLOOR(-1.2),CEILING(-1.2),FLOOR(9.9),CEILING(9.9);執(zhí)行結(jié)果如圖。數(shù)學(xué)函數(shù)(3)ROUND()函數(shù)和TRUNCATE()函數(shù)。ROUND()函數(shù)用于獲得一個(gè)數(shù)經(jīng)四舍五入后的整數(shù)值,例如:SELECTROUND(5.1),ROUND(25.501),ROUND(9.8);執(zhí)行結(jié)果如圖。TRUNCATE()函數(shù)用于把一個(gè)數(shù)字截取為一個(gè)指定小數(shù)位數(shù)的數(shù)字,逗號(hào)后面的數(shù)字表示指定小數(shù)的位數(shù),例如:SELECTTRUNCATE(1.54578,2),TRUNCATE(-76.12,5);執(zhí)行結(jié)果如圖。數(shù)學(xué)函數(shù)(4)ABS()函數(shù)。ABS()函數(shù)用來獲得一個(gè)數(shù)的絕對(duì)值,例如:SELECTABS(-878),ABS(-8.345);執(zhí)行結(jié)果如圖。(5)SIGN()函數(shù)。SIGN()函數(shù)用于表示數(shù)字的符號(hào),返回的結(jié)果是1(正數(shù))、1(負(fù)數(shù))或者0(零),例如:SELECTSIGN(-2),SIGN(2),SIGN(0);執(zhí)行結(jié)果如圖。數(shù)學(xué)函數(shù)(6)SQRT()函數(shù)。SQRT()函數(shù)用于返回一個(gè)數(shù)的平方根,例如:SELECTSQRT(25),SQRT(15),SQRT(1);執(zhí)行結(jié)果如圖。(7)POW()函數(shù)。POW()函數(shù)用于指數(shù)計(jì)算,以一個(gè)數(shù)作為另外一個(gè)數(shù)的指數(shù),并返回結(jié)果,例如:SELECTPOW(2,2),POW(10,-2),POW(0,3);執(zhí)行結(jié)果如圖。數(shù)學(xué)函數(shù)(8)SIN()函數(shù)、COS()函數(shù)和TAN()函數(shù)。SIN()函數(shù)、COS()函數(shù)和TAN()函數(shù)分別用于返回一個(gè)角度(弧度)的正弦值、余弦值和正切值,例如:SELECTSIN(1),COS(1),TAN(RADIANS(45));執(zhí)行結(jié)果如圖。(9)ASIN()函數(shù)、ACOS()函數(shù)和ATAN()函數(shù)。ASIN()函數(shù)、ACOS()函數(shù)和ATAN()函數(shù)分別用于返回一個(gè)角度(弧度)的反正弦、反余弦和反正切值,例如:SELECTASIN(1),ACOS(1),ATAN(DEGREES(45));執(zhí)行結(jié)果如圖。數(shù)學(xué)函數(shù)(10)BIN()函數(shù)、OTC()函數(shù)和HEX()函數(shù)。BIN()函數(shù)、OTC()函數(shù)和HEX()函數(shù)分別用于返回一個(gè)數(shù)的二進(jìn)制值、八進(jìn)制值和十六進(jìn)制值,這個(gè)值作為字符串返回,例如:SELECTBIN(2),OCT(12),HEX(80);執(zhí)行結(jié)果如圖。02聚合函數(shù)聚合函數(shù)聚合函數(shù)常常用于對(duì)一組值進(jìn)行計(jì)算,然后返回單個(gè)值。通過把聚合函數(shù)(如COUNT()函數(shù)和SUM()函數(shù))添加到帶有一個(gè)GROUPBY子句的SELECT語句塊中,數(shù)據(jù)就可以聚合。聚合意味著是求一個(gè)和、平均、頻次及子和,而不是單個(gè)的值。03字符串函數(shù)字符串函數(shù)(1)ASCII()函數(shù)。語法格式如下:ASCII(char)返回字符表達(dá)式左端字符的ASCII值。參數(shù)char為字符型的表達(dá)式,返回值類型為整型。【例5.16】返回字母A的ASCII值。SELECTASCII('A');執(zhí)行結(jié)果如圖。字符串函數(shù)(2)CHAR()函數(shù)。語法格式如下:CHAR(x1,x2,x3,…)將x1,x2,x3…的ASCII值轉(zhuǎn)換為字符,將結(jié)果組合成一個(gè)字符串。參數(shù)x1,x2,x3,…為0~255的整數(shù),返回值類型為字符型。【例5.17】返回ASCII值為65、66、67的字符,并將其組成一個(gè)字符串。SELECTCHAR(65,66,67);執(zhí)行結(jié)果如圖。字符串函數(shù)(3)LEFT()函數(shù)和RIGHT()函數(shù)。語法格式如下:LEFT|RIGHT(str,x)分別用于返回從字符串str左邊和右邊開始指定的x個(gè)字符。【例5.18】返回kc表中課程名列中左邊的3個(gè)字符。USExscjSELECTLEFT(課程名,3)FROMkc;執(zhí)行結(jié)果如圖。字符串函數(shù)(4)TRIM()函數(shù)、LTRIM()函數(shù)和RTRIM()函數(shù)。語法格式如下:TRIM|LTRIM|RTRIM(str)使用LTRIM()函數(shù)和RTRIM()函數(shù)分別用于刪除字符串中前面的空格和尾部的空格,返回值為字符串。參數(shù)str為字符型表達(dá)式,返回值類型為varchar。TRIM()函數(shù)用于刪除字符串首部和尾部的所有空格?!纠?.19】執(zhí)行如下語句:SELECTTRIM('MySQL');執(zhí)行結(jié)果如圖。字符串函數(shù)(5)RPAD()函數(shù)和LPAD()函數(shù)。語法格式如下:RPAD|LPAD(str,n,pad)使用RPAD()函數(shù)和LPAD()函數(shù)意味著分別用字符串pad對(duì)字符串str的右邊和左邊進(jìn)行填補(bǔ),直至str中字符數(shù)目達(dá)到n個(gè),最后返回填補(bǔ)后的字符串。若str中的字符數(shù)目大于n,則返回str的前n個(gè)字符?!纠?.20】執(zhí)行如下語句:SELECTRPAD('中國夢',8,'!'),lpad('welcome',10,'*');執(zhí)行結(jié)果如圖。字符串函數(shù)(6)REPLACE()函數(shù)。語法格式如下:REPLACE(str1,str2,str3)REPLACE()函數(shù)用于用字符串str3替換str1中所有出現(xiàn)的字符串str2,最后返回替換后的字符串?!纠?.21】執(zhí)行如下語句:SELECTREPLACE('WELCOMEtoCHINA','o','K');執(zhí)行結(jié)果如圖。字符串函數(shù)(7)CONCAT()函數(shù)。語法格式如下:CONCAT(s1,s2,…sn)CONCAT()函數(shù)用于連接指定的兩個(gè)或多個(gè)字符串。【例5.22】執(zhí)行如下語句:selectCONCAT('中國夢','我的夢');執(zhí)行結(jié)果如圖。字符串函數(shù)(8)SUBSTRING()函數(shù)。語法格式如下:SUBSTRING(expression,Start,Length)用于返回expression中指定的部分?jǐn)?shù)據(jù)。參數(shù)expression可為字符串、二進(jìn)制字符串、text、image列或表達(dá)式等。Start、Length均為整型數(shù)據(jù),前者用于指定子串的開始位置,后者用于指定子串的長度(要返回字節(jié)數(shù))。如果expression類型是字符類型和二進(jìn)制類型,則返回值類型與expression的類型相同。如果為text類型,返回的是varchar類型。【例5.23】以下程序用于在一列中返回xs表中所有女學(xué)生的姓氏,在另一列中返回其名字。USExscjSELECTSUBSTRING(姓名,1,1)AS姓,SUBSTRING(姓名,2,LENGTH(姓名)-1)AS名 FROMxs WHERE性別=0 ORDERBY姓名;執(zhí)行結(jié)果如圖。字符串函數(shù)(9)STRCMP()函數(shù)。語法格式如下:STRCMP(s1,s2)STRCMP()函數(shù)用于比較兩個(gè)字符串,s1與s2相等返回0,s1大于s2返回1,s1小于s2返回-1?!纠?.24】執(zhí)行如下語句:SELECTSTRCMP('A','A'),STRCMP('ABC','OPQ'),STRCMP('T','B');執(zhí)行結(jié)果如圖。04日期和時(shí)間函數(shù)日期和時(shí)間函數(shù)(1)NOW()函數(shù)。使用NOW()函數(shù)可以獲得當(dāng)前的日期和時(shí)間,它以“YYYY-MM-DDHH∶MM∶SS”的格式返回當(dāng)前的日期和時(shí)間。語法格式如下:SELECTNOW();(2)CURTIME()函數(shù)和CURDATE()函數(shù)。CURTIME()函數(shù)和CURDATE()函數(shù)比NOW()函數(shù)更為具體化,使用它們分別返回的是當(dāng)前的時(shí)間和日期,沒有參數(shù)。語法格式如下:SELECTCURTIME(),CURDATE();(3)YEAR()函數(shù)。YEAR()函數(shù)用于分析一個(gè)日期值并返回其中關(guān)于年的部分,例如:SELECTYEAR(20080512142800),YEAR('1982-11-02');執(zhí)行結(jié)果如圖。日期和時(shí)間函數(shù)(4)MOTNTH()函數(shù)和MONTHNAME()函數(shù)。MOTNTH()函數(shù)和MONTHNAME()函數(shù)分別用于以數(shù)值和字符串的格式返回表示月的部分,例如:SELECTMONTH(20080512142800),MONTHNAME('1982-11-02');執(zhí)行結(jié)果如圖。(5)DAYOFYEAR()函數(shù)、DAYOFWEEK()函數(shù)和DAYOFMONTH()函數(shù)。DAYOFYEAR()函數(shù)、DAYOFWEEK()函數(shù)和DAYOFMONTH()函數(shù)分別用于返回其一天在一年、一星期及一個(gè)月中的序數(shù),例如。SELECTDAYOFYEAR(20080512),DAYOFMONTH('2008-05-12');執(zhí)行結(jié)果如圖。SELECTDAYOFWEEK(20080512);執(zhí)行結(jié)果如圖。日期和時(shí)間函數(shù)(6)DAYNAME()函數(shù)。和MONTHNAME()函數(shù)相似,DAYNAME()函數(shù)用于以字符串形式返回星期名,例如:SELECTDAYNAME('2008-06-01');執(zhí)行結(jié)果如圖。(7)WEEK()函數(shù)和YEARWEEK()函數(shù)。WEEK()函數(shù)用于返回指定的日期是該年的第幾個(gè)星期,而YEARWEEK()函數(shù)用于返回指定的日期是哪一年的第幾個(gè)星期,例如:SELECTWEEK('2008-05-01'),YEARWEEK(20080501);執(zhí)行結(jié)果如圖。日期和時(shí)間函數(shù)(8)HOUR()函數(shù)、MINUTE()函數(shù)和SECOND()函數(shù)。HOUR()函數(shù)、MINUTE()函數(shù)和SECOND()函數(shù)分別用于返回指定時(shí)間值的小時(shí)、分鐘和秒的部分,例如:SELECTHOUR(155300),MINUTE('15:53:00'),SECOND(143415);執(zhí)行結(jié)果如圖。日期和時(shí)間函數(shù)(9)DATE_ADD()函數(shù)和DATE_SUB()函數(shù)。使用DATE_ADD()函數(shù)和DATE_SUB()函數(shù)可以對(duì)日期和時(shí)間進(jìn)行算術(shù)操作,它們分別用來增加和減少日期值,其使用的關(guān)鍵字如表。關(guān)

字間隔值的格式關(guān)

字間隔值的格式DAY日期MINUTE分鐘DAY_HOUR日期∶小時(shí)MINUTE_SECOND分鐘∶秒DAY_MINUTE日期∶小時(shí)∶分鐘MONTH月DAY_SECOND日期∶小時(shí)∶分鐘∶秒SECOND秒HOUR小時(shí)YEAR年HOUR_MINUTE小時(shí)∶分鐘YEAR_MONTH年-月HOUR_SECOND小時(shí)∶分鐘∶秒

DATE_ADD()函數(shù)和DATE_SUB()函數(shù)的語法格式為:DATE_ADD|DATE_SUB(date,INTERVALintkeyword)日期和時(shí)間函數(shù)DATE_ADD函數(shù)用于計(jì)算date加上間隔時(shí)間后的值,DATE_SUB則用于計(jì)算date減去時(shí)間間隔后的值。例如:SELECTDATE_ADD('2014-08-08',INTERVAL17DAY);執(zhí)行結(jié)果如圖。SELECTDATE_SUB('2014-08-2010:25:35',INTERVAL20MINUTE);執(zhí)行結(jié)果如圖。日期和時(shí)間函數(shù)【例5.25】求xs表中所有女學(xué)生的年齡。USExscjSELECT學(xué)號(hào),姓名,YEAR(NOW())-YEAR(出生日期)AS年齡 FROMxs WHERE性別=0;執(zhí)行結(jié)果如圖。05加密函數(shù)加密函數(shù)(1)AES_ENCRYPT()函數(shù)和AES_DECRYPT()函數(shù)。語法格式如下:AES_ENCRYPT|AES_DECRYPT(str,key)AES_ENCRYPT()函數(shù)和AES_DECRYPT()函數(shù)可以被看作MySQL中普遍使用的安全的加密函數(shù)。AES_ENCRYPT()函數(shù)返回的是密鑰key對(duì)字符串str利用高級(jí)加密標(biāo)準(zhǔn)(AES)算法加密后的結(jié)果,結(jié)果是一個(gè)二進(jìn)制形式的字符串,以BLOB類型存儲(chǔ)。AES_DECRYPT函數(shù)用于對(duì)用高級(jí)加密標(biāo)準(zhǔn)算法加密的數(shù)據(jù)進(jìn)行解密。若檢測到無效數(shù)據(jù)或不正確的填充,函數(shù)會(huì)返回NULL。(2)ENCODE()函數(shù)和DECODE()函數(shù)。語法格式如下:ENCODE|DECODE(str,key)ENCODE()函數(shù)用來對(duì)一個(gè)字符串str進(jìn)行加密,返回的結(jié)果是一個(gè)二進(jìn)制字符串,以BLOB類型存儲(chǔ)。加密函數(shù)(3)ENCRYPT()函數(shù)。ENCRYPT()函數(shù)使用UNIX系統(tǒng)加密字符串,接收要加密的字符串和用于加密過程的salt(一個(gè)可以確定唯一口令的字符串)。該函數(shù)在Windows上不可用。語法格式如下:ENCRYPT(str,salt)(4)PASSWORD()函數(shù)的語法格式如下:PASSWORD(str)返回字符串str加密后的密碼字符串,適合于插入MySQL的安全系統(tǒng)。該加密過程不可逆,和UNIX密碼加密過程使用不同的算法。主要用于MySQL的認(rèn)證系統(tǒng)?!纠?.26】返回字符串“MySQL”的加密版本。selectPASSWORD('MySQL');執(zhí)行結(jié)果如圖。06控制流函數(shù)控制流函數(shù)(1)IFNULL()函數(shù)和NULLIF()函數(shù),語法格式為:IFNULL(expr1,expr2)IFNULL()函數(shù)的作用是判斷參數(shù)expr1是否為NULL,當(dāng)參數(shù)expr1為NULL時(shí)返回expr2,不為NULL時(shí)返回expr1。IFNULL()函數(shù)的返回值是數(shù)字或字符串?!纠?.27】執(zhí)行如下語句:SELECTIFNULL(1,2),IFNULL(NULL,'MySQL'),IFNULL(1/0,10);執(zhí)行結(jié)果如圖。語法格式為:NULLIF(expr1,expr2)NULLIF()函數(shù)用于檢驗(yàn)提供的兩個(gè)參數(shù)是否相等,如果相等,則返回NULL,如果不相等就返回第一個(gè)參數(shù)??刂屏骱瘮?shù)【例5.28】執(zhí)行如下語句:SELECTNULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,3+4);執(zhí)行結(jié)果如圖??刂屏骱瘮?shù)(2)IF()函數(shù)。和許多腳本語言提供的IF()函數(shù)一樣,MySQL中的IF()函數(shù)也可以用于建立一個(gè)簡單的條件測試。語法格式如下:IF(expr1,expr2,expr3)這個(gè)函數(shù)中有3個(gè)參數(shù),第一個(gè)是要被判斷的表達(dá)式,如果表達(dá)式為真,IF()將會(huì)返回第二個(gè)參數(shù);如果為假,IF()將會(huì)返回第三個(gè)參數(shù)。【例5.29】判斷2×4是否大于9-5,是則返回“是”,否則返回“否”。SELECTIF(2*4>9-5,'是','否');執(zhí)行結(jié)果如圖??刂屏骱瘮?shù)【例5.30】返回xs表中名字為兩個(gè)字的學(xué)生的姓名、性別和專業(yè)名。性別值如為0顯示“女”,為1則顯示“男”。SELECT姓名,IF(性別=0,'女','男')AS性別,專業(yè)名 FROMxs WHERE姓名LIKE'__';執(zhí)行結(jié)果如圖。07格式化函數(shù)格式化函數(shù)(1)FORMAT()函數(shù),語法格式如下:FORMAT(x,y)FORMAT()函數(shù)把數(shù)值格式化為以逗號(hào)間隔的數(shù)字序列。FORMAT()的第一個(gè)參數(shù)x是被格式化的數(shù)據(jù),第二個(gè)參數(shù)y是結(jié)果的小數(shù)位數(shù),例如:SELECTFORMAT(11111111111.23654,2),FORMAT(-5468,4);執(zhí)行結(jié)果如圖。格式化函數(shù)(2)DATE_FORMAT()函數(shù)和TIME_FORMAT()函數(shù)。DATE_FORMAT()函數(shù)和TIME_FORMAT()函數(shù)可以用來格式化日期和時(shí)間值。語法格式如下:DATE_FORMAT/TIME_FORMAT(date|time,fmt)其中,date和time是需要格式化的日期和時(shí)間值,fmt是日期和時(shí)間值格式化的形式,表列出了MySQL中的日期/時(shí)間值格式化代碼。關(guān)

字間隔值的格式關(guān)

字間隔值的格式%a縮寫的星期名(Sun,Mon…)%pAM或PM%b縮寫的月份名(Jan,F(xiàn)eb…)%r時(shí)間,12小時(shí)的格式%d月份中的天數(shù)%S秒(00,01)%H小時(shí)(01,02…)%T時(shí)間,24小時(shí)的格式%I分鐘(00,01…)%w一周中的天數(shù)(0,1)%j一年中的天數(shù)(001,002…)%W長型星期的名字(Sunday,Monday…)%m月份,2位(00,01…)%Y年份,4位%M長型月份的名字(January,F(xiàn)ebruary)

例如:selectDATE_FORMAT(NOW(),'%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論