




已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MySQL進(jìn)階SELECT語(yǔ)法篇從基本語(yǔ)法可以看出,最簡(jiǎn)單的SELECT語(yǔ)句是SELECT select_list,實(shí)際上利用這個(gè)最簡(jiǎn)單的SELECT語(yǔ)句,你也可以完成許多你期待的功能,首先你能利用它進(jìn)行MySQL所支持的任何運(yùn)算,例如:SELECT 1+1,它將返回2;其次,你也能利用它給變量賦值,而在PHP中,運(yùn)用SELECT語(yǔ)句的這種功能,你就可以自由地運(yùn)用MySQL的函數(shù)為PHP程序進(jìn)行各種運(yùn)算,并賦值給變量。在很多的時(shí)候,你會(huì)發(fā)現(xiàn)MySQL擁有許多比PHP更為功能強(qiáng)大的函數(shù)。MySQL中SELECT語(yǔ)句的基本語(yǔ)法是:SELECT STRAIGHT_JOIN SQL_SMALL_RESULT SQL_BIG_RESULT HIGH_PRIORITY DISTINCT|DISTINCTROW|ALLselect_listINTOOUTFILE|DUMPFILEfile_nameexport_options FROMtable_references WHEREwhere_definition GROUPBYcol_name,. HAVINGwhere_definition ORDERBYunsighed_integer|col_name|formura ASC|DESC,. LIMIToffset,rows PROCEDUREprocedure_nameSTRAIGHT_JOIN、SQL_SMALL_RESULT、SQL_BIG_RESULT、HIGH_PRIORITY是MySQL對(duì)ANSISQL92的擴(kuò)展。如果優(yōu)化器以非最佳次序聯(lián)結(jié)表,使用STRAIGHT_JOIN可以加快查詢。SQL_SMALL_RESULT和SQL_BIG_RESULT是一組相對(duì)的關(guān)鍵詞。它們必須與GROUPBY、DISTINCT或DISTINCTROW一起使用。SQL_SMALL_RESULT告知優(yōu)化器 結(jié)果會(huì)很小,要求MySQL使用臨時(shí)表存儲(chǔ)最終的表而不是使用排序;SQL_BIG_RESULT告知優(yōu)化器 結(jié)果很小,要求MySQL使用排序而不是做臨時(shí)表。HIGH_PRIORITY將賦予SELECT比一個(gè)更新表的語(yǔ)句更高的優(yōu)先級(jí),使之可以進(jìn)行一次優(yōu)先的快速的查詢。以上四個(gè)關(guān)鍵詞的使用方法的確比較晦澀。幸運(yùn)的是,在絕大多數(shù)情況下,在MySQL中我們完全可以選擇不使用這四個(gè)關(guān)鍵詞。DISTINCT、DISTINCTROW對(duì)查詢返回的結(jié)果集提供了一個(gè)最基本但是很有用的過(guò)濾。那就是結(jié)果集中只含非重復(fù)行。在這里要注意的是,對(duì)關(guān)鍵詞DISTINCT、DISTINCTROW來(lái)說(shuō),空值都是相等的,無(wú)論有多少NULL值,只選擇一個(gè)。而ALL的用法就畫(huà)蛇添足了。它對(duì)結(jié)果集的產(chǎn)生沒(méi)有任何影響。INTOOUTFILE|DUMPFILEfile_nameexport_options,將結(jié)果集寫(xiě)入一個(gè)文件。文件在服務(wù)器主機(jī)上被創(chuàng)建,并且不能是已經(jīng)存在的。語(yǔ)句中的export_options部分的語(yǔ)法與用在LOADDATAINFILE語(yǔ)句中的FIELDS和LINES子句中的相同,我們將在MySQL進(jìn)階_LOADDATA篇中詳細(xì)討論它。而OUTFILE與DUMPFILE的關(guān)鍵字的區(qū)別是:后前只寫(xiě)一行到文件,并沒(méi)有任何列或行結(jié)束。selectlist:其中可以包含一項(xiàng)或多項(xiàng)下列內(nèi)容:1、“*”,表示按照createtable的順序排列的所有列。2、按照用戶所需順序排列的列名的清單。3、可以使用別名取代列名,形式如下:columnnameascolumn_heading。4、表達(dá)式(列名、常量、函數(shù),或以算術(shù)或逐位運(yùn)算符連接的列名、常量和函數(shù)的任何組合)。5、內(nèi)部函數(shù)或集合函數(shù)。6、上述各項(xiàng)的任何一種組合。FROM:決定SELECT命令中使用哪些表。一般都要求有此項(xiàng),除非select_list中不含列名(例如,只有常量、算術(shù)表達(dá)式等)。如果表項(xiàng)中有多個(gè)表,用逗號(hào)將之分開(kāi)。在關(guān)鍵詞FROM后面的表的順序不影響結(jié)果。表名可以給出相關(guān)別名,以便使表達(dá)清晰。這里的語(yǔ)法是tbl_nameASalias_name。例如:, t2.salaryfromemployeeast1, = 與, t2.salaryfromemployeet1, = 是完全等價(jià)的。所有對(duì)該表的其他引用,例如在where子句和having子句中,都要用別名,別名不能以數(shù)字開(kāi)頭。where子句設(shè)置了搜索條件,它在insert,update,delete語(yǔ)句中的應(yīng)用方法也與在select語(yǔ)句中的應(yīng)用方法完全相同。搜索條件緊跟在關(guān)鍵詞where的后面。如果用戶要在語(yǔ)句中使用多個(gè)搜索條件,則可用and或or連接。搜索條件的基本語(yǔ)法是notexpressioncomparison_operatorexpression;notexpressionnotlike“match_string”;notexpressionisnotnull;notexpressionnotbetweenexpressionandexpression;notcolumn_namejoin_operatorcolumn_name;notboolean_expression。and:用來(lái)聯(lián)結(jié)兩個(gè)條件,并在兩個(gè)條件都是TRUE的時(shí)候返回結(jié)果。當(dāng)在同一語(yǔ)句中使用多個(gè)邏輯運(yùn)算符時(shí),and運(yùn)算符總是最優(yōu)先,除非用戶用括號(hào)改變了運(yùn)算順序。or:用來(lái)聯(lián)結(jié)兩個(gè)條件,當(dāng)兩個(gè)條件中有任一條件是TRUE的時(shí)候返回結(jié)果。當(dāng)在同一語(yǔ)句中使用多個(gè)邏輯運(yùn)算符時(shí),運(yùn)算符or通常在運(yùn)算符and之后進(jìn)行運(yùn)算。當(dāng)然用戶可以使用括號(hào)改變運(yùn)算的順序。between:用來(lái)標(biāo)識(shí)范圍下限的關(guān)鍵詞,and后面跟范圍上限的值。范圍wherevalbetweenxandy包含首尾值。如果between后面指定的第一個(gè)值大于第二個(gè)值,則該查詢不返回任何行。column_name:在比較中使用的列名。在會(huì)產(chǎn)生歧義時(shí),要指明列所在的表名。comparison_operator:比較運(yùn)算符:=等于;大于;=大于等于;=小于等于;!=不等于;不等于在比較char,varchar 型數(shù)據(jù)時(shí),“”代表更接近字母表尾部。一般來(lái)說(shuō),小寫(xiě)字母大于大寫(xiě)字母,大寫(xiě)字母大于數(shù)字,但是這可能依賴于服務(wù)器上操作系統(tǒng)的比較順序。在比較時(shí)末尾的空格是被忽略的。例如“Dirk”等于“Dirk”。在比較日期時(shí),“”表示晚于。在使用比較運(yùn)算符比較character和datetime數(shù)據(jù)時(shí),需用引號(hào)將所有數(shù)據(jù)引起來(lái)。expression:可能是列名、常數(shù)、函數(shù)或者是列名或常數(shù)的任意組合,以及以算術(shù)運(yùn)算符或逐位運(yùn)算符連接的函數(shù)。算術(shù)運(yùn)算符 如下所示:符號(hào)意義: +加號(hào) ; -減號(hào); *乘號(hào); /除號(hào)isnull:在搜索一個(gè)NULL值時(shí)使用。like:關(guān)鍵詞,對(duì)char、varchar和datetime(不包括秒和毫秒)可以使用like,在MySQL中l(wèi)ike也可以用在數(shù)字的表達(dá)式上。當(dāng)用戶在搜索datetime型數(shù)據(jù)時(shí),最好是使用關(guān)鍵詞like,因?yàn)橥暾膁atetime記錄包含各種各樣的日期組件。例如用戶在列arrival_time中加入一個(gè)值“9:20”,而子句wherearrival_time =“9:20”卻沒(méi)有發(fā)現(xiàn)它,因?yàn)镸ySQL把錄入的數(shù)據(jù)轉(zhuǎn)換成了“Jan1,19009:20AM”。然而子句wherearrival_timelike “%9:20%” 就能找到它。boolean_expression:返回“true”或“false”值的表達(dá)式。match_string:由字符和通配符組成的串,用單引號(hào)或雙引號(hào)引起來(lái),是匹配模式。通配符如下表所示: 符號(hào)意義: % 表示0或多個(gè)字符的字符串; _ 表示任何一個(gè)單個(gè)字符not:否定任何邏輯表達(dá)式,或是關(guān)鍵詞,如like,null,between等。groupby和having子句在select語(yǔ)句中使用,可以將表劃分成組并返回匹配having子句條件的組。語(yǔ)法:select語(yǔ)句開(kāi)頭groupbyallaggregate_free_expression,aggregate_free_expression*havingsearch_conditionsselect語(yǔ)句結(jié)尾groupby:指定表將劃分的組群,如果在select表項(xiàng)中包含集合函數(shù),則為各組計(jì)算一個(gè)總計(jì)值。這些總計(jì)值的結(jié)果以新的列顯示,而不是新的行。在having子句中用戶可以引用這些新的總計(jì)列。在groupby之前的select_list中可以使用avg、count、max、min和sum等集合函數(shù)。表可以被任意列的組合分組。all:在結(jié)果中包含所有組群的Transact-SQL擴(kuò)展,這里的所有組群甚至包括那些被where子句所排除的組群。如果同時(shí)使用having子句,將對(duì)all的意義進(jìn)行否定。aggregate_free_expression:不包含集合函數(shù)的表達(dá)式,Transact-SQL擴(kuò)展允許在用列名稱分組的同時(shí),用無(wú)集合函數(shù)的表達(dá)式分組。having:為groupby子句設(shè)置條件,類似于where為select語(yǔ)句設(shè)置條件的方法。having的查找條件可以包括集合函數(shù)表達(dá)式。除此之外,它的查找條件與where查找條件相同。orderby:按列排列結(jié)果。對(duì)select輸出的列可以用列名、列別名或列位置來(lái)引用。例如:selectidasmyid, nameasmynamefrommytablegroupbyid、selectidasmyid, nameasmynamefrommytablegroupbymyid、selectidasmyid, nameasmynamefrommytablegroupby1這三句是完全等價(jià)的。當(dāng)然,我們不贊成用第三種用法,這將給程序的可讀性帶來(lái)不好的影響。為了以降序排列,把DESC關(guān)鍵詞加到orderby子句中你要排序的列名前。缺省是升序,你也可以用ASC關(guān)鍵詞明確指定。limit子句:用來(lái)限制select語(yǔ)句返回的行數(shù)。limit取1個(gè)或2個(gè)數(shù)字參數(shù),如果給定2個(gè)參數(shù),第一個(gè)指定要返回的第一行的偏移量,第二個(gè)指定返回行的最大數(shù)目。初始行的偏移量是0(不是1)。如果給定一個(gè)參數(shù),它指出偏移量為0的返回行的最大數(shù)目。也就是說(shuō)limit5和limit0, 5完全等價(jià)。至于procedure關(guān)鍵詞的含義,我也沒(méi)搞得太清楚,好象是對(duì)存儲(chǔ)過(guò)程的支持,而MySQL本身不支持存儲(chǔ)過(guò)程,看來(lái)是為了將來(lái)擴(kuò)充的需要而保留的吧。MySQL創(chuàng)建計(jì)算字段1、字段字段與列含義差不多,數(shù)據(jù)庫(kù)列 一般叫列,字段一般是指計(jì)算字段2、拼接字段拼接將值連接到一起構(gòu)成單個(gè)值Concat()函數(shù)SELECT Concat(name,(,country,) AS title FROM company Order BY name;這里的AS title,是取別名,title就是計(jì)算字段3、執(zhí)行算數(shù)計(jì)算可以進(jìn)行加減乘除的運(yùn)算Select prod_num*prod_price,prod_name FROM products4、如何測(cè)試計(jì)算SELECT 3*2,將返回6SELECT NOW(),將返回現(xiàn)在時(shí)間mysql insert 語(yǔ)法INSERT LOW_PRIORITY |DELAYED| HIGH_PRIORITY IGNORE INTO tbl_name (col_name,.) VALUES (expr| DEFAULT, .),(.),. ON DUPLICATE KEY UPDATE col_name = expr, . 或:INSERT LOW_PRIORITY |DELAYED| HIGH_PRIORITY IGNORE INTO tbl_name SETcol_name = expr| DEFAULT, . ON DUPLICATE KEY UPDATE col_name = expr, . 或:INSERT LOW_PRIORITY | HIGH_PRIORITY IGNORE INTO tbl_name (col_name,.) SELECT . ON DUPLICATE KEY UPDATE col_name = expr, . 一、DELAYED的使用使用延遲插入操作DELAYED調(diào)節(jié)符用于INSERT和REPLACE語(yǔ)句。當(dāng)DELAYED插入操作到達(dá)的時(shí)候,服務(wù)器把數(shù)據(jù)行放入一個(gè)隊(duì)列中,并立即給客戶端返回一個(gè)狀態(tài)信息,這樣客戶端就可以在數(shù)據(jù)表被真正地插入記錄之前繼續(xù)進(jìn)行操作了。如果讀取者從該數(shù)據(jù)表中讀取數(shù)據(jù),隊(duì)列中的數(shù)據(jù)就會(huì)被保持著,直到?jīng)]有讀取者為止。接著服務(wù)器開(kāi)始插入延遲數(shù)據(jù)行(delayed-row)隊(duì)列中的數(shù)據(jù)行。在插入操作的同時(shí),服務(wù)器還要檢查是否有新的讀取請(qǐng)求到達(dá)和等待。如果有,延遲數(shù)據(jù)行隊(duì)列就被掛起,允許讀取者繼續(xù)操作。當(dāng)沒(méi)有讀取者的時(shí)候,服務(wù)器再次開(kāi)始插入延遲的數(shù)據(jù)行。這個(gè)過(guò)程一直進(jìn)行,直到隊(duì)列空了為止。幾點(diǎn)要注意事項(xiàng): INSERT DELAYED應(yīng)該僅用于指定值清單的INSERT語(yǔ)句。服務(wù)器忽略用于INSERT DELAYED.SELECT語(yǔ)句的DELAYED。 服務(wù)器忽略用于INSERT DELAYED.ON DUPLICATE UPDATE語(yǔ)句的DELAYED。 因?yàn)樵谛斜徊迦肭埃Z(yǔ)句立刻返回,所以您不能使用LAST_INSERT_ID()來(lái)獲取AUTO_INCREMENT值。AUTO_INCREMENT值可能由語(yǔ)句生成。 對(duì)于SELECT語(yǔ)句,DELAYED行不可見(jiàn),直到這些行確實(shí)被插入了為止。 DELAYED在從屬?gòu)?fù)制服務(wù)器中被忽略了,因?yàn)镈ELAYED不會(huì)在從屬服務(wù)器中產(chǎn)生與主服務(wù)器不一樣的數(shù)據(jù)。注意,目前在隊(duì)列中的各行只保存在存儲(chǔ)器中,直到它們被插入到表中為止。這意味著,如果您強(qiáng)行中止了mysqld(例如,使用kill -9)或者如果mysqld意外停止,則所有沒(méi)有被寫(xiě)入磁盤(pán)的行都會(huì)丟失。二、IGNORE的使用IGNORE是MySQL相對(duì)于標(biāo)準(zhǔn)SQL的擴(kuò)展。如果在新表中有重復(fù)關(guān)鍵字,或者當(dāng)STRICT模式啟動(dòng)后出現(xiàn)警告,則使用IGNORE控制ALTER TABLE的運(yùn)行。如果沒(méi)有指定IGNORE,當(dāng)重復(fù)關(guān)鍵字錯(cuò)誤發(fā)生時(shí),復(fù)制操作被放棄,返回前一步驟。如果指定了IGNORE,則對(duì)于有重復(fù)關(guān)鍵字的行,只使用第一行,其它有沖突的行被刪除。并且,對(duì)錯(cuò)誤值進(jìn)行修正,使之盡量接近正確值。insert ignore into tb (.) value(.)這樣不用校驗(yàn)是否存在了,有則忽略,無(wú)則添加三、ON DUPLICATE KEY UPDATE的使用如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個(gè)語(yǔ)句具有相同的效果:mysql INSERT INTO table (a, b, c) VALUES (1,2,3) - ON DUPLICATE KEY UPDATE c=c+1;Mysql UPDATE table SET c=c+1 WHERE a=1;如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。注釋:如果列b也是唯一列,則INSERT與此UPDATE語(yǔ)句相當(dāng):Mysql UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;如果a=1 OR b=2與多個(gè)行向匹配,則只有一個(gè)行被更新。通常,您應(yīng)該盡量避免對(duì)帶有多個(gè)唯一關(guān)鍵字的表使用ON DUPLICATE KEY子句。您可以在UPDATE子句中使用VALUES(col_name)函數(shù)從INSERT.UPDATE語(yǔ)句的INSERT部分引用列值。換句話說(shuō),如果沒(méi)有發(fā)生重復(fù)關(guān)鍵字沖突,則UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函數(shù)特別適用于多行插入。VALUES()函數(shù)只在INSERT.UPDATE語(yǔ)句中有意義,其它時(shí)候會(huì)返回NULL。示例:Mysql INSERT INTO table (a, b, c) VALUES (1, 2, 3), (4, 5, 6) -ON DUPLICATE KEY UPDATE c= VALUES (a) + VALUES (b);本語(yǔ)句與以下兩個(gè)語(yǔ)句作用相同:Mysql INSERT INTO table (a, b, c) VALUES (1, 2, 3) -ON DUPLICATE KEY UPDATE c=3;Mysql INSERT INTO table (a, b, c) VALUES (4, 5, 6) -ON DUPLICATE KEY UPDATE c=9;當(dāng)您使用ON DUPLICATE KEY UPDATE時(shí),DELAYED選項(xiàng)被忽略??偨Y(jié):DELAYED 作為快速插入,并不是很關(guān)心失效性,提高插入性能。 ignore 只關(guān)注主鍵對(duì)應(yīng)記錄是不存在,無(wú)則添加,有則忽略。 ON DUPLICATE KEY UPDATE 在添加時(shí)操作,關(guān)注非主鍵列,注意與ignor
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- YC/Z 604-2023卷煙產(chǎn)品條、箱包裝規(guī)格技術(shù)指南
- 菠蘿蛋白酶的制備Preparationofbromelai
- 氨基苷類藥物分析13課件
- 考研復(fù)習(xí)-風(fēng)景園林基礎(chǔ)考研試題帶答案詳解(新)
- 《三級(jí)醫(yī)院評(píng)審標(biāo)準(zhǔn)(2025年版)》
- 2023年上海市上海市普陀區(qū)宜川路街道招聘社區(qū)工作者真題附帶題目詳解
- 2025-2026年高校教師資格證之《高等教育法規(guī)》通關(guān)題庫(kù)附參考答案詳解(突破訓(xùn)練)
- 2025年河北省定州市輔警招聘考試試題題庫(kù)附答案詳解(鞏固)
- 2025年Z世代消費(fèi)趨勢(shì)與品牌創(chuàng)新?tīng)I(yíng)銷模式研究報(bào)告
- 2024年演出經(jīng)紀(jì)人之演出經(jīng)紀(jì)實(shí)務(wù)真題【考點(diǎn)梳理】
- 書(shū)畫(huà)培訓(xùn)合作合同范本
- 2025年電子商務(wù)基礎(chǔ)知識(shí)考試試題及答案
- 馬幫運(yùn)輸安全協(xié)議書(shū)
- 2025年安全生產(chǎn)考試題庫(kù)(礦業(yè)行業(yè)安全規(guī)范)試卷
- 中職數(shù)學(xué)拓展模塊課件-正弦型函數(shù)的圖像和性質(zhì)
- 國(guó)家憲法知識(shí)競(jìng)賽題庫(kù)題庫(kù)加答案下載
- 六年級(jí)學(xué)生心理疏導(dǎo)教育
- 國(guó)家開(kāi)放大學(xué)《藥物治療學(xué)(本)》形考作業(yè)1-4參考答案
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)2025年第一季度
- 成都設(shè)計(jì)咨詢集團(tuán)有限公司2025年社會(huì)公開(kāi)招聘(19人)筆試參考題庫(kù)附帶答案詳解
- 炎德·英才大聯(lián)考雅禮中學(xué) 2025 屆模擬試卷(一)物理試題及答案
評(píng)論
0/150
提交評(píng)論