




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、SQL詢語句大全集錦MYSQ直詢語句大全集錦一、簡單查詢簡單的Transact-SQL查詢只包括選擇列表、FROMF句和WHER子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。例如,下面的語句查詢testtable表中姓名為"張三”的nickname字段和email字段。復(fù)制內(nèi)容到剪貼板代碼:SELECT'nickname','email'FROM'testtable'WHERE'name'='張三'(一)選擇列表選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號(hào)、表達(dá)
2、式、變量(包括局部變量和全局變量)等構(gòu)成。1、選擇所有列例如,下面語句顯示testtable表中所有列的數(shù)據(jù):復(fù)制內(nèi)容到剪貼板代碼:SELECT*FROMtesttable2、選擇部分列并指定它們的顯示次序查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。例如:復(fù)制內(nèi)容到剪貼板代碼:SELECTnickname,emailFROMtesttable3、更改列標(biāo)題在選擇列表中,可重新指定列標(biāo)題。定義格式為:列標(biāo)題=列名列名列標(biāo)題如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識(shí)符格式時(shí),應(yīng)使用引號(hào)定界符,例如,下列語句使用漢字顯示列標(biāo)題:復(fù)制內(nèi)容到剪貼板代碼:SELECT昵稱=nickname,電子
3、郵件=emailFROMtesttable4、刪除重復(fù)行SELEC電句中使用ALL或DISTINCT選項(xiàng)來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)為ALL。使用DISTINCT選項(xiàng)時(shí),對(duì)于所有重復(fù)的數(shù)據(jù)行在SELEC夜回的結(jié)果集合中只保留一行。5、限制返回的行數(shù)使用TOPnPERCENT選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOPn說明返回n行,而TOPnPERCEN耐,說明n是表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。例如:復(fù)制內(nèi)容到剪貼板代碼:SELECTTOP2*FROM'testtable'復(fù)制內(nèi)容到剪貼板代碼:SELECTTOP20PERCENT*FROM
4、9;testtable'(二)FROM子句FROM?句指定SELEC砒句查詢及與查詢相關(guān)的表或視圖。在FROM?句中最多可指定256個(gè)表或視圖,它們之間用逗號(hào)分隔。在FROM?句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同日存在cityid歹U,在查詢兩個(gè)表中的cityid時(shí)應(yīng)使用下面語句格式加以限定:復(fù)制內(nèi)容到剪貼板代碼:SELECT'username',citytable.cityidFROM'usertable','citytable'
5、WHEREusertable.cityid=citytable.cityid在FROM?句中可用以下兩種格式為表或視圖指定別名:復(fù)制內(nèi)容到剪貼板代碼:表名as別名表名別名例如上面語句可用表的別名格式表示為:復(fù)制內(nèi)容到剪貼板代碼:SELECT'username',b.cityidFROMusertablea,citytablebWHEREa.cityid=b.cityidSELECT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語句所返回的結(jié)果集合中查詢數(shù)據(jù)。例如:復(fù)制內(nèi)容到剪貼板代碼:SELECTa.au_fname+a.au_lnameFROMauthorsa,titleau
6、thorta(SELECT'title_id','title'FROM'titles'WHERE'ytd_sales'10000)AStWHEREa.au_id=ta.au_idANDta.title_id=t.title_id此例中,將SELEC夜回的結(jié)果集合給予一別名t,然后再從中檢索數(shù)據(jù)。(三)使用WHER子句設(shè)置查詢條件WHER子句設(shè)置查詢條件,過濾掉不需要的數(shù)據(jù)彳To例如下面語句查詢年齡大于20的數(shù)據(jù):復(fù)制內(nèi)容到剪貼板代碼:SELECT*FROMusertableWHEREage20WHERE子句可包括各種條件運(yùn)算符:比
7、較運(yùn)算符(大小比較):、=、=、!、!=10ANDage復(fù)制內(nèi)容到剪貼板代碼:SELECT*FROM'usertable'ORDERBY'age'DESC,'userid'ASC另外,可以根據(jù)表達(dá)式進(jìn)行排序。二、聯(lián)合查詢UNION運(yùn)算符可以將兩個(gè)或兩個(gè)以上上SELEC期句的查詢結(jié)果集合合并成一個(gè)結(jié)果集合顯示,即執(zhí)行聯(lián)合查詢。UNION的語法格式為:復(fù)制內(nèi)容到剪貼板代碼:select_statementUNIONALLselectstatementUNIONALLselectstatement,n其中selectstatement為待聯(lián)合的SELE
8、CT詢語句。ALL選項(xiàng)表示將所有行合并到結(jié)果集合中。不指定該項(xiàng)時(shí),被聯(lián)合查詢結(jié)果集合中的重復(fù)行將只保留一行。聯(lián)合查詢時(shí),查詢結(jié)果的列標(biāo)題為第一個(gè)查詢語句的列標(biāo)題。因此,要定義列標(biāo)題必須在第一個(gè)查詢語句中定義。要對(duì)聯(lián)合查詢結(jié)果排序時(shí),也必須使用第一查詢語句中的列名、列標(biāo)題或者列序號(hào)。在使用UNION運(yùn)算符時(shí),應(yīng)保證每個(gè)聯(lián)合查詢語句的選擇列表中有相同數(shù)量的表達(dá)式,并且每個(gè)查詢選擇表達(dá)式應(yīng)具有相同的數(shù)據(jù)類型,或是可以自動(dòng)將它們轉(zhuǎn)換為相同的數(shù)據(jù)類型。在自動(dòng)轉(zhuǎn)換時(shí),對(duì)于數(shù)值類型,系統(tǒng)將低精度的數(shù)據(jù)類型轉(zhuǎn)換為高精度的數(shù)據(jù)類型。在包括多個(gè)查詢的UNIONS句中,其執(zhí)行順序是自左至右,使用括號(hào)可以改變這一執(zhí)行
9、順序。例如:查詢1UNION(查詢2UNION查詢3)三、連接查詢通過連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢。連接是關(guān)系數(shù)據(jù)庫模型的主要特點(diǎn),也是它區(qū)別于其它類型數(shù)據(jù)庫管理系統(tǒng)的一個(gè)標(biāo)志。在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中,表建立時(shí)各數(shù)據(jù)之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在一個(gè)表中。當(dāng)檢索數(shù)據(jù)時(shí),通過連接操作查詢出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶帶來很大的靈活性,他們可以在任何時(shí)候增加新的數(shù)據(jù)類型。為不同實(shí)體創(chuàng)建新的表,爾后通過連接進(jìn)行查詢。連接可以在SELECT語句的FROMF句或WHER子句中建立,似是而非在FROM?句中指出連接時(shí)有助于將連接操作與WHER子句中的搜索條件區(qū)分開來。所
10、以,在Transact-SQL中推薦使用這種方法。SQL-92標(biāo)準(zhǔn)所定義的FROMF句的連接語法格式為:代碼:FROMjoin_tablejoin_typejoin_tableON(join_condition)其中join_table指出參與連接操作的表名,連接可以對(duì)同一個(gè)表操作,也可以對(duì)多表操作,對(duì)同一個(gè)表操作的連接又稱做自連接。join_type指出連接類型,可分為三種:內(nèi)連接、外連接和交叉連接。內(nèi)連接(INNERJOIN)使用比較運(yùn)算符進(jìn)行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行。根據(jù)所使用的比較方式不同,內(nèi)連接又分為等值連接、自然連接和不等連接三種。外連接
11、分為左外連接(LEFTOUTERJOIlMLEFTJOIN)、右外連接(RIGHTOUTERJOIlMRIGHTJOIN)和全外連接(FULLOUTERJOIN或FULLJOIN)三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的數(shù)據(jù)行。交叉連接(CROSSJOIN)沒有WHERETO,它返回連接表中所有數(shù)據(jù)行的笛卡爾積,其結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。連接操彳中的ON(join_condition)子句指出連接條件,它由被連接表中的
12、列和比較運(yùn)算符、邏輯運(yùn)算符等構(gòu)成。無論哪種連接都不能對(duì)text、ntext和image數(shù)據(jù)類型列進(jìn)行直接連接,但可以對(duì)這三種列進(jìn)行間接連接。例如:代碼:SELECTp1.pub_id,p2.pub_id,p1.pr_infoFROMpub_infoASp1INNERJOINpub_infoASp2ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)內(nèi)連接內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。內(nèi)連接分三種:1、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,
13、包括其中的重復(fù)列。2、不等連接:在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包、=、!。3、自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社:代碼:SELECT*FROMauthorsASaINNERJOINpublishersASpONa.city=p.city又如使用自然連接,在選擇列表中刪除authors和publishers表中重復(fù)列(city和state)復(fù)制內(nèi)容到剪貼板代碼:S
14、ELECTa.*,p.pub_id,p.pub_name,p.countryFROMauthorsASaINNERJOINpublishersASpONa.city=p.city(二)外連接內(nèi)連接時(shí),返回查詢結(jié)果集合中的僅是符合查詢條件(WHERE搜索條件或HAVING條件)和連接條件的行。而采用外連接時(shí),它返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。如下面使用左外連接將論壇內(nèi)容和作者信息連接起來:代碼:SELECTa.*,b.*FROM'luntan'LEFTJOINusertable
15、asbONa.username=b.username下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:代碼:SELECTa.*,b.*FROMcityasaFULLOUTERJOINuserasbONa.username=b.username(三)交叉連接交叉連接不帶WHERE?句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數(shù)將等于6*8=48行。代碼:SELE
16、CT'type','pub_name'FROM'titles'CROSSJOIN'publishers'ORDERBY'type'SQL核心語句(非常實(shí)用的幾個(gè)技巧)_ArticleContent1_lblContent>插入數(shù)據(jù)向表中添加一個(gè)新記錄,你要使用SQLINSERT語句。這里有一個(gè)如何使用這種語句的例子:代碼:INSERTmytable(mycolumn)VALUES('somedata')這個(gè)語句把字符串somedata'插入表mytable的mycolumn字段中。將要
17、被插入數(shù)據(jù)的字段的名字在第一個(gè)括號(hào)中指定,實(shí)際的數(shù)據(jù)在第二個(gè)括號(hào)中給出。INSERT語句的完整句法如下:代碼:INSERTINTOtable_name|view_name(column_list)DEFAULTVALUES|Values_list|select_statement如果一個(gè)表有多個(gè)字段,通過把字段名和字段值用逗號(hào)隔開,你可以向所有的字段中插入數(shù)據(jù)。假設(shè)表mytable有三個(gè)字段first_column,second_column,和third_column。下面的INSERT語句添加了一條三個(gè)字段都有值的完整記錄:代碼:INSERTmytable(first_column,sec
18、ond_column,third_column)VALUES('somedata','somemoredata','yetmoredata')注意你可以使用INSERT語句向文本型字段中插入數(shù)據(jù)。但是,如果你需要輸入很長的字符串,你應(yīng)該使用WRITETEXT語句。這部分內(nèi)容對(duì)本書來說太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。如果彳在INSERT語句中只指定兩個(gè)字段和數(shù)據(jù)會(huì)怎么樣呢?換句話說,你向一個(gè)表中插入一條新記錄,但有一個(gè)字段沒有提供數(shù)據(jù)。在這種情況下,有下面的四種可能:如果該字段有一個(gè)缺省值,
19、該值會(huì)被使用。例如,假設(shè)你插入新記錄時(shí)沒有給字段third_column提供數(shù)據(jù),而這個(gè)字段有一個(gè)缺省值somevalue'。在這種情況下,當(dāng)新記錄建立時(shí)會(huì)插入值somevalue'。如果該字段可以接受空值,而且沒有缺省值,則會(huì)被插入空值。如果該字段不能接受空值,而且沒有缺省值,就會(huì)出現(xiàn)錯(cuò)誤。你會(huì)收到錯(cuò)誤信息:Thecolumnintablemytablemaynotbenull.最后,如果該字段是一個(gè)標(biāo)識(shí)字段,那么它會(huì)自動(dòng)產(chǎn)生一個(gè)新值。當(dāng)你向一個(gè)有標(biāo)識(shí)字段的表中插入新記錄時(shí),只要忽略該字段,標(biāo)識(shí)字段會(huì)給自己賦一個(gè)新值。注思向一個(gè)有標(biāo)識(shí)字段的表中插入新記錄后,你可以用SQL變量
20、identity來訪問新記錄的標(biāo)識(shí)字段的值??紤]如下的SQL語句:復(fù)制內(nèi)容到剪貼板代碼:INSERTmytable(first_column)VALUES('somevalue')codecodeINSERTanothertable(another_first,another_second)VALUES(idemy,'somevalue')如果表mytable有一個(gè)標(biāo)識(shí)字段,該字段的值會(huì)被插入表anothertable的another_first字段。這是因?yàn)樽兞縤dentity總是保存最后一次插入標(biāo)識(shí)字段的值。字段another_first應(yīng)該與字段first
21、_column有相同的數(shù)據(jù)類型。但是,字段another_first不能是應(yīng)該標(biāo)識(shí)字段。Another_first字段用來保存字段first_column的值。刪除記錄要從表中刪除一個(gè)或多個(gè)記錄,需要使用SQLDELET斑句。你可以給DELETE語句提供WHERETO。WHER子句用來選擇要?jiǎng)h除的記錄。例如,下面的這個(gè)DELETE句只刪除字段first_column的值等于DeleteMe'的記錄:代碼:DELETEmytableWHEREfirst_column='DeltetMe'DELETE語句的完整句法如下:復(fù)制內(nèi)容到剪貼板代碼:DELETEFROMtable_
22、name|view_nameWHEREclause在SQLSELECT語句中可以使用的任何條件者B可以在DELECT語句的WHER子句中使用。例如,下面的這個(gè)DELETED句只刪除那些first_column字段的值為goodbye'或second_column字段的值為solong'的記錄:代碼:DELETEmytableWHEREfirst_column='goodby'ORsecond_column='solong'如果你不給DELETE語句提供WHERE?句,表中的所有記錄都將被刪除。你不應(yīng)該有這種想法。如果你想刪除應(yīng)該表中的所有記錄,應(yīng)
23、使用第十章所講的TRUNCATETABLE句。注思為什么要用TRUNCATTABLE語句代替DELETED句?當(dāng)彳爾使用TRUNCATTABLE語句時(shí),記錄的刪除是不作記錄的。也就是說,這意味著TRUNCATETABL要比DELETE快得多。更新記錄要修改表中已經(jīng)存在的一條或多條記錄,應(yīng)使用SQLUPDAT的句。同DELETED句一樣,UPDAT的句可以使用WHERE子句來選擇更新特定的記錄。請(qǐng)看這個(gè)例子:代碼:UPDATEmytableSETfirst_column='Updated!"WHEREsecond_column=UpdateMe!'這個(gè)UPDATE語句更
24、新所有second_column字段的彳I為UpdateMe!的記錄。對(duì)所有被選中的記錄,字段first_column的值被置為'Updated!'。卜面是UPDATED句的完整句法:代碼:UPDATEtable_name|view_nameSETtable_name|view_namecolumn_list|variable_list|variable_and_column_list,column_list2|variable_list2|variable_and_column_list2,column_listN|variable_listN|variable_and_co
25、lumn_listNWHEREclause注意你可以對(duì)文本型字段使用UPDAT的句。但是,如果你需要更新很長的字符串,應(yīng)使用UPDATETEX語句。這部分內(nèi)容對(duì)本書來說太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。如果你不提供WHERETO,表中的所有記錄都將被更新。有時(shí)這是有用的。例如,如果你想把表titles中的所有書的價(jià)格加倍,你可以使用如下的UPDATE語句:你也可以同時(shí)更新多個(gè)字段。例如,下面的UPDATED句同日更新first_column,second_column,和third_column這三個(gè)字段:代碼:UPDATEmytable
26、SETfirst_column='Updated!"Second_column-Updated!'Third_column=Updated!'WHEREfirst_column='UpdateMe1'技巧SQL忽略語句中多余的空格。你可以把SQL語句寫成任何你最容易讀的格式。用SELECT創(chuàng)建t己錄和表你也許已經(jīng)注意到,INSERT語句與DELETED句和UPDAT的句有一點(diǎn)不同,它一次只操作一個(gè)記錄。然而,有一個(gè)方法可以使INSERT語句一次添加多個(gè)記錄。要作到這一點(diǎn),你需要把INSERT語句與SELECT語句結(jié)合起來,象這樣:代碼:INSE
27、RTmytable(first_column,second_column)SELECTanother_first,another_secondFROManothertableWHEREanother_first='CopyMe!'這個(gè)語句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為CopyMd'的記錄才被拷貝。當(dāng)為一個(gè)表中的記錄建立備份時(shí),這種形式的INSERT語句是非常有用的。在刪除一個(gè)表中的記錄之前,你可以先用這種方法把它們拷貝到另一個(gè)表中。如果你需要拷貝整個(gè)表,你可以使用SELECTINT
28、O語句。例如,下面的語句創(chuàng)建了一個(gè)名為newtable的新表,該表包含表mytable的所有數(shù)據(jù):代碼:SELECT*INTOnewtableFROMmytable你也可以指定只有特定的字段被用來創(chuàng)建這個(gè)新表。要做到這一點(diǎn),只需在字段列表中指定你想要拷貝的字段。另外,你可以使用WHERE?句來限制拷貝到新表中的記錄。下面的例子只拷貝字段second_columnd的值等于CopyMe!的記錄的first_column字段。代碼:SELECTfirst_columnINTOnewtableFROMmytableWHEREsecond_columri=CopyMe!'使用SQL修改已經(jīng)建立
29、的表是很困難的。例如,如果你向一個(gè)表中添加了一個(gè)字段,沒有容易的辦法來去除它。另外,如果你不小心把一個(gè)字段的數(shù)據(jù)類型給錯(cuò)了,你將沒有辦法改變它。但是,使用本節(jié)中講述的SQL語句,你可以繞過這兩個(gè)問題。例如,假設(shè)你想從一個(gè)表中刪除一個(gè)字段。使用SELECTNTO語句,你可以創(chuàng)建該表的一個(gè)拷貝,但不包含要?jiǎng)h除的字段。這使你既刪除了該字段,又保留了不想刪除的數(shù)據(jù)。如果你想改變一個(gè)字段的數(shù)據(jù)類型,你可以創(chuàng)建一個(gè)包含正確數(shù)據(jù)類型字段的新表。創(chuàng)建好該表后,你就可以結(jié)合使用UPDAT的句和SELECT語句,把原來表中的所有數(shù)據(jù)拷貝到新表中。通過這種方法,你既可以修改表的結(jié)構(gòu),又能保存原有的數(shù)據(jù)。_Artic
30、leContent1_lblContent>插入數(shù)據(jù)向表中添加一個(gè)新記錄,你要使用SQLINSERT語句。這里有一個(gè)如何使用這種語句的例子:復(fù)制內(nèi)容到剪貼板代碼:INSERTmytable(mycolumn)VALUES('somedata')這個(gè)語句把字符串somedata'插入表mytable的mycolumn字段中。將要被插入數(shù)據(jù)的字段的名字在第一個(gè)括號(hào)中指定,實(shí)際的數(shù)據(jù)在第二個(gè)括號(hào)中給出。INSERT語句的完整句法如下:復(fù)制內(nèi)容到剪貼板代碼:INSERTINTOtable_name|view_name(column_list)DEFAULTVALUES|V
31、alues_list|select_statement)如果一個(gè)表有多個(gè)字段,通過把字段名和字段值用逗號(hào)隔開,你可以向所有的字段中插入數(shù)據(jù)。假設(shè)表mytable有三個(gè)字段first_column,second_column,和third_column。下面的INSERT語句添加了一條三個(gè)字段都有值的完整記錄:復(fù)制內(nèi)容到剪貼板代碼:INSERTmytable(first_column,second_column,third_column)VALUES('somedata','somemoredata','yetmoredata')code注思你可以
32、使用INSERT語句向文本型字段中插入數(shù)據(jù)。但是,如果你需要輸入很長的字符串,你應(yīng)該使用WRITETEXT語句。這部分內(nèi)容對(duì)本書來說太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。如果彳在INSERT語句中只指定兩個(gè)字段和數(shù)據(jù)會(huì)怎么樣呢?換句話說,你向一個(gè)表中插入一條新記錄,但有一個(gè)字段沒有提供數(shù)據(jù)。在這種情況下,有下面的四種可能:如果該字段有一個(gè)缺省值,該值會(huì)被使用。例如,假設(shè)你插入新記錄時(shí)沒有給字段third_column提供數(shù)據(jù),而這個(gè)字段有一個(gè)缺省值somevalue'。在這種情況下,當(dāng)新記錄建立時(shí)會(huì)插入值somevalue'。
33、如果該字段可以接受空值,而且沒有缺省值,則會(huì)被插入空值。如果該字段不能接受空值,而且沒有缺省值,就會(huì)出現(xiàn)錯(cuò)誤。你會(huì)收到錯(cuò)誤信息:Thecolumnintablemytablemaynotbenull.最后,如果該字段是一個(gè)標(biāo)識(shí)字段,那么它會(huì)自動(dòng)產(chǎn)生一個(gè)新值。當(dāng)你向一個(gè)有標(biāo)識(shí)字段的表中插入新記錄時(shí),只要忽略該字段,標(biāo)識(shí)字段會(huì)給自己賦一個(gè)新值。注思向一個(gè)有標(biāo)識(shí)字段的表中插入新記錄后,你可以用SQL變量identity來訪問新記錄的標(biāo)識(shí)字段的值??紤]如下的SQL語句:codeINSERTmytable(first_column)VALUES('somevalue')復(fù)制內(nèi)容到剪貼板代
34、碼:INSERTanothertable(another_first,another_second)VALUES(identity,'somevalue')如果表mytable有一個(gè)標(biāo)識(shí)字段,該字段的值會(huì)被插入表anothertable的another_first字段。這是因?yàn)樽兞縤dentity總是保存最后一次插入標(biāo)識(shí)字段的值。字段another_first應(yīng)該與字段first_column有相同的數(shù)據(jù)類型。但是,字段another_first不能是應(yīng)該標(biāo)識(shí)字段。Another_first字段用來保存字段first_column的值。刪除記錄要從表中刪除一個(gè)或多個(gè)記錄,需要使
35、用SQLDELET斑句。你可以給DELETE語句提供WHERETO。WHER子句用來選擇要?jiǎng)h除的記錄。例如,下面的這個(gè)DELETE句只刪除字段first_column的值等于DeleteMe'的記錄:復(fù)制內(nèi)容到剪貼板代碼:DELETEmytableWHEREfirst_column='DeltetMe'DELETE語句的完整句法如下:復(fù)制內(nèi)容到剪貼板代碼:DELETEFROMtable_name|view_nameWHEREclause在SQLSELECT語句中可以使用的任何條件者B可以在DELECT語句的WHER子句中使用。例如,下面的這個(gè)DELETED句只刪除那些f
36、irst_column字段的值為goodbye'或second_column字段的值為solong'的記錄:復(fù)制內(nèi)容到剪貼板代碼:DELETEmytableWHEREfirst_column='goodby'ORsecond_column='solong'如果你不給DELETE語句提供WHERE?句,表中的所有記錄都將被刪除。你不應(yīng)該有這種想法。如果你想刪除應(yīng)該表中的所有記錄,應(yīng)使用第十章所講的TRUNCATETABLE句。注思為什么要用TRUNCATTABLE語句代替DELETED句?當(dāng)彳爾使用TRUNCATTABLE語句時(shí),記錄的刪除是不作記
37、錄的。也就是說,這意味著TRUNCATETABL要比DELETE快得多。更新記錄要修改表中已經(jīng)存在的一條或多條記錄,應(yīng)使用SQLUPDAT的句。同DELETED句一樣,UPDAT的句可以使用WHERE子句來選擇更新特定的記錄。請(qǐng)看這個(gè)例子:復(fù)制內(nèi)容到剪貼板代碼:UPDATEmytableSETfirst_column='Updated!"WHEREsecond_column=UpdateMe!'這個(gè)UPDATE語句更新所有second_column字段的彳I為UpdateMe!的記錄。對(duì)所有被選中的記錄,字段first_column的值被置為'Updated!
38、'。下面是UPDATED句的完整句法:復(fù)制內(nèi)容到剪貼板代碼:UPDATEtable_name|view_nameSETtable_name|view_namecolumn_list|variable_list|variable_and_column_list,column_list2|variable_list2|variable_and_column_list2,column_listN|variable_listN|variable_and_column_listNWHEREclause注意你可以對(duì)文本型字段使用UPDAT的句。但是,如果你需要更新很長的字符串,應(yīng)使用UPDATET
39、EX語句。這部分內(nèi)容對(duì)本書來說太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。如果你不提供WHERETO,表中的所有記錄都將被更新。有時(shí)這是有用的。例如,如果你想把表titles中的所有書的價(jià)格加倍,你可以使用如下的UPDATE語句:你也可以同時(shí)更新多個(gè)字段。例如,下面的UPDATED句同日更新first_column,second_column,和third_column這三個(gè)字段:復(fù)制內(nèi)容到剪貼板代碼:UPDATEmytableSETfirst_column='Updated!"Second_column-Updated!'
40、;Third_column='Updated!'WHREfirst_column='UpdateMe1'技巧SQL忽略語句中多余的空格。你可以把SQL語句寫成任何你最容易讀的格式。用SELECT創(chuàng)建t己錄和表你也許已經(jīng)注意到,INSERT語句與DELETED句和UPDAT的句有一點(diǎn)不同,它一次只操作一個(gè)記錄。然而,有一個(gè)方法可以使INSERT語句一次添加多個(gè)記錄。要作到這一點(diǎn),你需要把INSERT語句與SELECT語句結(jié)合起來,象這樣:復(fù)制內(nèi)容到剪貼板代碼:INSERTmytable(first_column,second_column)SELECTanothe
41、r_first,another_secondFROManothertableWHEREanother_first='CopyMe!'這個(gè)語句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為CopyMd'的記錄才被拷貝。當(dāng)為一個(gè)表中的記錄建立備份時(shí),這種形式的INSERT語句是非常有用的。在刪除一個(gè)表中的記錄之前,你可以先用這種方法把它們拷貝到另一個(gè)表中。如果你需要拷貝整個(gè)表,你可以使用SELECTINTO語句。例如,下面的語句創(chuàng)建了一個(gè)名為newtable的新表,該表包含表mytable的所有數(shù)據(jù):
42、復(fù)制內(nèi)容到剪貼板代碼:SELECT*INTOnewtableFROMmytable你也可以指定只有特定的字段被用來創(chuàng)建這個(gè)新表。要做到這一點(diǎn),只需在字段列表中指定你想要拷貝的字段。另外,你可以使用WHERE?句來限制拷貝到新表中的記錄。下面的例子只拷貝字段second_columnd的值等于CopyMe!的記錄的first_column字段。復(fù)制內(nèi)容到剪貼板代碼:SELECTfirst_columnINTOnewtableFROMmytableWHEREsecond_columri=CopyMe!'使用SQL修改已經(jīng)建立的表是很困難的。例如,如果你向一個(gè)表中添加了一個(gè)字段,沒有容易的辦
43、法來去除它。另外,如果你不小心把一個(gè)字段的數(shù)據(jù)類型給錯(cuò)了,你將沒有辦法改變它。但是,使用本節(jié)中講述的SQL語句,你可以繞過這兩個(gè)問題。例如,假設(shè)你想從一個(gè)表中刪除一個(gè)字段。使用SELECTNTO語句,你可以創(chuàng)建該表的一個(gè)拷貝,但不包含要?jiǎng)h除的字段。這使你既刪除了該字段,又保留了不想刪除的數(shù)據(jù)。如果你想改變一個(gè)字段的數(shù)據(jù)類型,你可以創(chuàng)建一個(gè)包含正確數(shù)據(jù)類型字段的新表。創(chuàng)建好該表后,你就可以結(jié)合使用UPDAT的句和SELECT語句,把原來表中的所有數(shù)據(jù)拷貝到新表中。通過這種方法,你既可以修改表的結(jié)構(gòu),又能保存原有的數(shù)據(jù)。SQL語法,SQL語句大全,SQL基礎(chǔ)SQL語法參考手冊(cè)(SQL)/數(shù)據(jù)類型2
44、006-07-2407:42SQL語法參考手冊(cè)(SQL)»DB2提供了關(guān)連式資料庫的查詢語言SQL(StructuredQueryLanguage),是一種非常口語化、既易學(xué)又易懂的語法。此一語言幾乎是每個(gè)資料庫系統(tǒng)都必須提供的,用以表示關(guān)連式的*作,包含了資料的定義(DDL)以及資料的處理(DML)。SQL原來拼成SEQUEL這語言的原型以“系統(tǒng)R”的名字在舊M圣荷西實(shí)驗(yàn)室完成,經(jīng)過舊M內(nèi)部及其他的許多使用性及效率測(cè)試,其結(jié)果相當(dāng)令人滿意,并決定在系統(tǒng)R的技術(shù)基礎(chǔ)發(fā)展出來舊M的產(chǎn)品。而且美國國家標(biāo)準(zhǔn)學(xué)會(huì)(ANSI)及國際標(biāo)準(zhǔn)化組織(ISO)在1987遵循一個(gè)幾乎是以舊MSQL為基礎(chǔ)
45、的標(biāo)準(zhǔn)關(guān)連式資料語言定義。一、資料定義DDL(DataDefinitionLanguage)資料定語言是指對(duì)資料的格式和形態(tài)下定義的語言,他是每個(gè)資料庫要建立時(shí)候時(shí)首先要面對(duì)的,舉凡資料分哪些表格關(guān)系、表格內(nèi)的有什麼欄位主鍵、表格和表格之間互相參考的關(guān)系等等,都是在開始的時(shí)候所必須規(guī)劃好的。1、建表格:CreateTABLEtable_name(columnlDATATYPENOTNULLNOTNULLPRIMARYKEY,column2DATATYPENOTNULL,.)說明:DATATYPE-是資料的格式,詳見表。NUTNULL-可不可以允許資料有空的(尚未有資料填入)。PRIMARYKE
46、Y是本表的主鍵。2、更改表格AlterTABLEtable_nameADDCOLUMNcolumn_nameDATATYPE說明:增加一個(gè)欄位(沒有刪除某個(gè)欄位的語法。AlterTABLEtable_nameADDPRIMARYKEY(column_name)說明:更改表得的定義把某個(gè)欄位設(shè)為主鍵。AlterTABLEtable_nameDropPRIMARYKEY(column_name)說明:把主鍵的定義刪除。3、建立索引CreateINDEXindex_nameONtable_name(column_name)說明:對(duì)某個(gè)表格的欄位建立索引以增加查詢時(shí)的速度。4、刪除Droptable_
47、nameDropindex_name二、的資料形態(tài)DATATYPESsmallint16位元的整數(shù)。interger32位元的整數(shù)。decimal(p,s)p精確值和s大小的十進(jìn)位整數(shù),精確值p是指全部有幾個(gè)數(shù)(digits)大小值,s是指小數(shù)點(diǎn)彳麥有幾位數(shù)。如果沒有特別指定,則系統(tǒng)會(huì)設(shè)為p=5;s=0。float32位元的實(shí)數(shù)。double64位元的實(shí)數(shù)。char(n)n長度的字串,n不能超過254。varchar(n)長度不固定且其最大長度為n的字串,n不能超過4000。graphic(n)和char(n)一樣,不過其單位是兩個(gè)字元double-bytes,n不能超過127。這個(gè)形態(tài)是為了
48、支援兩個(gè)字元長度的字體,例如中文字。vargraphic(n)可變長度且其最大長度為n的雙字元字串,n不能超過2000。date包含了年份、月份、日期。time包含了小時(shí)、分鐘、秒。timestamp包含了年、月、日、時(shí)、分、秒、千分之一秒。三、資料*作DMLDDataManipulationLanguage)資料定義好之彳麥接下來的就是資料的*作。資料的*作不外乎增加資料(insert)、查詢資料(query)、更改資料(update)、刪除資料(delete)四種模式,以下分別介紹他們的語法:1、增加資料:InsertINTOtable_name(column1,column2,)valu
49、eS(value1,value2,.)說明:1 .若沒有指定column系統(tǒng)則會(huì)按表格內(nèi)的欄位順序填入資料。2 .欄位的資料形態(tài)和所填入的資料必須吻合。3 .table_name也可以是景觀view_name。InsertINTOtable_name(column1,column2,)Selectcolumnx,columny,FROManother_table說明:也可以經(jīng)過一個(gè)子查詢(subquery)把別的表格的資料填入。2、查詢資料:基本查詢Selectcolumn1,columns2,FROMtable_name說明:把table_name的特定欄位資料全部列出來Select*FRO
50、Mtable_nameWherecolumn1=xxxANDcolumn2>yyyORcolumn3zzz說明:1 .'*'表示全部的欄位都列出來。2 .Where之彳麥?zhǔn)墙訔l件式,把符合條件的資料列出來。Selectcolumn1,column2FROMtable_nameorDERBYcolumn2DESC說明:ORDERBY指定以某個(gè)欄位做排序,DESC是指從大到小排列,若沒有指明,則是從小到大排列組合查詢組合查詢是指所查詢得資料來源并不只有單一的表格,而是聯(lián)合一個(gè)以上的表格才能夠得到結(jié)果的。Select*FROMtable1,table2Wheretable1.c
51、olum1=table2.column1說明:1 .查詢兩個(gè)表格中其中column1值相同的資料。2 .當(dāng)然兩個(gè)表格相互比較的欄位,其資料形態(tài)必須相同。3 .一個(gè)復(fù)雜的查詢其動(dòng)用到的表格可能會(huì)很多個(gè)。整合性的查詢:SelectCOUNT(*)FROMtable_nameWherecolumn_name=xxx說明:查詢符合條件的資料共有幾筆。SelectSUM(columnl)FROMtable_name說明:1 .計(jì)算出總和,所選的欄位必須是可數(shù)的數(shù)字形態(tài)。2 .除此以外還有AVG()是計(jì)算平均、MAX()、MIN()計(jì)算最大最小值的整合性查詢。Selectcolumn1,AVG(colum
52、n2)FROMtable_nameGROUPBYcolumn1HAVINGAVG(column2)>xxx說明:1 .GROUPBY:以column1為一組計(jì)算column2的平均值必須和AVG、SUM整合性查詢的關(guān)鍵字一起使用。2 .HAVING:必須和GROUPBY一起使用作為整合性的限制。復(fù)合性的查詢Select*FROMtable_name1WhereEXISTS(Select*FROMtable_name2Whereconditions)說明:1 .Where的conditions可以是另外一個(gè)的query。2 .EXISTS在此是指存在與否。Select*FROMtable_
53、name1Wherecolumn1IN(Selectcolumn1FROMtable_name2Whereconditions)說明:1. IN彳麥面接的是一個(gè)集合,表示column1存在集合里面。2. Select出來的資料形態(tài)必須符合column1。其他查詢Select*FROMtable_name1Wherecolumn1LIKE'x%說明:LIKE必須和彳麥面的x%相呼應(yīng)表示以x為開頭的字串。Select*FROMtable_name1Wherecolumn1IN('xxx','yyy',.)說明:IN彳麥面接的是一個(gè)集合,表示column1存在
54、集合里面。Select*FROMtable_name1Wherecolumn1BETWEENxxANDyy說明:BETWEEN示column1的值介於xx和yy之間。3、更改資料:Updatetable_nameSETcolumn1='xxx'Whereconditoins說明:1 .更改某個(gè)欄位設(shè)定其值為xxx'。2 .conditions是所要符合的條件、若沒有Where則整個(gè)table的那個(gè)欄位都會(huì)全部被更改。4、刪除資料:DeleteFROMtable_nameWhereconditions說明:刪除符合條件的資料。說明:關(guān)于Where條件后面如果包含有日期的比
55、較,不同數(shù)據(jù)庫有不同的表達(dá)式。具體如下:(1)如果是ACCES激據(jù)庫,則為:Wheremydate>#2000-01-01#(2)如果是ORACL嗽據(jù)庫,貝U為:Wheremydate>cast('2000-01-01'asdate)或:Wheremydate>to_date('2000-01-01','yyyy-mm-dd')在Delphi中寫成:thedate='2000-01-01';query1.SQL.add('select*fromabcwheremydate>cast('+
56、39;'''+thedate+''''+'asdate)');如果比較日期時(shí)間型,則為:Wheremydatetime>to_date('2000-01-0110:00:01','yyyy-mm-ddhh24:mi:ss')Recordset對(duì)象一些有用的屬性"/>引用來自增加一個(gè):Recordset對(duì)象一些有用的屬性rs.CursorType=rs.CursorLocation=rs.LockType=rs.CacheSize=rs.Pagesize=rs.Pagec
57、ount=rs.RecordCount=CursorTypeValuesConstadOpenForwardOnly=0僅向前ConstadOpenKeyset=1鍵集游標(biāo)ConstadOpenDynamic=2動(dòng)態(tài)游標(biāo)ConstadOpenStatic=3靜態(tài)游標(biāo)''-LockTypeValues-ConstadLockReadOnly=1默認(rèn)值,只讀ConstadLockPessimistic=2保守式記錄鎖定ConstadLockOptimistic=3開放式記錄鎖定,只在調(diào)用Update方法時(shí)鎖定記錄ConstadLockBatchOptimistic=4開放式批更新C
58、ursorLocationValuesConstadUseServer=2ConstadUseClient=3Setrs=Server.CreateObject("ADODB.Rrecordset")rs.Open.sqlst,conn,1,1'讀取rs.Opensqlst,conn,1,2'新增,修改,或刪除)下一頁:SQLSERVER勺數(shù)據(jù)類型>>>我想分頁!-這么長的文章,在這里來個(gè)分頁多好??!哈哈SQLSERVER勺數(shù)據(jù)類型1.SQLSERVER勺數(shù)據(jù)類型數(shù)據(jù)類弄是數(shù)據(jù)的一種屬性,表示數(shù)據(jù)所表示信息的類型。任何一種計(jì)算機(jī)語言都定義了自己的數(shù)據(jù)類型。當(dāng)然,不同的程序語言都具有不同的特點(diǎn),所定義的數(shù)據(jù)類型的各類和名稱都或
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 院內(nèi)美化合同協(xié)議書5篇
- 2025年榆林普通貨運(yùn)從業(yè)資格證模擬考試
- 2025年大理貨運(yùn)員初級(jí)考試題庫
- 2025年高中化學(xué)新教材同步 必修第一冊(cè) 第4章 第3節(jié) 第2課時(shí) 化學(xué)鍵 分子間作用力
- 107-廣播對(duì)講系統(tǒng)
- 空間環(huán)境監(jiān)測(cè)系統(tǒng)產(chǎn)業(yè)分析報(bào)告
- 個(gè)人汽車公用租賃合同范本
- 勞務(wù)派遣住宿合同范本
- 中學(xué)化學(xué)教學(xué)工作總結(jié)
- 個(gè)人自查自糾整改報(bào)告
- 林規(guī)發(fā)〔2016〕58號(hào)防護(hù)林造林工程投資估算指標(biāo)
- 非公開發(fā)行公司債券的法律意見書模版
- 汽車空調(diào)技術(shù)與維修教案
- 城市軌道交通乘客服務(wù)課件(完整版)
- 圍手術(shù)期肺部感染
- 北師大版語文選修《蕭蕭》ppt課件1
- 大學(xué)生職業(yè)素養(yǎng)課件-5第五單元學(xué)會(huì)有效溝通-PPT課件
- 煤礦2021年重大安全風(fēng)險(xiǎn)分析預(yù)判防控報(bào)告全文
- 《傷逝》_魯迅課件__大學(xué)語文(基礎(chǔ)教育)
- 《談骨氣》課文閱讀(共2頁)
- 高考成績證明模板
評(píng)論
0/150
提交評(píng)論