




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第4章MYSQL高級特性本章要點:v 集合函數(shù)與時間函數(shù)v 字符串的模式匹配v 如何創(chuàng)建索引v 檢索數(shù)據(jù)中的一些技巧第三章向你初步介紹了SQL。你學會了如何用SELECT語句進行查詢,你還學會了如何建立自己的表以及如何錄入數(shù)據(jù)等。在這一章里,你將加深你SQL語言知識。你將學習如何建立索引來加快查詢速度。你還將學會如果用更多的SQL語句和函數(shù)來操作表中的數(shù)據(jù)。尤其是對檢索語句SELECT的使用,其中技巧繁多,可以說這是SQL語言中最重要的語句,也是使用者最常使用的語句。本章將詳細介紹SELECT語句的用法。無論如何,這里的介紹都不能包括SQL語言的所有技巧,讀者應該在平時的不斷使用中積累經(jīng)驗。4
2、.1 集合函數(shù)到現(xiàn)在為止,你只學習了如何根據(jù)特定的條件從表中取出一條或多條記錄。但是,假如你想對一個表中的記錄進行數(shù)據(jù)統(tǒng)計。例如,如果你想統(tǒng)計存儲在表中的一次民意測驗的投票結(jié)果?;蛘吣阆胫酪粋€訪問者在你的站點上平均花費了多少時間。要對表中的任何類型的數(shù)據(jù)進行統(tǒng)計,都需要使用集合函數(shù)。你可以統(tǒng)計記錄數(shù)目,平均值,最小值,最大值,或者求和。當你使用一個集合函數(shù)時,它只返回一個數(shù),該數(shù)值代表這幾個統(tǒng)計值之一。這些函數(shù)的最大特點就是經(jīng)常和GROUP BY語句配合使用,需要注意的是集合函數(shù)不能和非分組的列混合使用。4.1.1 行列計數(shù)l 計算查詢語句返回的記錄行數(shù)直接計算函數(shù)COUNT(*)的值,例如
3、,計算pet表中貓的只數(shù):mysql>SELECT count(*) FROM pet WHERE species=cat;+-+| count(*) |+-+| 2 |+-+4.1.2統(tǒng)計字段值的數(shù)目例如,計算pet表中species列的數(shù)目:mysql> SELECT count(species) FROM pet;+-+| count(species) |+-+| 9 |+-+如果相同的種類出現(xiàn)了不止一次,該種類將會被計算多次。如果你想知道種類為某個特定值的寵物有多少個,你可以使用WHERE子句,如下例所示: mysql> SELECT COUNT(species) F
4、ROM pet WHERE species='cat' ;注意這條語句的結(jié)果:+-+| COUNT(species) |+-+| 2 |+-+這個例子返回種類為'cat'的作者的數(shù)目。如果這個名字在表pet中出現(xiàn)了兩次,則次函數(shù)的返回值是2。 而且它和上面提到過的語句的結(jié)果是一致的:SELECT count(*) FROM pet WHERE species=cat實際上,這兩條語句是等價的。假如你想知道有多少不同種類的的寵物數(shù)目。你可以通過使用關鍵字DISTINCT來得到該數(shù)目。如下例所示: mysql> SELECT COUNT(DISTINCT sp
5、ecies) FROM pet;+-+| COUNT(DISTINCT species) |+-+| 5 |+-+如果種類'cat'出現(xiàn)了不止一次,它將只被計算一次。關鍵字DISTINCT 決定了只有互不相同的值才被計算。 通常,當你使用COUNT()時,字段中的空值將被忽略。另外,COUNT()函數(shù)通常和GROUP BY子句配合使用,例如可以這樣返回每種寵物的數(shù)目:mysql> SELECT species,count(*) FROM pet GROUP BY species;+-+-+| species | count(*) |+-+-+| bird | 2 | ca
6、t | 2 | dog | 3 | hamster | 1 | snake | 1 |+-+-+4.1.3 計算字段的平均值需要計算這些值的平均值。使用函數(shù)AVG(),你可以返回一個字段中所有值的平均值。 假如你對你的站點進行一次較為復雜的民意調(diào)查。訪問者可以在1到10之間投票,表示他們喜歡你站點的程度。你把投票結(jié)果保存在名為vote的INT型字段中。要計算你的用戶投票的平均值,你需要使用函數(shù)AVG(): SELECT AVG(vote) FROM opinion 這個SELECT語句的返回值代表用戶對你站點的平均喜歡程度。函數(shù)AVG()只能對數(shù)值型字段使用。這個函數(shù)在計算平均值時也忽略空值。
7、 再給出一個實際例子,例如我們要計算pet表中每種動物年齡的平均值,那么使用AVG()函數(shù)和GROUP BY子句:mysql> SELECT species,AVG(CURDATE()-birth) FROM pet GROUP BY species;返回的結(jié)果為:+-+-+| species | AVG(CURDATE()-birth) |+-+-+| bird | 34160 | cat | 74959.5 | dog | 112829.66666667 | hamster | 19890 | snake | 49791 |+-+-+4.1.4 計算字段值的和假設你的站點被用來出售某
8、種商品,已經(jīng)運行了兩個月,是該計算賺了多少錢的時候了。假設有一個名為orders的表用來記錄所有訪問者的定購信息。要計算所有定購量的總和,你可以使用函數(shù)SUM(): SELECT SUM(purchase_amount) FROM orders 函數(shù)SUM()的返回值代表字段purchase_amount中所有值的總和。字段purchase_amount的數(shù)據(jù)類型也許是DECIMAL類型,但你也可以對其它數(shù)值型字段使用函數(shù)SUM()。用一個不太恰當?shù)睦诱f明,我們計算pet表中同種寵物的年齡的總和:mysql> SELECT species,SUM(CURDATE()-birth) FR
9、OM pet GROUP BY species;你可以查看結(jié)果,與前一個例子對照:+-+-+| species | SUM(CURDATE()-birth) |+-+-+| bird | 68320 | cat | 149919 | dog | 338489 | hamster | 19890 | snake | 49791 |+-+-+4.1.5 計算字段值的極值求字段的極值,涉及兩個函數(shù)MAX()和MIN()。例如,還是pet表,你想知道最早的動物出生日期,由于日期最早就是最小,所以可以使用MIN()函數(shù):mysql> SELECT MIN(birth) FROM pet;+-+|
10、MIN(birth) |+-+| 1989-05-13 |+-+但是,你只知道了日期,還是無法知道是哪只寵物,你可能想到這樣做:SELECT name,MIN(birth) FROM pet;但是,這是一個錯誤的SQL語句,因為集合函數(shù)不能和非分組的列混合使用,這里name列是沒有分組的。所以,你無法同時得到name列的值和birth的極值。MIN()函數(shù)同樣可以與GROUP BY子句配合使用,例如,找出每種寵物中最早的出生日期:mysql> SELECT species,MIN(birth) FROM pet GROUP BY species;下面是令人滿意的結(jié)果:+-+-+| spe
11、cies | MIN(birth) |+-+-+| bird | 1997-12-09 | cat | 1993-02-04 | dog | 1989-05-13 | hamster | 1999-03-30 | snake | 1996-04-29 |+-+-+另一方面,如果你想知道最近的出生日期,就是日期的最大值,你可以使用MAX()函數(shù),如下例所示: mysql> SELECT species,MAX(birth) FROM pet GROUP BY species; +-+-+| species | MAX(birth) |+-+-+| bird | 1998-09-11 | c
12、at | 1994-03-17 | dog | 1990-08-31 | hamster | 1999-03-30 | snake | 1996-04-29 |+-+-+4.1.6 總結(jié)在本節(jié)中,介紹了一些典型的集合函數(shù)的用法,包括計數(shù)、均值、極值和總和,這些都是SQL語言中非常常用的函數(shù)。這些函數(shù)之所以稱之為集合函數(shù),是因為它們應用在多條記錄中,所以集合函數(shù)最常見的用法就是與GROUP BY子句配合使用,最重要的是集合函數(shù)不能同未分組的列混合使用。4.2 操作日期和時間日期和時間函數(shù)對建立一個站點是非常有用的。站點的主人往往對一個表中的數(shù)據(jù)何時被更新感興趣。通過日期和時間函數(shù),你可以在秒級跟
13、蹤一個表的改變。日期和時間類型是DATETIME、DATE、TIMESTAMP、TIME和YEAR。這些的每一個都有合法值的一個范圍,而“零”當你指定確實不合法的值時被使用。注意,MySQL允許你存儲某個“不嚴格地”合法的日期值,例如1999-11-31,原因我們認為它是應用程序的責任來處理日期檢查,而不是SQL服務器。為了使日期檢查更“快”,MySQL僅檢查月份在0-12的范圍,天在0-31的范圍。上述范圍這樣被定義是因為MySQL允許你在一個DATE或DATETIME列中存儲日期,這里的天或月是零。這對存儲你不知道準確的日期的一個生日的應用程序來說是極其有用的,在這種情況下,你簡單地存儲日
14、期象1999-00-00或1999-01-00。(當然你不能期望從函數(shù)如DATE_SUB()或DATE_ADD()得到類似以這些日期的正確值)。4.2.1 返回當前日期和時間通過函數(shù)GETDATE(),你可以獲得當前的日期和時間。例如,l CURDATE() 返回當前日期CURRENT_DATE 以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取決于函數(shù)是在一個字符串還是數(shù)字上下文被使用。 mysql> select CURDATE();+-+| CURDATE() |+-+| 2001-02-20 |+-+mysql> select CURDATE
15、() + 0;+-+| CURDATE()+0 |+-+| 20010220 |+-+l CURTIME() 返回當前時間以'HH:MM:SS'或HHMMSS格式返回當前時間值,取決于函數(shù)是在一個字符串還是在數(shù)字的上下文被使用。 mysql> select CURTIME();+-+| CURTIME() |+-+| 10:42:38 |+-+mysql> select CURTIME() + 0;+-+| CURTIME()+0 |+-+| 104525 |+-+l NOW() 返回當前時期和時間NOW()以YYYY-MM-DD HH:MM:SS的格式或者YYYY
16、MMDDHHMMSS的格式返回日期和時間值,取決于上下文。mysql>select now();+-+| now() |+-+| 2001-02-20 10:45:57 |+-+mysql>select now()+0;+-+| now()+0 |+-+-+這些得到當前日期和時間的函數(shù),對于日期和時間的計算很方便,尤其是計算一個時間到現(xiàn)在的時間差。例如,在pet表中,我們以天為單位計算寵物的年齡:mysql> SELECT name,CURDATE()-birth FROM pet;+-+-+| name | CURDATE()-birth |+-+-+| Fluffy |
17、80016 | Claws | 69903 | Buffy | 119707 | Chirpy | 29309 | Fang | 109393 | Bowser | 109389 | Whistler | 39011 | Slim | 49791 | Puffball | 19890 |+-+-+4.2.2 自動記錄數(shù)據(jù)的改變時間TIMESTAMP列類型提供一種類型,TIMESTAMP值可以從1970的某時的開始一直到2037年,精度為一秒,其值作為數(shù)字顯示。你可以使用它自動地用當前的日期和時間標記INSERT或UPDATE的操作。如果你有多個TIMESTAMP列,只有第一個自動更新。 自動更
18、新第一個TIMESTAMP列在下列任何條件下發(fā)生: l 列沒有明確地在一個INSERT或LOAD DATA INFILE語句中指定。 l 列沒有明確地在一個UPDATE語句中指定且一些另外的列改變值。(注意一個UPDATE設置一個列為它已經(jīng)有的值,這將不引起TIMESTAMP列被更新,因為如果你設置一個列為它當前的值,MySQL為了效率而忽略更改。) l 你明確地設定TIMESTAMP列為NULL. 除第一個以外的TIMESTAMP列也可以設置到當前的日期和時間,只要將列設為NULL,或NOW()。 例如,創(chuàng)建如下的表:mysql> CREATE TABLE student-> (
19、-> id int,-> name char(16),-> english tinyint,-> chinese tinyint,-> history tinyint,-> time timestamp-> );向表中插入記錄,可以查看效果:mysql> INSERT student(id,name,englisht,Chinese,history) VALUES(11,”Tom”,66,93,67);查看記錄的存儲情況:mysql> SELECT * FROM student;+-+-+-+-+-+-+| id | name | engl
20、ish | chinese | history | time |+-+-+-+-+-+-+-+-+-+-+-+-+你可以看到time列紀錄下了數(shù)據(jù)錄入時的時間值。如果你更新改記錄,在查看操作的結(jié)果:mysql> UPDATE student SET english=76 WHERE id=11;mysql> SELECT * FROM student;+-+-+-+-+-+-+| id | name | english | chinese | history | time |+-+-+-+-+-+-+-+-+-+-+-+-+可以清楚的看到,time列的時間被自動更改為修改記錄的時間
21、。有時候你希望不更改任何值,也能打到修改TIMESTAMP列的值,這時只要設置該列的值為NULL,MySQL就可以自動更新TIMESTAMP列的值:mysql> UPDATE student SET time=NULL WHERE id=11;mysql> select * from student where id=11;+-+-+-+-+-+-+| id | name | english | chinese | history | time |+-+-+-+-+-+-+-+-+-+-+-+-+通過明確地設置希望的值,你可以設置任何TIMESTAMP列為不同于當前日期和時間的值,
22、即使對第一個TIMESTAMP列也是這樣。例如,如果,當你創(chuàng)建一個行時,你想要一個TIMESTAMP被設置到當前的日期和時間,但在以后無論何時行被更新時都不改變,你可以使用這樣使用: l 讓MySQL在行被創(chuàng)建時設置列,這將初始化它為當前的日期和時間。 l 當你執(zhí)行隨后的對該行中其他列的更改時,明確設定TIMESTAMP列為它的當前值。 例如,當你在修改列時,可以把原有的值付給TIMESTAMP列:mysql> UPDATE student SET english=66,time=time WHERE id=11;mysql> select * from student where
23、 id=11;+-+-+-+-+-+-+| id | name | english | chinese | history | time |+-+-+-+-+-+-+| 11 | Tom | 6+-+-+-+-+-+-+另一方面,你可能發(fā)現(xiàn),當你想要實現(xiàn)上面這個效果時,很容易用一個你用NOW()初始化的DATETIME列然后不再改變它,這樣也許直接些。 但是,TIMESTAMP列的以后好處是存儲要求比較小,節(jié)省空間。TIMESTAMP的存儲需求是4字節(jié),而DATETIME列的存儲需求是8字節(jié)。4.2.3 返回日期和時間范圍當你分析表中的數(shù)據(jù)時,你也許希望取出某個特定時間的數(shù)據(jù)。我們用下面一個表
24、來模仿一個web站點的記錄。mysql> CREATE TABLE weblog-> (-> data float,-> entrydate datetime-> );然后隨機的增加幾個數(shù)據(jù):mysql> INSERT weblog VALUES(rand(),now();rand()函數(shù)返回一個隨機的浮點值,now()函數(shù)返回當前時間。多執(zhí)行上面語句幾次,得到一個作為測試的表。最為測試你還可以增加一個值:mysql> INSERT weblog VALUES(rand(),”2001-02-08”);這條語句,插入一個entry為”2001-02-0
25、8 00:00:00”的值(假定現(xiàn)在為2001年2月8日),你可以查看這個表的值:mysql> select * from weblog;+-+-+| data | entrydate |+-+-+| 0.973723 | 2001-02-08 00:00:00 | 0.437768 | 2001-02-08 13:57:06 | 0.327279 | 2001-02-08 13:57:09 | 0.0931809 | 2001-02-08 13:58:29 | 0.198805 | 2001-02-08 13:57:54 |+-+-+你也許對特定的某一天中比如說2001年2月18日訪問
26、者在你站點上的活動感興趣。要取出這種類型的數(shù)據(jù),你也許會試圖使用這樣的SELECT語句: mysql> SELECT * FROM weblog WHERE entrydate="2001-02-08" 不要這樣做。這個SELECT語句不會返回正確的記錄它將只返回值為2000-02-08 00:00:00的記錄,換句話說,只返回當天零點零時的記錄。上面語句的結(jié)果為: +-+-+| data | entrydate |+-+-+| 0.973723 | 2001-02-08 00:00:00 |+-+-+要返回正確的記錄,你需要適用日期和時間范圍。有不止一種途徑可以做到
27、這一點。1、使用關系運算符和邏輯運算符來限制時間范圍例如,下面的這個SELECT 語句將能返回正確的記錄: mysql> SELECT * FROM weblog -> WHEREentrydate>="2001-02-08" AND entrydate<"2001-02-09" ;這個語句可以完成任務,因為它選取的是表中的日期和時間大于等于2001-02-08 00:00:00并小于2001-02-09 00:00:00的記錄。換句話說,它將正確地返回2000年2月8日這一天輸入的每一條記錄。 其結(jié)果為:+-+-+| data
28、| entrydate |+-+-+| 0.973723 | 2001-02-08 00:00:00 | 0.437768 | 2001-02-08 13:57:06 | 0.327279 | 2001-02-08 13:57:09 | 0.0931809 | 2001-02-08 13:58:29 | 0.198805 | 2001-02-08 13:57:54 |+-+-+2、另一種方法是,你可以使用LIKE來返回正確的記錄。通過在日期表達式中包含通配符“”,你可以匹配一個特定日期的所有時間。這里有一個例子: mysql> SELECT * FROM weblog WHERE ent
29、rydate LIKE '2001-02-08%' ;這個語句可以匹配正確的記錄。因為通配符“”代表了任何時間。 +-+-+| data | entrydate |+-+-+| 0.973723 | 2001-02-08 00:00:00 | 0.437768 | 2001-02-08 13:57:06 | 0.327279 | 2001-02-08 13:57:09 | 0.0931809 | 2001-02-08 13:58:29 | 0.198805 | 2001-02-08 13:57:54 |+-+-+3、上面兩種方法的異同由于使用關系運算符進行的是比較過程,時轉(zhuǎn)換成
30、內(nèi)部的存儲格式后進行的,因此,因此時間的書寫可以不是那么嚴格要求。例如,下面幾種寫法是等價的:mysql> SELECT * FROM weblog WHERE entrydate>="2001-02-08"mysql> SELECT * FROM weblog WHERE entrydate>="2001-2-8"mysql> SELECT * FROM weblog WHERE entrydate>="2001*02*08"mysql> SELECT * FROM weblog WHERE
31、 entrydate>="20010208"SELECT * FROM weblog WHERE entrydate>="2001/2/8"而使用LIKE運算符和模式匹配,是通過比較串值進行的,因此必須使用標準的時間書寫格式,YYYY-MM-DD HH-MM-SS。4.2.5 比較日期和時間已知兩個日期,比較它們的前后,可以直接求出它們的差和零值比較,也可以利用已知的時間函數(shù):TO_DAYS(date) 給出一個日期date,返回一個天數(shù)(從0年的天數(shù)),date可以是一個數(shù)字,也可以是一個串值,當然更可以是包含日期的時間類型。 mysql&
32、gt; select TO_DAYS(960501);+-+| TO_DAYS(960501) |+-+| 729145 |+-+mysql> select TO_DAYS('1997-07-01');+-+| TO_DAYS('1997-07-01') |+-+| 729571 |+-+例如:返回2個時間相差的天數(shù)(21世紀已經(jīng)過去了多少天)mysql> select to_days(now()-to_days('20010101');+-+| to_days(now()-00000012000000)-to_days('2
33、0010101') |+-+| 38 |+-+4.3 字符串模式匹配MySQL提供標準的SQL模式匹配,以及一種基于象Unix實用程序如vi、grep和sed的擴展正則表達式模式匹配的格式。 4.3.1 標準的SQL模式匹配SQL的模式匹配允許你使用“_”匹配任何單個字符,而“%”匹配任意數(shù)目字符(包括零個字符)。在 MySQL中,SQL的模式缺省是忽略大小寫的。下面顯示一些例子。注意在你使用SQL模式時,你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。 例如,在表pet中,為了找出以“b”開頭的名字: mysql> SELECT * FROM pet WHERE
34、 name LIKE "b%"+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Buffy | Harold | dog | f | 1989-05-13 | NULL | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |+-+-+-+-+-+-+為了找出以“fy”結(jié)尾的名字: mysql> SELECT * FROM pet WHERE name LIKE "%fy"+-+-+-+-+-+-
35、+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Fluffy | Harold | cat | f | 1993-02-04 | NULL | Buffy | Harold | dog | f | 1989-05-13 | NULL |+-+-+-+-+-+-+為了找出包含一個“w”的名字: mysql> SELECT * FROM pet WHERE name LIKE "%w%"+-+-+-+-+-+-+| name | owner | species | sex | birth |
36、death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |+-+-+-+-+-+-+為了找出包含正好5個字符的名字,使用“_”模式字符: mysql> SELECT * FROM pet WHERE name LIKE "_"+-+-+-+-+-+-+| name | owner | sp
37、ecies | sex | birth | death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Buffy | Harold | dog | f | 1989-05-13 | NULL |+-+-+-+-+-+-+4.3.2 擴展正則表達式模式匹配由MySQL提供的模式匹配的其他類型是使用擴展正則表達式。當你對這類模式進行匹配測試時,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。 擴展正則表達式的一些字符是: “.”匹配任何單個的字符。 一個字符類“.”匹配在方括
38、號內(nèi)的任何字符。例如,“abc”匹配“a”、“b”或“c”。為了命名字符的一個范圍,使用一個“-”?!癮-z”匹配任何小寫字母,而“0-9”匹配任何數(shù)字。 “ * ”匹配零個或多個在它前面的東西。例如,“x*”匹配任何數(shù)量的“x”字符,“0-9*”匹配的任何數(shù)量的數(shù)字,而“.*”匹配任何數(shù)量的任何東西。 正則表達式是區(qū)分大小寫的,但是如果你希望,你能使用一個字符類匹配兩種寫法。例如,“aA”匹配小寫或大寫的“a”而“a-zA-Z”匹配兩種寫法的任何字母。 如果它出現(xiàn)在被測試值的任何地方,模式就匹配(只要他們匹配整個值,SQL模式匹配)。 為了定位一個模式以便它必須匹配被測試值的開始或結(jié)尾,在模
39、式開始處使用“”或在模式的結(jié)尾用“$”。 為了說明擴展正則表達式如何工作,上面所示的LIKE查詢在下面使用REGEXP重寫: 為了找出以“b”開頭的名字,使用“”匹配名字的開始并且“bB”匹配小寫或大寫的“b”: mysql> SELECT * FROM pet WHERE name REGEXP "bB"+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Buffy | Harold | dog | f | 1989-05-13 | NULL | Bowser | D
40、iane | dog | m | 1989-08-31 | 1995-07-29 |+-+-+-+-+-+-+為了找出以“fy”結(jié)尾的名字,使用“$”匹配名字的結(jié)尾: mysql> SELECT * FROM pet WHERE name REGEXP "fy$"+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Fluffy | Harold | cat | f | 1993-02-04 | NULL | Buffy | Harold | dog | f | 1989
41、-05-13 | NULL |+-+-+-+-+-+-+為了找出包含一個“w”的名字,使用“wW”匹配小寫或大寫的“w”: mysql> SELECT * FROM pet WHERE name REGEXP "wW"+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | Whis
42、tler | Gwen | bird | NULL | 1997-12-09 | NULL |+-+-+-+-+-+-+既然如果一個正規(guī)表達式出現(xiàn)在值的任何地方,其模式匹配了,就不必再先前的查詢中在模式的兩方面放置一個通配符以使得它匹配整個值,就像如果你使用了一個SQL模式那樣。 為了找出包含正好5個字符的名字,使用“”和“$”匹配名字的開始和結(jié)尾,和5個“.”實例在兩者之間: mysql> SELECT * FROM pet WHERE name REGEXP ".$"+-+-+-+-+-+-+| name | owner | species | sex | bir
43、th | death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Buffy | Harold | dog | f | 1989-05-13 | NULL |+-+-+-+-+-+-+你也可以使用“n”“重復n次”操作符重寫先前的查詢: mysql> SELECT * FROM pet WHERE name REGEXP ".5$"+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Buffy | Harold | dog | f | 1989-05-13 | NULL |+-+-+-+-+-+-+4.3.3 總結(jié)4.3節(jié)介紹了有關字符串模式匹配的有關知識。標準的SQL模式匹配是SQL語言的標準,可以被其它關系數(shù)據(jù)庫系統(tǒng)接受。擴展正規(guī)表達式模式匹配是根據(jù)Unix系統(tǒng)的標準開發(fā)了,一般只可使用在MySQL上,但是其功能要比標準的SQL模式匹配
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京個人出租合同范本
- 營地建設合同范本
- 廠房物業(yè)委托合同范本
- 南通臨時倉庫租賃合同范本
- 修理種菜養(yǎng)禽合同范本
- 賣樹苗合同范本
- 老年患者睡眠護理
- 人教版《美術》二年級上冊第16課《風來了》課件
- 商鋪協(xié)議過戶合同范本
- 遼寧2025年遼寧中醫(yī)藥大學附屬醫(yī)院招聘42人筆試歷年參考題庫附帶答案詳解
- 新粵教版科學六年級下冊全冊教案(含反思)
- 地基注漿加固記錄表
- 初中生物實驗目錄(蘇教版)
- 2019年四川省綿陽市中考化學試卷
- 中國風青花瓷陶瓷文化宣傳PPT模板
- 美麗鄉(xiāng)村規(guī)劃設計技術導則
- 經(jīng)銷商準入及評定表格vr
- SF-36量表(簡明健康狀況調(diào)查表)
- 上崗證WORD模板
- 2019第五版新版PFMEA 注塑實例
- 職業(yè)技能鑒定質(zhì)量督導報告
評論
0/150
提交評論