版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGESQL查詢語(yǔ)句大全集錦MYSQL查詢語(yǔ)句大全集錦1:使用SHOW語(yǔ)句找出在服務(wù)器上當(dāng)前存在什么數(shù)據(jù)庫(kù):mysql>SHOWDATABASES;2:2、創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)MYSQLDATAmysql>CREATEDATABASEMYSQLDATA;3:選擇你所創(chuàng)建的數(shù)據(jù)庫(kù)mysql>USEMYSQLDATA;(按回車鍵出現(xiàn)Databasechanged時(shí)說(shuō)明操作成功!)4:查看現(xiàn)在的數(shù)據(jù)庫(kù)中存在什么表mysql>SHOWTABLES;5:創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表mysql>CREATETABLEMYTABLE(nameVARCHAR(20),sexCHAR(1));6:顯示表的結(jié)構(gòu):mysql>DESCRIBEMYTABLE;7:往表中加入記錄mysql>insertintoMYTABLEvalues(”hyq”,”M”);8:用文本方式將數(shù)據(jù)裝入數(shù)據(jù)庫(kù)表中(例如D:/mysql.txt)mysql>LOADDATALOCALINFILE“D:/mysql.txt”INTOTABLEMYTABLE;9:導(dǎo)入.sql文件命令(例如D:/mysql.sql)mysql>usedatabase;mysql>sourced:/mysql.sql;10:刪除表mysql>dropTABLEMYTABLE;11:清空表mysql>deletefromMYTABLE;12:更新表中數(shù)據(jù)mysql>updateMYTABLEsetsex=”f”wherename=’hyq’;以下是無(wú)意中在網(wǎng)絡(luò)看到的使用MySql的管理心得,在windows中MySql以服務(wù)形式存在,在使用前應(yīng)確保此服務(wù)已經(jīng)啟動(dòng),未啟動(dòng)可用netstartmysql命令啟動(dòng)。而Linux中啟動(dòng)時(shí)可用“/etc/rc.d/init.d/mysqldstart”命令,注意啟動(dòng)者應(yīng)具有管理員權(quán)限。剛安裝好的MySql包含一個(gè)含空密碼的root帳戶和一個(gè)匿名帳戶,這是很大的安全隱患,對(duì)于一些重要的應(yīng)用我們應(yīng)將安全性盡可能提高,在這里應(yīng)把匿名帳戶刪除、root帳戶設(shè)置密碼,可用如下命令進(jìn)行:usemysql;deletefromUserwhereUser=”";updateUsersetPassword=PASSWORD(’newpassword’)whereUser=’root’;如果要對(duì)用戶所用的登錄終端進(jìn)行限制,可以更新User表中相應(yīng)用戶的Host字段,在進(jìn)行了以上更改后應(yīng)重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù),此時(shí)登錄時(shí)可用如下類似命令:mysql-uroot-p;mysql-uroot-pnewpassword;mysqlmydb-uroot-p;mysqlmydb-uroot-pnewpassword;上面命令參數(shù)是常用參數(shù)的一部分,詳細(xì)情況可參考文檔。此處的mydb是要登錄的數(shù)據(jù)庫(kù)的名稱。在進(jìn)行開發(fā)和實(shí)際應(yīng)用中,用戶不應(yīng)該只用root用戶進(jìn)行連接數(shù)據(jù)庫(kù),雖然使用root用戶進(jìn)行測(cè)試時(shí)很方便,但會(huì)給系統(tǒng)帶來(lái)重大安全隱患,也不利于管理技術(shù)的提高。我們給一個(gè)應(yīng)用中使用的用戶賦予最恰當(dāng)?shù)臄?shù)據(jù)庫(kù)權(quán)限。如一個(gè)只進(jìn)行數(shù)據(jù)插入的用戶不應(yīng)賦予其刪除數(shù)據(jù)的權(quán)限。MySql的用戶管理是通過(guò)User表來(lái)實(shí)現(xiàn)的,添加新用戶常用的方法有兩個(gè),一是在User表插入相應(yīng)的數(shù)據(jù)行,同時(shí)設(shè)置相應(yīng)的權(quán)限;二是通過(guò)GRANT命令創(chuàng)建具有某種權(quán)限的用戶。其中GRANT的常用用法如下:grantallonmydb.*toNewUserName@HostNameidentifiedby“password”;grantusageon*.*toNewUserName@HostNameidentifiedby“password”;grantselect,insert,updateonmydb.*toNewUserName@HostNameidentifiedby“password”;grantupdate,deleteonmydb.TestTabletoNewUserName@HostNameidentifiedby“password”;若要給此用戶賦予他在相應(yīng)對(duì)象上的權(quán)限的管理能力,可在GRANT后面添加WITHGRANTOPTION選項(xiàng)。而對(duì)于用插入U(xiǎn)ser表添加的用戶,Password字段應(yīng)用PASSWORD函數(shù)進(jìn)行更新加密,以防不軌之人竊看密碼。對(duì)于那些已經(jīng)不用的用戶應(yīng)給予清除,權(quán)限過(guò)界的用戶應(yīng)及時(shí)回收權(quán)限,回收權(quán)限可以通過(guò)更新User表相應(yīng)字段,也可以使用REVOKE操作。下面給出本人從其它資料()獲得的對(duì)常用權(quán)限的解釋:全局管理權(quán)限:FILE:在MySQL服務(wù)器上讀寫文件。PROCESS:顯示或殺死屬于其它用戶的服務(wù)線程。RELOAD:重載訪問(wèn)控制表,刷新日志等。SHUTDOWN:關(guān)閉MySQL服務(wù)。數(shù)據(jù)庫(kù)/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限:ALTER:修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引。CREATE:建立新的數(shù)據(jù)庫(kù)或數(shù)據(jù)表。DELETE:刪除表的記錄。DROP:刪除數(shù)據(jù)表或數(shù)據(jù)庫(kù)。INDEX:建立或刪除索引。INSERT:增加表的記錄。SELECT:顯示/搜索表的記錄。UPDATE:修改表中已存在的記錄。特別的權(quán)限:ALL:允許做任何事(和root一樣)。USAGE:只允許登錄–其它什么也不允許做。
一、簡(jiǎn)單查詢
簡(jiǎn)單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說(shuō)明所查詢列、查詢的
表或視圖、以及搜索條件等。
例如,下面的語(yǔ)句查詢testtable表中姓名為“張三”的nickname字段和email字段。
復(fù)制內(nèi)容到剪貼板
代碼:SELECT`nickname`,`email`FROM`testtable`WHERE`name`='張三'
(一)選擇列表
選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號(hào)、表達(dá)式、變量(包括局部變量和全局變量)等構(gòu)成。
1、選擇所有列
例如,下面語(yǔ)句顯示testtable表中所有列的數(shù)據(jù):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT*FROMtesttable
2、選擇部分列并指定它們的顯示次序
查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECTnickname,emailFROMtesttable
3、更改列標(biāo)題
在選擇列表中,可重新指定列標(biāo)題。定義格式為:
列標(biāo)題=列名
列名列標(biāo)題
如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識(shí)符格式時(shí),應(yīng)使用引號(hào)定界符,例如,下列語(yǔ)句使用漢字顯示列
標(biāo)題:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT昵稱=nickname,電子郵件=email
FROMtesttable
4、刪除重復(fù)行
SELECT語(yǔ)句中使用ALL或DISTINCT選項(xiàng)來(lái)顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)
為ALL。使用DISTINCT選項(xiàng)時(shí),對(duì)于所有重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。
5、限制返回的行數(shù)
使用TOPn[PERCENT]選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOPn說(shuō)明返回n行,而TOPnPERCENT時(shí),說(shuō)明n是
表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECTTOP2*FROM`testtable`
復(fù)制內(nèi)容到剪貼板
代碼:SELECTTOP20PERCENT*FROM`testtable`
(二)FROM子句
FROM子句指定SELECT語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,
它們之間用逗號(hào)分隔。
在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列
所屬的表或視圖。例如在usertable和citytable表中同時(shí)存在cityid列,在查詢兩個(gè)表中的cityid時(shí)應(yīng)
使用下面語(yǔ)句格式加以限定:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT`username`,citytable.cityid
FROM`usertable`,`citytable`
WHEREusertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:
復(fù)制內(nèi)容到剪貼板
代碼:表名as別名
表名別名例如上面語(yǔ)句可用表的別名格式表示為:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT`username`,b.cityid
FROMusertablea,citytableb
WHEREa.cityid=b.cityidSELECT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語(yǔ)句所返回的結(jié)果集合中查詢數(shù)據(jù)。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECTa.au_fname+a.au_lname
FROMauthorsa,titleauthorta
(SELECT`title_id`,`title`
FROM`titles`
WHERE`ytd_sales`>10000
)ASt
WHEREa.au_id=ta.au_id
ANDta.title_id=t.title_id此例中,將SELECT返回的結(jié)果集合給予一別名t,然后再?gòu)闹袡z索數(shù)據(jù)。
(三)使用WHERE子句設(shè)置查詢條件
WHERE子句設(shè)置查詢條件,過(guò)濾掉不需要的數(shù)據(jù)行。例如下面語(yǔ)句查詢年齡大于20的數(shù)據(jù):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT*FROMusertableWHEREage>20WHERE子句可包括各種條件運(yùn)算符:
比較運(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è)以上上SELECT語(yǔ)句的查詢結(jié)果集合合并成一個(gè)結(jié)果集合顯示,即執(zhí)行聯(lián)
合查詢。
UNION的語(yǔ)法格式為:
復(fù)制內(nèi)容到剪貼板
代碼:select_statement
UNION[ALL]selectstatement
[UNION[ALL]selectstatement][…n]其中selectstatement為待聯(lián)合的SELECT查詢語(yǔ)句。
ALL選項(xiàng)表示將所有行合并到結(jié)果集合中。不指定該項(xiàng)時(shí),被聯(lián)合查詢結(jié)果集合中的重復(fù)行將只保留一行。
聯(lián)合查詢時(shí),查詢結(jié)果的列標(biāo)題為第一個(gè)查詢語(yǔ)句的列標(biāo)題。因此,要定義列標(biāo)題必須在第一個(gè)查詢語(yǔ)
句中定義。要對(duì)聯(lián)合查詢結(jié)果排序時(shí),也必須使用第一查詢語(yǔ)句中的列名、列標(biāo)題或者列序號(hào)。
在使用UNION運(yùn)算符時(shí),應(yīng)保證每個(gè)聯(lián)合查詢語(yǔ)句的選擇列表中有相同數(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è)查詢的UNION語(yǔ)句中,其執(zhí)行順序是自左至右,使用括號(hào)可以改變這一執(zhí)行順序。例如:
查詢1UNION(查詢2UNION查詢3)
三、連接查詢
通過(guò)連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢。連接是關(guān)系數(shù)據(jù)庫(kù)模型的主要特點(diǎn),也是它區(qū)別于其它類型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)標(biāo)志。
在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,表建立時(shí)各數(shù)據(jù)之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在
一個(gè)表中。當(dāng)檢索數(shù)據(jù)時(shí),通過(guò)連接操作查詢出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶帶
來(lái)很大的靈活性,他們可以在任何時(shí)候增加新的數(shù)據(jù)類型。為不同實(shí)體創(chuàng)建新的表,爾后通過(guò)連接進(jìn)行
查詢。
連接可以在SELECT語(yǔ)句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時(shí)有助于
將連接操作與WHERE子句中的搜索條件區(qū)分開來(lái)。所以,在Transact-SQL中推薦使用這種方法。
SQL-92標(biāo)準(zhǔn)所定義的FROM子句的連接語(yǔ)法格式為:
代碼:FROMjoin_tablejoin_typejoin_table[ON(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)連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFTOUTERJOIN或LEFTJOIN)、右外連接(RIGHTOUTERJOIN或RIGHTJOIN)
和全外連接(FULLOUTERJOIN或FULLJOIN)三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的數(shù)據(jù)行。
交叉連接(CROSSJOIN)沒(méi)有WHERE子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積,其結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。
連接操作中的ON(join_condition)子句指出連接條件,它由被連接表中的列和比較運(yùn)算符、邏輯運(yùn)算符等構(gòu)成。
無(wú)論哪種連接都不能對(duì)text、ntext和image數(shù)據(jù)類型列進(jìn)行直接連接,但可以對(duì)這三種列進(jìn)行間接連接。例如:
代碼:SELECTp1.pub_id,p2.pub_id,p1.pr_info
FROMpub_infoASp1INNERJOINpub_infoASp2
ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)內(nèi)連接
內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。
內(nèi)連接分三種:
1、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。
2、不等連接:在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括>、>=、、!。
3、自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社:
代碼:SELECT*
FROMauthorsASaINNERJOINpublishersASp
ONa.city=p.city又如使用自然連接,在選擇列表中刪除authors和publishers表中重復(fù)列(city和state):
復(fù)制內(nèi)容到剪貼板
代碼:SELECTa.*,p.pub_id,p.pub_name,p.country
FROMauthorsASaINNERJOINpublishersASp
ONa.city=p.city
(二)外連接內(nèi)連接時(shí),返回查詢結(jié)果集合中的僅是符合查詢條件(WHERE搜索條件或HAVING條件)和連接條件
的行。而采用外連接時(shí),它返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。如下面使用左外連接將論壇內(nèi)容和作者信息連接起來(lái):
代碼:SELECTa.*,b.*FROM`luntan`LEFTJOINusertableasb
ONa.username=b.username下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
代碼:SELECTa.*,b.*
FROMcityasaFULLOUTERJOINuserasb
ONa.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行。
代碼:SELECT`type`,`pub_name`
FROM`titles`CROSSJOIN`publishers`
ORDERBY`type`
SQL核心語(yǔ)句(非常實(shí)用的幾個(gè)技巧)
_ArticleContent1_lblContent>插入數(shù)據(jù)
向表中添加一個(gè)新記錄,你要使用SQLINSERT語(yǔ)句。這里有一個(gè)如何使用這種語(yǔ)句的例子:
代碼:INSERTmytable(mycolumn)VALUES(‘somedata’)這個(gè)語(yǔ)句把字符串’somedata’插入表mytable的mycolumn字段中。將要被插入數(shù)據(jù)的字段的名字在第一個(gè)括號(hào)中指定,實(shí)際的數(shù)據(jù)在第二個(gè)括號(hào)中給出。
INSERT語(yǔ)句的完整句法如下:
代碼:INSERT[INTO]{table_name|view_name}[(column_list)]{DEFAULTVALUES|
Values_list|select_statement}如果一個(gè)表有多個(gè)字段,通過(guò)把字段名和字段值用逗號(hào)隔開,你可以向所有的字段中插入數(shù)據(jù)。假設(shè)表mytable有三個(gè)字段first_column,second_column,和third_column。下面的INSERT語(yǔ)句添加了一條三個(gè)字段都有值的完整記錄:
代碼:INSERTmytable(first_column,second_column,third_column)
VALUES(‘somedata’,’somemoredata’,’yetmoredata’)注意
你可以使用INSERT語(yǔ)句向文本型字段中插入數(shù)據(jù)。但是,如果你需要輸入很長(zhǎng)的字符串,你應(yīng)該使用WRITETEXT語(yǔ)句。這部分內(nèi)容對(duì)本書來(lái)說(shuō)太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。
如果你在INSERT語(yǔ)句中只指定兩個(gè)字段和數(shù)據(jù)會(huì)怎么樣呢?換句話說(shuō),你向一個(gè)表中插入一條新記錄,但有一個(gè)字段沒(méi)有提供數(shù)據(jù)。在這種情況下,有下面的四種可能:
如果該字段有一個(gè)缺省值,該值會(huì)被使用。例如,假設(shè)你插入新記錄時(shí)沒(méi)有給字段third_column提供數(shù)據(jù),而這個(gè)字段有一個(gè)缺省值’somevalue’。在這種情況下,當(dāng)新記錄建立時(shí)會(huì)插入值’somevalue’。
如果該字段可以接受空值,而且沒(méi)有缺省值,則會(huì)被插入空值。
如果該字段不能接受空值,而且沒(méi)有缺省值,就會(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來(lái)訪問(wèn)新記錄
的標(biāo)識(shí)字段的值。考慮如下的SQL語(yǔ)句:
復(fù)制內(nèi)容到剪貼板
代碼:INSERTmytable(first_column)VALUES(‘somevalue’)[code]
[code]INSERTanothertable(another_first,another_second)
VALUES(@@identity,’somevalue’)如果表mytable有一個(gè)標(biāo)識(shí)字段,該字段的值會(huì)被插入表anothertable的another_first字段。這是因?yàn)樽兞緻@identity總是保存最后一次插入標(biāo)識(shí)字段的值。
字段another_first應(yīng)該與字段first_column有相同的數(shù)據(jù)類型。但是,字段another_first不能是應(yīng)該標(biāo)識(shí)字段。Another_first字段用來(lái)保存字段first_column的值。
刪除記錄
要從表中刪除一個(gè)或多個(gè)記錄,需要使用SQLDELETE語(yǔ)句。你可以給DELETE語(yǔ)句提供WHERE子句。WHERE子句用來(lái)選擇要?jiǎng)h除的記錄。例如,下面的這個(gè)DELETE語(yǔ)句只刪除字段first_column的值等于’DeleteMe’的記錄:
代碼:DELETEmytableWHEREfirst_column=’DeltetMe’DELETE語(yǔ)句的完整句法如下:
復(fù)制內(nèi)容到剪貼板
代碼:DELETE[FROM]{table_name|view_name}[WHEREclause]在SQLSELECT語(yǔ)句中可以使用的任何條件都可以在DELECT語(yǔ)句的WHERE子句中使用。例如,下面的這個(gè)DELETE語(yǔ)句只刪除那些first_column字段的值為’goodbye’或second_column字段的值為’solong’的記錄:
代碼:DELETEmytableWHEREfirst_column=’goodby’ORsecond_column=’solong’如果你不給DELETE語(yǔ)句提供WHERE子句,表中的所有記錄都將被刪除。你不應(yīng)該有這種想法。如果你想刪除應(yīng)該表中的所有記錄,應(yīng)使用第十章所講的TRUNCATETABLE語(yǔ)句。
注意
為什么要用TRUNCATETABLE語(yǔ)句代替DELETE語(yǔ)句?當(dāng)你使用TRUNCATETABLE語(yǔ)句時(shí),記錄的刪除是不作記錄的。也就是說(shuō),這意味著TRUNCATETABLE要比DELETE快得多。
更新記錄
要修改表中已經(jīng)存在的一條或多條記錄,應(yīng)使用SQLUPDATE語(yǔ)句。同DELETE語(yǔ)句一樣,UPDATE語(yǔ)句可以使用WHERE子句來(lái)選擇更新特定的記錄。請(qǐng)看這個(gè)例子:
代碼:UPDATEmytableSETfirst_column=’Updated!’WHEREsecond_column=’UpdateMe!’這個(gè)UPDATE語(yǔ)句更新所有second_column字段的值為’UpdateMe!’的記錄。對(duì)所有被選中的記錄,字段first_column的值被置為’Updated!’。
下面是UPDATE語(yǔ)句的完整句法:
代碼:UPDATE{table_name|view_name}SET[{table_name|view_name}]
{column_list|variable_list|variable_and_column_list}
[,{column_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]
[WHEREclause]注意
你可以對(duì)文本型字段使用UPDATE語(yǔ)句。但是,如果你需要更新很長(zhǎng)的字符串,應(yīng)使用UPDATETEXT語(yǔ)句。這部分內(nèi)容對(duì)本書來(lái)說(shuō)太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。
如果你不提供WHERE子句,表中的所有記錄都將被更新。有時(shí)這是有用的。例如,如果你想把表titles中的所有書的價(jià)格加倍,你可以使用如下的UPDATE語(yǔ)句:
你也可以同時(shí)更新多個(gè)字段。例如,下面的UPDATE語(yǔ)句同時(shí)更新first_column,second_column,和third_column這三個(gè)字段:
代碼:UPDATEmytableSETfirst_column=’Updated!’
Second_column=’Updated!’
Third_column=’Updated!’
WHEREfirst_column=’UpdateMe1’技巧
SQL忽略語(yǔ)句中多余的空格。你可以把SQL語(yǔ)句寫成任何你最容易讀的格式。
用SELECT創(chuàng)建記錄和表
你也許已經(jīng)注意到,INSERT語(yǔ)句與DELETE語(yǔ)句和UPDATE語(yǔ)句有一點(diǎn)不同,它一次只操作一個(gè)記錄。然而,有一個(gè)方法可以使INSERT語(yǔ)句一次添加多個(gè)記錄。要作到這一點(diǎn),你需要把INSERT語(yǔ)句與SELECT語(yǔ)句結(jié)合起來(lái),象這樣:
代碼:INSERTmytable(first_column,second_column)
SELECTanother_first,another_second
FROManothertable
WHEREanother_first=’CopyMe!’這個(gè)語(yǔ)句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為’CopyMe!’的記錄才被拷貝。
當(dāng)為一個(gè)表中的記錄建立備份時(shí),這種形式的INSERT語(yǔ)句是非常有用的。在刪除一個(gè)表中的記錄之前,你可以先用這種方法把它們拷貝到另一個(gè)表中。
如果你需要拷貝整個(gè)表,你可以使用SELECTINTO語(yǔ)句。例如,下面的語(yǔ)句創(chuàng)建了一個(gè)名為newtable的新表,該表包含表mytable的所有數(shù)據(jù):
代碼:SELECT*INTOnewtableFROMmytable你也可以指定只有特定的字段被用來(lái)創(chuàng)建這個(gè)新表。要做到這一點(diǎn),只需在字段列表中指定你想要拷貝的字段。另外,你可以使用WHERE子句來(lái)限制拷貝到新表中的記錄。下面的例子只拷貝字段second_columnd的值等于’CopyMe!’的記錄的first_column字段。
代碼:SELECTfirst_columnINTOnewtable
FROMmytable
WHEREsecond_column=’CopyMe!’使用SQL修改已經(jīng)建立的表是很困難的。例如,如果你向一個(gè)表中添加了一個(gè)字段,沒(méi)有容易的辦法來(lái)去除它。另外,如果你不小心把一個(gè)字段的數(shù)據(jù)類型給錯(cuò)了,你將沒(méi)有辦法改變它。但是,使用本節(jié)中講述的SQL語(yǔ)句,你可以繞過(guò)這兩個(gè)問(wèn)題。
例如,假設(shè)你想從一個(gè)表中刪除一個(gè)字段。使用SELECTINTO語(yǔ)句,你可以創(chuàng)建該表的一個(gè)拷貝,但不包含要?jiǎng)h除的字段。這使你既刪除了該字段,又保留了不想刪除的數(shù)據(jù)。
如果你想改變一個(gè)字段的數(shù)據(jù)類型,你可以創(chuàng)建一個(gè)包含正確數(shù)據(jù)類型字段的新表。創(chuàng)建好該表后,你就可以結(jié)合使用UPDATE語(yǔ)句和SELECT語(yǔ)句,把原來(lái)表中的所有數(shù)據(jù)拷貝到新表中。通過(guò)這種方法,你既可以修改表的結(jié)構(gòu),又能保存原有的數(shù)據(jù)。
_ArticleContent1_lblContent>插入數(shù)據(jù)
向表中添加一個(gè)新記錄,你要使用SQLINSERT語(yǔ)句。這里有一個(gè)如何使用這種語(yǔ)句的例子:
復(fù)制內(nèi)容到剪貼板
代碼:INSERTmytable(mycolumn)VALUES(‘somedata’)這個(gè)語(yǔ)句把字符串’somedata’插入表mytable的mycolumn字段中。將要被插入數(shù)據(jù)的字段的名字在第一個(gè)括號(hào)中指定,實(shí)際的數(shù)據(jù)在第二個(gè)括號(hào)中給出。
INSERT語(yǔ)句的完整句法如下:
復(fù)制內(nèi)容到剪貼板
代碼:INSERT[INTO]{table_name|view_name}[(column_list)]{DEFAULTVALUES|Values_list|select_statement}如果一個(gè)表有多個(gè)字段,通過(guò)把字段名和字段值用逗號(hào)隔開,你可以向所有的字段中插入數(shù)據(jù)。假設(shè)表mytable有三個(gè)字段first_column,second_column,和third_column。下面的INSERT語(yǔ)句添加了一條三個(gè)字段都有值的完整記錄:
復(fù)制內(nèi)容到剪貼板
代碼:INSERTmytable(first_column,second_column,third_column)VALUES(‘somedata’,’somemoredata’,’yetmoredata’)
[code]
注意
你可以使用INSERT語(yǔ)句向文本型字段中插入數(shù)據(jù)。但是,如果你需要輸入很長(zhǎng)的字符串,你應(yīng)該使用WRITETEXT語(yǔ)句。這部分內(nèi)容對(duì)本書來(lái)說(shuō)太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。
如果你在INSERT語(yǔ)句中只指定兩個(gè)字段和數(shù)據(jù)會(huì)怎么樣呢?換句話說(shuō),你向一個(gè)表中插入一條新記錄,但有一個(gè)字段沒(méi)有提供數(shù)據(jù)。在這種情況下,有下面的四種可能:
如果該字段有一個(gè)缺省值,該值會(huì)被使用。例如,假設(shè)你插入新記錄時(shí)沒(méi)有給字段third_column提供數(shù)據(jù),而這個(gè)字段有一個(gè)缺省值’somevalue’。在這種情況下,當(dāng)新記錄建立時(shí)會(huì)插入值’somevalue’。
如果該字段可以接受空值,而且沒(méi)有缺省值,則會(huì)被插入空值。
如果該字段不能接受空值,而且沒(méi)有缺省值,就會(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來(lái)訪問(wèn)新記錄
的標(biāo)識(shí)字段的值??紤]如下的SQL語(yǔ)句:
[code]INSERTmytable(first_column)VALUES(‘somevalue’)
復(fù)制內(nèi)容到剪貼板
代碼:INSERTanothertable(another_first,another_second)VALUES(@@identity,’somevalue’)如果表mytable有一個(gè)標(biāo)識(shí)字段,該字段的值會(huì)被插入表anothertable的another_first字段。這是因?yàn)樽兞緻@identity總是保存最后一次插入標(biāo)識(shí)字段的值。
字段another_first應(yīng)該與字段first_column有相同的數(shù)據(jù)類型。但是,字段another_first不能是應(yīng)該標(biāo)識(shí)字段。Another_first字段用來(lái)保存字段first_column的值。
刪除記錄
要從表中刪除一個(gè)或多個(gè)記錄,需要使用SQLDELETE語(yǔ)句。你可以給DELETE語(yǔ)句提供WHERE子句。WHERE子句用來(lái)選擇要?jiǎng)h除的記錄。例如,下面的這個(gè)DELETE語(yǔ)句只刪除字段first_column的值等于’DeleteMe’的記錄:
復(fù)制內(nèi)容到剪貼板
代碼:DELETEmytableWHEREfirst_column=’DeltetMe’DELETE語(yǔ)句的完整句法如下:
復(fù)制內(nèi)容到剪貼板
代碼:DELETE[FROM]{table_name|view_name}[WHEREclause]在SQLSELECT語(yǔ)句中可以使用的任何條件都可以在DELECT語(yǔ)句的WHERE子句中使用。例如,下面的這個(gè)DELETE語(yǔ)句只刪除那些first_column字段的值為’goodbye’或second_column字段的值為’solong’的記錄:
復(fù)制內(nèi)容到剪貼板
代碼:DELETEmytableWHEREfirst_column=’goodby’ORsecond_column=’solong’如果你不給DELETE語(yǔ)句提供WHERE子句,表中的所有記錄都將被刪除。你不應(yīng)該有這種想法。如果你想刪除應(yīng)該表中的所有記錄,應(yīng)使用第十章所講的TRUNCATETABLE語(yǔ)句。
注意
為什么要用TRUNCATETABLE語(yǔ)句代替DELETE語(yǔ)句?當(dāng)你使用TRUNCATETABLE語(yǔ)句時(shí),記錄的刪除是不作記錄的。也就是說(shuō),這意味著TRUNCATETABLE要比DELETE快得多。
更新記錄
要修改表中已經(jīng)存在的一條或多條記錄,應(yīng)使用SQLUPDATE語(yǔ)句。同DELETE語(yǔ)句一樣,UPDATE語(yǔ)句可以使用WHERE子句來(lái)選擇更新特定的記錄。請(qǐng)看這個(gè)例子:
復(fù)制內(nèi)容到剪貼板
代碼:UPDATEmytableSETfirst_column=’Updated!’WHEREsecond_column=’UpdateMe!’這個(gè)UPDATE語(yǔ)句更新所有second_column字段的值為’UpdateMe!’的記錄。對(duì)所有被選中的記錄,字段first_column的值被置為’Updated!’。
下面是UPDATE語(yǔ)句的完整句法:
復(fù)制內(nèi)容到剪貼板
代碼:UPDATE{table_name|view_name}SET[{table_name|view_name}]
{column_list|variable_list|variable_and_column_list}
[,{column_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]
[WHEREclause]注意
你可以對(duì)文本型字段使用UPDATE語(yǔ)句。但是,如果你需要更新很長(zhǎng)的字符串,應(yīng)使用UPDATETEXT語(yǔ)句。這部分內(nèi)容對(duì)本書來(lái)說(shuō)太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考MicrosoftSQLSever的文檔。
如果你不提供WHERE子句,表中的所有記錄都將被更新。有時(shí)這是有用的。例如,如果你想把表titles中的所有書的價(jià)格加倍,你可以使用如下的UPDATE語(yǔ)句:
你也可以同時(shí)更新多個(gè)字段。例如,下面的UPDATE語(yǔ)句同時(shí)更新first_column,second_column,和third_column這三個(gè)字段:
復(fù)制內(nèi)容到剪貼板
代碼:UPDATEmytableSETfirst_column=’Updated!’
Second_column=’Updated!’
Third_column=’Updated!’
WHEREfirst_column=’UpdateMe1’技巧
SQL忽略語(yǔ)句中多余的空格。你可以把SQL語(yǔ)句寫成任何你最容易讀的格式。
用SELECT創(chuàng)建記錄和表
你也許已經(jīng)注意到,INSERT語(yǔ)句與DELETE語(yǔ)句和UPDATE語(yǔ)句有一點(diǎn)不同,它一次只操作一個(gè)記錄。然而,有一個(gè)方法可以使INSERT語(yǔ)句一次添加多個(gè)記錄。要作到這一點(diǎn),你需要把INSERT語(yǔ)句與SELECT語(yǔ)句結(jié)合起來(lái),象這樣:
復(fù)制內(nèi)容到剪貼板
代碼:INSERTmytable(first_column,second_column)
SELECTanother_first,another_second
FROManothertable
WHEREanother_first=’CopyMe!’這個(gè)語(yǔ)句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為’CopyMe!’的記錄才被拷貝。
當(dāng)為一個(gè)表中的記錄建立備份時(shí),這種形式的INSERT語(yǔ)句是非常有用的。在刪除一個(gè)表中的記錄之前,你可以先用這種方法把它們拷貝到另一個(gè)表中。
如果你需要拷貝整個(gè)表,你可以使用SELECTINTO語(yǔ)句。例如,下面的語(yǔ)句創(chuàng)建了一個(gè)名為newtable的新表,該表包含表mytable的所有數(shù)據(jù):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT*INTOnewtableFROMmytable你也可以指定只有特定的字段被用來(lái)創(chuàng)建這個(gè)新表。要做到這一點(diǎn),只需在字段列表中指定你想要拷貝的字段。另外,你可以使用WHERE子句來(lái)限制拷貝到新表中的記錄。下面的例子只拷貝字段second_columnd的值等于’CopyMe!’的記錄的first_column字段。
復(fù)制內(nèi)容到剪貼板
代碼:SELECTfirst_columnINTOnewtable
FROMmytable
WHEREsecond_column=’CopyMe!’使用SQL修改已經(jīng)建立的表是很困難的。例如,如果你向一個(gè)表中添加了一個(gè)字段,沒(méi)有容易的辦法來(lái)去除它。另外,如果你不小心把一個(gè)字段的數(shù)據(jù)類型給錯(cuò)了,你將沒(méi)有辦法改變它。但是,使用本節(jié)中講述的SQL語(yǔ)句,你可以繞過(guò)這兩個(gè)問(wèn)題。
例如,假設(shè)你想從一個(gè)表中刪除一個(gè)字段。使用SELECTINTO語(yǔ)句,你可以創(chuàng)建該表的一個(gè)拷貝,但不包含要?jiǎng)h除的字段。這使你既刪除了該字段,又保留了不想刪除的數(shù)據(jù)。
如果你想改變一個(gè)字段的數(shù)據(jù)類型,你可以創(chuàng)建一個(gè)包含正確數(shù)據(jù)類型字段的新表。創(chuàng)建好該表后,你就可以結(jié)合使用UPDATE語(yǔ)句和SELECT語(yǔ)句,把原來(lái)表中的所有數(shù)據(jù)拷貝到新表中。通過(guò)這種方法,你既可以修改表的結(jié)構(gòu),又能保存原有的數(shù)據(jù)。SQL語(yǔ)法,SQL語(yǔ)句大全,SQL基礎(chǔ)SQL語(yǔ)法參考手冊(cè)(SQL)/數(shù)據(jù)類型
2006-07-2407:42
《SQL語(yǔ)法參考手冊(cè)(SQL)》
DB2提供了關(guān)連式資料庫(kù)的查詢語(yǔ)言SQL(StructuredQueryLanguage),是一種非常口語(yǔ)化、既易學(xué)又易懂的語(yǔ)法。此一語(yǔ)言幾乎是每個(gè)資料庫(kù)系統(tǒng)都必須提供的,用以表示關(guān)連式的*作,包含了資料的定義(DDL)以及資料的處理(DML)。SQL原來(lái)拼成SEQUEL,這語(yǔ)言的原型以“系統(tǒng)R“的名字在IBM圣荷西實(shí)驗(yàn)室完成,經(jīng)過(guò)IBM內(nèi)部及其他的許多使用性及效率測(cè)試,其結(jié)果相當(dāng)令人滿意,并決定在系統(tǒng)R的技術(shù)基礎(chǔ)發(fā)展出來(lái)IBM的產(chǎn)品。而且美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)(ANSI)及國(guó)際標(biāo)準(zhǔn)化組織(ISO)在1987遵循一個(gè)幾乎是以IBMSQL為基礎(chǔ)的標(biāo)準(zhǔn)關(guān)連式資料語(yǔ)言定義。
一、資料定義DDL(DataDefinitionLanguage)
資料定語(yǔ)言是指對(duì)資料的格式和形態(tài)下定義的語(yǔ)言,他是每個(gè)資料庫(kù)要建立時(shí)候時(shí)首先要面對(duì)的,舉凡資料分哪些表格關(guān)系、表格內(nèi)的有什麼欄位主鍵、表格和表格之間互相參考的關(guān)系等等,都是在開始的時(shí)候所必須規(guī)劃好的。
1、建表格:
CreateTABLEtable_name(
column1DATATYPE[NOTNULL][NOTNULLPRIMARYKEY],
column2DATATYPE[NOTNULL],
...)
說(shuō)明:
DATATYPE--是資料的格式,詳見表。
NUTNULL--可不可以允許資料有空的(尚未有資料填入)。
PRIMARYKEY--是本表的主鍵。
2、更改表格
AlterTABLEtable_name
ADDCOLUMNcolumn_nameDATATYPE
說(shuō)明:增加一個(gè)欄位(沒(méi)有刪除某個(gè)欄位的語(yǔ)法。
AlterTABLEtable_name
ADDPRIMARYKEY(column_name)
說(shuō)明:更改表得的定義把某個(gè)欄位設(shè)為主鍵。
AlterTABLEtable_name
DropPRIMARYKEY(column_name)
說(shuō)明:把主鍵的定義刪除。
3、建立索引
CreateINDEXindex_nameONtable_name(column_name)
說(shuō)明:對(duì)某個(gè)表格的欄位建立索引以增加查詢時(shí)的速度。
4、刪除
Droptable_name
Dropindex_name
二、的資料形態(tài)DATATYPEs
smallint
16位元的整數(shù)。
interger
32位元的整數(shù)。
decimal(p,s)
p精確值和s大小的十進(jìn)位整數(shù),精確值p是指全部有幾個(gè)數(shù)(digits)大小值,s是指小數(shù)
點(diǎn)後有幾位數(shù)。如果沒(méi)有特別指定,則系統(tǒng)會(huì)設(shè)為p=5;s=0。
float
32位元的實(shí)數(shù)。
double
64位元的實(shí)數(shù)。
char(n)
n長(zhǎng)度的字串,n不能超過(guò)254。
varchar(n)
長(zhǎng)度不固定且其最大長(zhǎng)度為n的字串,n不能超過(guò)4000。
graphic(n)
和char(n)一樣,不過(guò)其單位是兩個(gè)字元double-bytes,n不能超過(guò)127。這個(gè)形態(tài)是為
了支援兩個(gè)字元長(zhǎng)度的字體,例如中文字。
vargraphic(n)
可變長(zhǎng)度且其最大長(zhǎng)度為n的雙字元字串,n不能超過(guò)2000。
date
包含了年份、月份、日期。
time
包含了小時(shí)、分鐘、秒。
timestamp
包含了年、月、日、時(shí)、分、秒、千分之一秒。
三、資料*作DML(DataManipulationLanguage)
資料定義好之後接下來(lái)的就是資料的*作。資料的*作不外乎增加資料(insert)、查詢資料(query)、更改資料(update)、刪除資料(delete)四種模式,以下分別介紹他們的語(yǔ)法:
1、增加資料:
InsertINTOtable_name(column1,column2,...)
valueS(value1,value2,...)
說(shuō)明:
1.若沒(méi)有指定column系統(tǒng)則會(huì)按表格內(nèi)的欄位順序填入資料。
2.欄位的資料形態(tài)和所填入的資料必須吻合。
3.table_name也可以是景觀view_name。
InsertINTOtable_name(column1,column2,...)
Selectcolumnx,columny,...FROManother_table
說(shuō)明:也可以經(jīng)過(guò)一個(gè)子查詢(subquery)把別的表格的資料填入。
2、查詢資料:
基本查詢
Selectcolumn1,columns2,...
FROMtable_name
說(shuō)明:把table_name的特定欄位資料全部列出來(lái)
Select*
FROMtable_name
Wherecolumn1=xxx
[ANDcolumn2〉yyy][ORcolumn3〈〉z(mì)zz]
說(shuō)明:
1.’*’表示全部的欄位都列出來(lái)。
2.Where之後是接條件式,把符合條件的資料列出來(lái)。
Selectcolumn1,column2
FROMtable_name
orDERBYcolumn2[DESC]
說(shuō)明:ORDERBY是指定以某個(gè)欄位做排序,[DESC]是指從大到小排列,若沒(méi)有指明,則是從小到大
排列
組合查詢
組合查詢是指所查詢得資料來(lái)源并不只有單一的表格,而是聯(lián)合一個(gè)以上的
表格才能夠得到結(jié)果的。
Select*
FROMtable1,table2
Wheretable1.colum1=table2.column1
說(shuō)明:
1.查詢兩個(gè)表格中其中column1值相同的資料。
2.當(dāng)然兩個(gè)表格相互比較的欄位,其資料形態(tài)必須相同。
3.一個(gè)復(fù)雜的查詢其動(dòng)用到的表格可能會(huì)很多個(gè)。
整合性的查詢:
SelectCOUNT(*)
FROMtable_name
Wherecolumn_name=xxx
說(shuō)明:
查詢符合條件的資料共有幾筆。
SelectSUM(column1)
FROMtable_name
說(shuō)明:
1.計(jì)算出總和,所選的欄位必須是可數(shù)的數(shù)字形態(tài)。
2.除此以外還有AVG()是計(jì)算平均、MAX()、MIN()計(jì)算最大最小值的整合性查詢。
Selectcolumn1,AVG(column2)
FROMtable_name
GROUPBYcolumn1
HAVINGAVG(column2)〉xxx
說(shuō)明:
1.GROUPBY:以column1為一組計(jì)算column2的平均值必須和AVG、SUM等整合性查詢的關(guān)鍵字
一起使用。
2.HAVING:必須和GROUPBY一起使用作為整合性的限制。
復(fù)合性的查詢
Select*
FROMtable_name1
WhereEXISTS(
Select*
FROMtable_name2
Whereconditions)
說(shuō)明:
1.Where的conditions可以是另外一個(gè)的query。
2.EXISTS在此是指存在與否。
Select*
FROMtable_name1
Wherecolumn1IN(
Selectcolumn1
FROMtable_name2
Whereconditions)
說(shuō)明:
1.IN後面接的是一個(gè)集合,表示column1存在集合里面。
2.Select出來(lái)的資料形態(tài)必須符合column1。
其他查詢
Select*
FROMtable_name1
Wherecolumn1LIKE’x%’
說(shuō)明:LIKE必須和後面的’x%’相呼應(yīng)表示以x為開頭的字串。
Select*
FROMtable_name1
Wherecolumn1IN(’xxx’,’yyy’,..)
說(shuō)明:IN後面接的是一個(gè)集合,表示column1存在集合里面。
Select*
FROMtable_name1
Wherecolumn1BETWEENxxANDyy
說(shuō)明:BETWEEN表示column1的值介於xx和yy之間。
3、更改資料:
Updatetable_name
SETcolumn1=’xxx’
Whereconditoins
說(shuō)明:
1.更改某個(gè)欄位設(shè)定其值為’xxx’。
2.conditions是所要符合的條件、若沒(méi)有Where則整個(gè)table的那個(gè)欄位都會(huì)全部被更改。
4、刪除資料:
DeleteFROMtable_name
Whereconditions
說(shuō)明:刪除符合條件的資料。
說(shuō)明:關(guān)于Where條件后面如果包含有日期的比較,不同數(shù)據(jù)庫(kù)有不同的表達(dá)式。具體如下:
(1)如果是ACCESS數(shù)據(jù)庫(kù),則為:Wheremydate〉#2000-01-01#
(2)如果是ORACLE數(shù)據(jù)庫(kù),則為: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(’+’’’’+thedate+’’’’+’asdate)’);
如果比較日期時(shí)間型,則為:
Wheremydatetime〉to_date(’2000-01-0110:00:01’,’yyyy-mm-ddhh24:mi:ss’)
Recordset對(duì)象一些有用的屬性"/〉引用來(lái)自增加一個(gè):Recordset對(duì)象一些有用的屬性
rs.CursorType=
rs.CursorLocation=
rs.LockType=
rs.CacheSize=
rs.Pagesize=
rs.Pagecount=
rs.RecordCount=
’’CursorTypeValues
ConstadOpenForwardOnly=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開放式批更新
’’CursorLocationValues
ConstadUseServer=2
ConstadUseClient=3
Setrs=Server.CreateObject("ADODB.Rrecordset")
rs.Open.sqlst,conn,1,1’讀取
rs.Opensqlst,conn,1,2’新增,修改,或刪除)
下一頁(yè):《SQLSERVER的數(shù)據(jù)類型》
〉〉〉我想分頁(yè)!--這么長(zhǎng)的文章,在這里來(lái)個(gè)分頁(yè)多好??!哈哈〈〈〈
《SQLSERVER的數(shù)據(jù)類型》
1.SQLSERVER的數(shù)據(jù)類型
數(shù)據(jù)類弄是數(shù)據(jù)的一種屬性,表示數(shù)據(jù)所表示信息的類型。任何一種計(jì)算機(jī)語(yǔ)言都定義了自己的數(shù)據(jù)類型。當(dāng)然,不同的程序語(yǔ)言都具有不同的特點(diǎn),所定義的數(shù)據(jù)類型的各類和名稱都或多或少有些不同。SQLServer提供了25種數(shù)據(jù)類型:
·Binary[(n)]
·Varbinary[(n)]
·Char[(n)]
·Varchar[(n)]
·Nchar[(n)]
·Nvarchar[(n)]
·Datetime
·Smalldatetime
·Decimal[(p[,s])]
·Numeric[(p[,s])]
·Float[(n)]
·Real
·Int
·Smallint
·Tinyint
·Money
·Smallmoney
·Bit
·Cursor
·Sysname
·Timestamp
·Uniqueidentifier
·Text
·Image
·Ntext
(1)二進(jìn)制數(shù)據(jù)類型
二進(jìn)制數(shù)據(jù)包括Binary、Varbinary和Image
Binary數(shù)據(jù)類型既可以是固定長(zhǎng)度的(Binary),也可以是變長(zhǎng)度的。
Binary[(n)]是n位固定的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié)。
Varbinary[(n)]是n位變長(zhǎng)度的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié),不是n個(gè)字節(jié)。
在Image數(shù)據(jù)類型中存儲(chǔ)的數(shù)據(jù)是以位字符串存儲(chǔ)的,不是由SQLServer解釋的,必須由應(yīng)用程序來(lái)解釋。例如,應(yīng)用程序可以使用BMP、TIEF、GIF和JPEG格式把數(shù)據(jù)存儲(chǔ)在Image數(shù)據(jù)類型中。
(2)字符數(shù)據(jù)類型
字符數(shù)據(jù)的類型包括Char,Varchar和Text
字符數(shù)據(jù)是由任何字母、符號(hào)和數(shù)字任意組合而成的數(shù)據(jù)。
Varchar是變長(zhǎng)字符數(shù)據(jù),其長(zhǎng)度不超過(guò)8KB。Char是定長(zhǎng)字符數(shù)據(jù),其長(zhǎng)度最多為8KB。超過(guò)8KB的ASCII數(shù)據(jù)可以使用Text數(shù)據(jù)類型存儲(chǔ)。例如,因?yàn)镠tml文檔全部都是ASCII字符,并且在一般情況下長(zhǎng)度超過(guò)8KB,所以這些文檔可以Text數(shù)據(jù)類型存儲(chǔ)在SQLServer中。
(3)Unicode數(shù)據(jù)類型
Unicode數(shù)據(jù)類型包括Nchar,Nvarchar和Ntext
在MicrosoftSQLServer中,傳統(tǒng)的非Unicode數(shù)據(jù)類型允許使用由特定字符集定義的字符。在SQLServer安裝過(guò)程中,允許選擇一種字符集。使用Unicode數(shù)據(jù)類型,列中可以存儲(chǔ)任何由Unicode標(biāo)準(zhǔn)定義的字符。在Unicode標(biāo)準(zhǔn)中,包括了以各種字符集定義的全部字符。使用Unicode數(shù)據(jù)類型,所戰(zhàn)勝的窨是使用非Unicode數(shù)據(jù)類型所占用的窨大小的兩倍。
在SQLServer中,Unicode數(shù)據(jù)以Nchar、Nvarchar和Ntext數(shù)據(jù)類型存儲(chǔ)。使用這種字符類型存儲(chǔ)的列可以存儲(chǔ)多個(gè)字符集中的字符。當(dāng)列的長(zhǎng)度變化時(shí),應(yīng)該使用Nvarchar字符類型,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)列的長(zhǎng)度固定不變時(shí),應(yīng)該使用Nchar字符類型,同樣,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)使用Ntext數(shù)據(jù)類型時(shí),該列可以存儲(chǔ)多于4000個(gè)字符。
(4)日期和時(shí)間數(shù)據(jù)類型
日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型
日期和時(shí)間數(shù)據(jù)類型由有效的日期和時(shí)間組成。例如,有效的日期和時(shí)間數(shù)據(jù)包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一個(gè)數(shù)據(jù)類型是日期在前,時(shí)間在后一個(gè)數(shù)據(jù)類型是霎時(shí)間在前,日期在后。在MicrosoftSQLServer中,日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型時(shí),所存儲(chǔ)的日期范圍是從1753年1月1日開始,到9999年12月31日結(jié)束(每一個(gè)值要求8個(gè)存儲(chǔ)字節(jié))。使用Smalldatetime數(shù)據(jù)類型時(shí),所存儲(chǔ)的日期范圍是1900年1月1日開始,到2079年12月31日結(jié)束(每一個(gè)值要求4個(gè)存儲(chǔ)字節(jié))。
日期的格式可以設(shè)定。設(shè)置日期格式的命令如下:
SetDateFormat{format|@format_var|
其中,format|@format_var是日期的順序。有效的參數(shù)包括MDY、DMY、YMD、YDM、MYD和DYM。在默認(rèn)情況下,日期格式為MDY。
例如,當(dāng)執(zhí)行SetDateFormatYMD之后,日期的格式為年月日形式;當(dāng)執(zhí)行SetDateFormatDMY之后,日期的格式為日月有年形式
(5)數(shù)字?jǐn)?shù)據(jù)類型
數(shù)字?jǐn)?shù)據(jù)只包含數(shù)字。數(shù)字?jǐn)?shù)據(jù)類型包括正數(shù)和負(fù)數(shù)、小數(shù)(浮點(diǎn)數(shù))和整數(shù)
整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整數(shù)存儲(chǔ)的數(shù)據(jù)類型是Int,Smallint和Tinyint。Int數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Smallint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍,而Smallint據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Tinyint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍。使用Int數(shù)據(jù)狗昔存儲(chǔ)數(shù)據(jù)的范圍是從-2147483648到2147483647(每一個(gè)值要求4個(gè)字節(jié)存儲(chǔ)空間)。使用Smallint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍從-32768到32767(每一個(gè)值要求2個(gè)字節(jié)存儲(chǔ)空間)。使用Tinyint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍是從0到255(每一個(gè)值要求1個(gè)字節(jié)存儲(chǔ)空間)。
精確小婁數(shù)據(jù)在SQLServer中的數(shù)據(jù)類型是Decimal和Numeric。這種數(shù)據(jù)所占的存儲(chǔ)空間根據(jù)該數(shù)據(jù)的位數(shù)后的位數(shù)來(lái)確定。
在SQLServer中,近似小數(shù)數(shù)據(jù)的數(shù)據(jù)類型是Float和Real。例如,三分之一這個(gè)分?jǐn)?shù)記作。3333333,當(dāng)使用近似數(shù)據(jù)類型時(shí)能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲(chǔ)在該列中數(shù)據(jù)不完全一樣。
(6)貨幣數(shù)據(jù)表示正的或者負(fù)的貨幣數(shù)量。
在MicrosoftSQLServer中,貨幣數(shù)據(jù)的數(shù)據(jù)類型是Money和Smallmoney
Money數(shù)據(jù)類型要求8個(gè)存儲(chǔ)字節(jié),Smallmoney數(shù)據(jù)類型要求4個(gè)存儲(chǔ)字節(jié)。
(7)特殊數(shù)據(jù)類型
特殊數(shù)據(jù)類型包括前面沒(méi)有提過(guò)的數(shù)據(jù)類型。特殊的數(shù)據(jù)類型有3種,即Timestamp、Bit和Uniqueidentifier。
Timestamp用于表示SQLServer活動(dòng)的先后順序,以二進(jìn)投影的格式表示。Timestamp數(shù)據(jù)與插入數(shù)據(jù)或者日期和時(shí)間沒(méi)有關(guān)系。
Bit由1或者0組成。當(dāng)表示真或者假、ON或者OFF時(shí),使用Bit數(shù)據(jù)類型。例如,詢問(wèn)是否是每一次訪問(wèn)的客戶機(jī)請(qǐng)求可以存儲(chǔ)在這種數(shù)據(jù)類型的列中。
Uniqueidentifier由16字節(jié)的十六進(jìn)制數(shù)字組成,表示一個(gè)全局唯一的。當(dāng)表的記錄行要求唯一時(shí),GUID是非常有用。例如,在客戶標(biāo)識(shí)號(hào)列使用這種數(shù)據(jù)類型可以區(qū)別不同的客戶。
2.用戶定義的數(shù)據(jù)類型
用戶定義的數(shù)據(jù)類型基于在MicrosoftSQLServer中提供的數(shù)據(jù)類型。當(dāng)幾個(gè)表中必須存儲(chǔ)同一種數(shù)據(jù)類型時(shí),并且為保證這些列有相同的數(shù)據(jù)類型、長(zhǎng)度和可空性時(shí),可以使用用戶定義的數(shù)據(jù)類型。例如,可定義一種稱為postal_code的數(shù)據(jù)類型,它基于Char數(shù)據(jù)類型。
當(dāng)創(chuàng)建用戶定義的數(shù)據(jù)類型時(shí),必須提供三個(gè)數(shù):數(shù)據(jù)類型的名稱、所基于的系統(tǒng)數(shù)據(jù)類型和數(shù)據(jù)類型的可空性。
(1)創(chuàng)建用戶定義的數(shù)據(jù)類型
創(chuàng)建用戶定義的數(shù)據(jù)類型可以使用Transact-SQL語(yǔ)句。系統(tǒng)存儲(chǔ)過(guò)程sp_addtype可以來(lái)創(chuàng)建用戶定義的數(shù)據(jù)類型。其語(yǔ)法形式如下:
sp_addtype{type},[,system_data_bype][,’null_type’]
其中,type是用戶定義的數(shù)據(jù)類型的名稱。system_data_type是系統(tǒng)提供的數(shù)據(jù)類型,例如Decimal、Int、Char等等。null_type表示該數(shù)據(jù)類型是如何處理空值的,必須使用單引號(hào)引起來(lái),例如’NULL’、’NOTNULL’或者’NONULL’。
例子:
Usecust
Execsp_addtypessn,’Varchar(11)’,"NotNull’
創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型ssn,其基于的系統(tǒng)數(shù)據(jù)類型是變長(zhǎng)為11的字符,不允許空。
例子:
Usecust
Execsp_addtypebirthday,datetime,’Null’
創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型birthday,其基于的系統(tǒng)數(shù)據(jù)類型是DateTime,允許空。
例子:
Usemaster
Execsp_addtypetelephone,’varchar(24),’NotNull’
Eexcsp_addtypefax,’varchar(24)’,’Null’
創(chuàng)建兩個(gè)數(shù)據(jù)類型,即telephone和fax
(2)刪除用戶定義的數(shù)據(jù)類型
當(dāng)用戶定義的數(shù)據(jù)類型不需要時(shí),可刪除。刪除用戶定義的數(shù)據(jù)類型的命令是sp_droptype{’type’}。
例子:
Usemaster
Execsp_droptype’ssn’
注意:當(dāng)表中的列還正在使用用戶定義的數(shù)據(jù)類型時(shí),或者在其上面還綁定有默認(rèn)或者規(guī)則時(shí),這種用戶定義的數(shù)據(jù)類型不能刪除。
以下為SQLSERVER7.0以上版本的字段類型說(shuō)明。SQLSERVER6.5的字段類型說(shuō)明請(qǐng)參考SQLSERVER提供的說(shuō)明。
字段類型描述
bit0或1的整型數(shù)字
int從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數(shù)字
smallint從-2^15(-32,768)到2^15(32,767)的整型數(shù)字
tinyint從0到255的整型數(shù)字
decimal從-10^38到10^38-1的定精度與有效位數(shù)的數(shù)字
numericdecimal的同義詞
money從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣數(shù)據(jù),最小貨幣單位千分之十
smallmoney從-214,748.3648到214,748.3647的貨幣數(shù)據(jù),最小貨幣單位千分之十
float從-1.79E+308到1.79E+308可變精度的數(shù)字
real從-3.04E+38到3.04E+38可變精度的數(shù)字
datetime從1753年1月1日到9999年12日31的日期和時(shí)間數(shù)據(jù),最小時(shí)間單位為百分之三秒或3.33毫秒
smalldatetime從1900年1月1日到2079年6月6日的日期和時(shí)間數(shù)據(jù),最小時(shí)間單位為分鐘
timestamp時(shí)間戳,一個(gè)數(shù)據(jù)庫(kù)寬度的唯一數(shù)字
uniqueidentifier全球唯一標(biāo)識(shí)符GUID
char定長(zhǎng)非Unicode的字符型數(shù)據(jù),最大長(zhǎng)度為8000
varchar變長(zhǎng)非Unicode的字符型數(shù)據(jù),最大長(zhǎng)度為8000
text變長(zhǎng)非Unicode的字符型數(shù)據(jù),最大長(zhǎng)度為2^31-1(2G)
nchar定長(zhǎng)Unicode的字符型數(shù)據(jù),最大長(zhǎng)度為8000
nvarchar變長(zhǎng)Unicode的字符型數(shù)據(jù),最大長(zhǎng)度為8000
ntext變長(zhǎng)Unicode的字符型數(shù)據(jù),最大長(zhǎng)度為2^31-1(2G)
binary定長(zhǎng)二進(jìn)制數(shù)據(jù),最大長(zhǎng)度為8000
varbinary變長(zhǎng)二進(jìn)制數(shù)據(jù),最大長(zhǎng)度為8000
image變長(zhǎng)二進(jìn)制數(shù)據(jù),最大長(zhǎng)度為2^31-1(2G)
〉〉〉我想分頁(yè)!--這么長(zhǎng)的文章,在這里來(lái)個(gè)分頁(yè)多好啊!哈哈〈〈〈
《SQL語(yǔ)句的基本語(yǔ)法》
一.Select語(yǔ)句的完整語(yǔ)法為:
Select[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[ASalias1][,[table.]field2[ASalias2][,…]]}
FROMtableexpression[,…][INexternaldatabase]
[Where…]
[GROUPBY…]
[HAVING…]
[ORDERBY…]
[WITHOWNERACCESSOPTION]
說(shuō)明:
用中括號(hào)([])括起來(lái)的部分表示是可選的,用大括號(hào)({})括起來(lái)的部分是表示必須從中選擇其中的一個(gè)。
1FROM子句
FROM子句指定了Select語(yǔ)句中字段的來(lái)源。FROM子句后面是包含一個(gè)或多個(gè)的表達(dá)式(由逗號(hào)分開),其中的表達(dá)式可為單一表名稱、已保存的查詢或由INNERJOIN、LEFTJOIN或RIGHTJOIN得到的復(fù)合結(jié)果。如果表或查詢存儲(chǔ)在外部數(shù)據(jù)庫(kù),在IN子句之后指明其完整路徑。
例:下列SQL語(yǔ)句返回所有有定單的客戶:
SelectorderID,Customer.customerID
FROMordersCustomers
Whereorders.CustomerID=Customers.CustomeersID
2ALL、DISTINCT、DISTINCTROW、TO
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《腎移植術(shù)后的護(hù)理》課件
- 養(yǎng)老院老人生活設(shè)施維修人員激勵(lì)制度
- 養(yǎng)老院老人關(guān)愛服務(wù)規(guī)范制度
- 《用餐的經(jīng)驗(yàn)過(guò)程》課件
- 2024年泥工裝修項(xiàng)目合作合同樣本版B版
- 施工成本控制的合同(2篇)
- 健美操基本步伐課件
- 2024年甲乙雙方關(guān)于城市軌道交通信號(hào)系統(tǒng)建設(shè)與維護(hù)合同
- 刑法學(xué)課程課件教案緒論
- 2025年廊坊貨運(yùn)從業(yè)資格模擬考
- 網(wǎng)絡(luò)設(shè)備安裝與調(diào)試(華為eNSP模擬器)PPT完整全套教學(xué)課件
- 上一堂樸素的語(yǔ)文課
- 2023阻塞性睡眠呼吸暫停與難治性高血壓(全文)
- 《刻舟求劍》課件 (共27張PPT)
- 耕地占補(bǔ)平衡動(dòng)態(tài)監(jiān)管系統(tǒng)培訓(xùn)講解
- 湘教版八上音樂(lè) 都達(dá)爾和瑪利亞 課件(共19張PPT)
- 2022年山東省濟(jì)南市統(tǒng)考專升本管理學(xué)真題(含答案)
- 勞動(dòng)教育知到章節(jié)答案智慧樹2023年杭州醫(yī)學(xué)院
- 電影音樂(lè)欣賞知到章節(jié)答案智慧樹2023年華南農(nóng)業(yè)大學(xué)
- 頑危犯轉(zhuǎn)化個(gè)例
- 《食品安全培訓(xùn)資料》
評(píng)論
0/150
提交評(píng)論