SQL四條最基本的數(shù)據(jù)操作語句:Insert,Select,Update和Delete詳解_第1頁
SQL四條最基本的數(shù)據(jù)操作語句:Insert,Select,Update和Delete詳解_第2頁
SQL四條最基本的數(shù)據(jù)操作語句:Insert,Select,Update和Delete詳解_第3頁
SQL四條最基本的數(shù)據(jù)操作語句:Insert,Select,Update和Delete詳解_第4頁
SQL四條最基本的數(shù)據(jù)操作語句:Insert,Select,Update和Delete詳解_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

掌握SQL四條最基本的數(shù)據(jù)操作語句:Insert,Select,Update和Delete。練掌握SQL是數(shù)據(jù)庫用戶的寶貴財富。在本文中,我們將引導(dǎo)你掌握四條最基本的數(shù)據(jù)操作語句—SQL的核心功能一來依次介紹比較操作符、選擇斷言以及三值邏輯。當(dāng)你完成這些學(xué)習(xí)后,顯然你已經(jīng)開始算是精通SQL了。在我們開始之前,先使用CREATETABLE語句來創(chuàng)建一個表(如圖1所示)。DDL語句對數(shù)據(jù)庫對象如表、列和視進(jìn)行定義。它們并不對表中的行進(jìn)行處理,這是因?yàn)镈DL語句并不處理數(shù)據(jù)庫中實(shí)際的數(shù)據(jù)。這些工作由另一類SQL語句一數(shù)據(jù)操作語言(DML)語句進(jìn)行處理。SQL中有四種基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于這是大多數(shù)SQL用戶經(jīng)常用到的,我們有必要在此對它們進(jìn)行一一說明。在圖1中我們給出了一個名為EMPLOYEES的表。其中的每一行對應(yīng)一個特定的雇員記錄。請熟悉這張表,我們在后面的例子中將要用到它。INSERT語句用戶可以用INSERT語句將一行記錄插入到指定的一個表中。例如,要將雇員JohnSmith的記錄插入到本例的表中,可以使用如下語句:INSERTINTOEMPLOYEESVALUES('Smith','John','1980-06-10','LosAngles',16,45000);通過這樣的INSERT語句,系統(tǒng)將試著將這些值填入到相應(yīng)的列中。這些列按照我們創(chuàng)建表時定義的順序排列。在本例中,第一個直Smith”將填到第一個列LAST_NAME中;第二個值“John”將填到第二列FIRST_NAME中......以此類推。我們說過系統(tǒng)會“試著”將值填入,除了執(zhí)行規(guī)則之外它還要進(jìn)行類型檢查。如果類型不符(如將一個字符串填入到類型為數(shù)字的列中),系統(tǒng)將拒絕這一次操作并返回一個錯誤信息。如果SQL拒絕了你所填入的一列值,語句中其他各列的值也不會填入。這是因?yàn)镾QL提供對事務(wù)的支持。一次事務(wù)將數(shù)據(jù)庫從一種一致性轉(zhuǎn)移到另一種一致性。如果事務(wù)的某一部分失敗,則整個事務(wù)都會失敗,系統(tǒng)將會被恢復(fù)(或稱之為回退)到此事務(wù)之前的狀態(tài)?;氐皆瓉淼腎NSERT的例子,請注意所有的整形十進(jìn)制數(shù)都不需要用單引號引起來,而字符串和日期類型的值都要用單引號來區(qū)別。為了增加可讀性而在數(shù)字間插入逗號將會引起錯誤。記住,在SQL中逗號是元素的分隔符。同樣要注意輸入文字值時要使用單引號。雙引號用來封裝限界標(biāo)識符。對于日期類型,我們必須使用SQL標(biāo)準(zhǔn)日期格式(yyyy-mm-dd),但是在系統(tǒng)中可以進(jìn)行定義,以接受其他的格式。當(dāng)然,2000年臨近,請你最好還是使用四位來表示年份。既然你已經(jīng)理解了INSERT語句是怎樣工作的了,讓我們轉(zhuǎn)到EMPLOYEES表中的其他部分:INSERTINTOEMPLOYEESVALUES('Bunyan','Paul','1970-07-04','Boston',12,70000);INSERTINTOEMPLOYEESVALUES('John','Adams','1992-01-21','Boston',20,100000);INSERTINTOEMPLOYEESVALUES('Smith','Pocahontas','1976-04-06','LosAngles',12,100000);INSERTINTOEMPLOYEESVALUES('Smith','Bessie','1940-05-02','Boston',5,200000);INSERTINTOEMPLOYEESVALUES('Jones','Davy','1970-10-10','Boston',8,45000);INSERTINTOEMPLOYEESVALUES('Jones','Indiana','1992-02-01','Chicago',NULL,NULL);在最后一項(xiàng)中,我們不知道Jones先生的工薪級別和年薪,所以我們輸入NULL(不要引號)。NULL是SQL中的一種特殊情況,我們以后將進(jìn)行詳細(xì)的討論。現(xiàn)在我們只需認(rèn)為NULL表示一種未知的值。有時,像我們剛才所討論的情況,我們可能希望對某一些而不是全部的列進(jìn)行賦值。除了對要省略的列輸入NULL外,還可以采用另外一種INSERT語句,如下:INSERTINTOEMPLOYEES(FIRST_NAME,LAST_NAME,HIRE_DATE,BRANCH_OFFICE)VALUE('Indiana','Jones','1992-02-01','Indianapolis');這樣,我們先在表名之后列出一系列列名。未列出的列中將自動填入缺省值,如果沒有設(shè)置缺省值則填入NULL。請注意我們改變了列的順序,而值的順序要對應(yīng)新的列的順序。如果該語句中省略了FIRST_NAME和LAST_NAME項(xiàng)(這兩項(xiàng)規(guī)定不能為空),SQL操作將失敗。讓我們來看一看上述INSERT語句的語法圖:INSERTINTOtable[(column{,column})]VALUES(columnvalue[{,columnvalue}]);和前一篇文章中一樣,我們用方括號來表示可選項(xiàng),大括號表示可以重復(fù)任意次數(shù)的項(xiàng)(不能在實(shí)際的SQL語句中使用這些特殊字符)。VALUE子句和可選的列名列表中必須使用圓括號。SELECT語句SELECT語句可以從一個或多個表中選取特定的行和列。因?yàn)椴樵兒蜋z索數(shù)據(jù)是數(shù)據(jù)庫管理中最重要的功能,所以SELECT語句在SQL中是工作量最大的部分。實(shí)際上,僅僅是訪問數(shù)據(jù)庫來分析數(shù)據(jù)并生成報表的人可以對其他SQL語句一竅不通。SELECT語句的結(jié)果通常是生成另外一個表。在執(zhí)行過程中系統(tǒng)根據(jù)用戶的標(biāo)準(zhǔn)從數(shù)據(jù)庫中選出匹配的行和列,并將結(jié)果放到臨時的表中。在直接SQL(directSQL)中,它將結(jié)果顯示在終端的顯示屏上,或者將結(jié)果送到打印機(jī)或文件中。也可以結(jié)合其他SQL語句來將結(jié)果放到一個已知名稱的表中。SELECT語句功能強(qiáng)大。雖然表面上看來它只用來完成本文第一部分中提到的關(guān)系代數(shù)運(yùn)算“選擇”(或稱“限制”),但實(shí)際上它也可以完成其他兩種關(guān)系運(yùn)算—“投影”和“連接”,SELECT語句還可以完成聚合計(jì)算并對數(shù)據(jù)進(jìn)行排序。SELECT語句最簡單的語法如下:SELECTcolumnsFROMtables;當(dāng)我們以這種形式執(zhí)行一條SELECT語句時,系統(tǒng)返回由所選擇的列以及用戶選擇的表中所有指定的行組成的一個結(jié)果表。這就是實(shí)現(xiàn)關(guān)系投影運(yùn)算的一個形式。讓我們看一下使用圖1中EMPLOYEES表的一些例子(這個表是我們以后所有SELECT語句實(shí)例都要使用的。而我們在圖2和圖3中給出了查詢的實(shí)際結(jié)果。我們將在其他的例子中使用這些結(jié)果)。假設(shè)你想查看雇員工作部門的列表。那下面就是你所需要編寫的SQL查詢:SELECTBRANCH_OFFICEFROMEMPLOYEES;以上SELECT語句的執(zhí)行將產(chǎn)生如圖2中表2所示的結(jié)果。由于我們在SELECT語句中只指定了一個列,所以我們的結(jié)果表中也只有一個列。注意結(jié)果表中具有重復(fù)的行,這是因?yàn)橛卸鄠€雇員在同一部門工作(記住SQL從所選的所有行中將值返回)。要消除結(jié)果中的重復(fù)行,只要在SELECT語句中加上DISTINCT子句:SELECTDISTINCTBRANCH_OFFICEFROMEMPLOYEES;這次查詢的結(jié)果如表3所示?,F(xiàn)在已經(jīng)消除了重復(fù)的行,但結(jié)果并不是按照順序排列的。如果你希望以字母表順序?qū)⒔Y(jié)果列出又該怎么做呢?只要使用ORDERBY子句就可以按照升序或降序來排列結(jié)果:SELECTDISTINCTBRANCH_OFFICEFROMEMPLOYEESORDERBYBRANCH_OFFICEASC;這一查詢的結(jié)果如表4所示。請注意在ORDERBY之后是如何放置列名BRANCH_OFFICE的,這就是我們想要對其進(jìn)行排序的列。為什么即使是結(jié)果表中只有一個列時我們也必須指出列名呢?這是因?yàn)槲覀冞€能夠按照表中其他列進(jìn)行排序,即使它們并不顯示出來。列名BRANCH_OFFICE之后的關(guān)鍵字ASC表示按照升序排列。如果你希望以降序排列,那么可以用關(guān)鍵字DESCo同樣我們應(yīng)該指出ORDERBY子句只將臨時表中的結(jié)果進(jìn)行排序;并不影響原來的表。假設(shè)我們希望得到按部門排序并從工資最高的雇員到工資最低的雇員排列的列表。除了工資括號中的內(nèi)容,我們還希望看到按照聘用時間從最近聘用的雇員開始列出的列表。以下是你將要用到的語句:SELECTBRANCH_OFFICE,FIRST_NAME,LAST_NAME,SALARY,HIRE_DATEFROMEMPLOYEESORDERBYSALARYDESC,HIRE_DATEDESC;這里我們進(jìn)行了多列的選擇和排序。排序的優(yōu)先級由語句中的列名順序所決定。SQL將先對列出的第一個列進(jìn)行排序。如果在第一個列中出現(xiàn)了重復(fù)的行時,這些行將被按照第二列進(jìn)行排序,如果在第二列中又出現(xiàn)了重復(fù)的行時,這些行又將被按照第三列進(jìn)行排序 如此類推。這次查詢的結(jié)果如表5所示。將一個很長的表中的所有列名寫出來是一件相當(dāng)麻煩的事,所以SQL允許在選擇表中所有的列時使用*號:SELECT*FROMEMPLOYEES;這次查詢返回整個EMPLOYEES表,如表1所示。下面我們對開始時給出的SELECT語句的語法進(jìn)行一下更新(豎直線表示一個可選項(xiàng),允許在其中選擇一項(xiàng)。):SELECT[DISTINCT](column[{,columns}])|*FROMtable[{,table}][ORDERBYcolumn[ASC]|DESC[{,column[ASC]|DESC}]];定義選擇標(biāo)準(zhǔn)在我們目前所介紹的SELECT語句中,我們對結(jié)果表中的列作出了選擇但返回的是表中所有的行。讓我們看一下如何對SELECT語句進(jìn)行限制使得它只返回希望得到的行:SELECTcolumnsFROMtables[WHEREpredicates];WHERE子句對條件進(jìn)行了設(shè)置,只有滿足條件的行才被包括到結(jié)果表中。這些條件由斷言(predicate)進(jìn)行指定(斷言指出了關(guān)于某件事情的一種可能的事實(shí))。如果該斷言對于某個給定的行成立,該行將被包括到結(jié)果表中,否則該行被忽略。在SQL語句中斷言通常通過比較來表示。例如,假如你需要查詢所有姓為Jones的職員,則可以使用以下SELECT語句:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones';LAST_NAME='Jones部分就是斷言。在執(zhí)行該語句時,SQL將每一行的LAST_NAME列與“Jones”進(jìn)行比較。如果某一職員的姓為Jones”,即斷言成立,該職員的信息將被包括到結(jié)果表中(見表6)。使用最多的六種比較我們上例中的斷言包括一種基于“等值”的比較(LAST_NAME='Jones'),但是SQL斷言還可以包含其他幾種類型的比較。其中最常用的為:等于=不等于<>小于<大于>小于或等于<=大于或等于>=下面給出了不是基于等值比較的一個例子:SELECT*FROMEMPLOYEESWHERESALARY>50000;這一查詢將返回年薪高于$50,000.00的職員(參見表7)。邏輯連接符有時我們需要定義一條不止一種斷言的SELECT語句。舉例來說,如果你僅僅想查看DavyJones的信息的話,表6中的結(jié)果將是不正確的。為了進(jìn)一步定義一個WHERE子句,用戶可以使用邏輯連接符AND,OR和NOT。為了只得到職員DavyJones的記錄,用戶可以輸入如下語句:SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones'ANDFIRST_NAME='Davy';在本例中,我們通過邏輯連接符AND將兩個斷言連接起來。只有兩個斷言都滿足時整個表達(dá)式才會滿足。如果用戶需要定義一個SELECT語句來使得當(dāng)其中任何一項(xiàng)成立就滿足條件時,可以使用OR連接符:

SELECT*FROMEMPLOYEESWHERELAST_NAME='Jones'ORLAST_NAME='Smith';有時定義一個斷言的最好方法是通過相反的描述來說明。如果你想要查看除了Boston辦事處的職員以外的其他所有職員的信息時,你可以進(jìn)行如下的查詢:SELECT*FROMEMPLOYEESWHERENOT(BRANCH_OFFICE='Boston');關(guān)鍵字NOT后面跟著用圓括號括起來的比較表達(dá)式。其結(jié)果是對結(jié)果取否定。如果某一職員所在部門的辦事處在Boston,括號內(nèi)的表達(dá)式返回true,但是NOT操作符將該值取反,所以該行將不被選中。斷言可以與其他的斷言嵌套使用。為了保證它們以正確的順序進(jìn)行求值,可以用括號將它們括起來:SELECT*FROMEMPLOYEESWHERE(LAST_NAME='Jones'ANDFIRST_NAME='Indiana')OR(LAST_NAME='Smith'ANDFIRST_NAME='Bessie');SQL沿用數(shù)學(xué)上標(biāo)準(zhǔn)的表達(dá)式求值的約定一圓括號內(nèi)的表達(dá)式將最先進(jìn)行求值,其他表達(dá)式將從左到右進(jìn)行求值。以上對邏輯連接符進(jìn)行了說明,在對下面的內(nèi)容進(jìn)行說明之前,我們再一次對SELECT語句的語法進(jìn)行更新:SELECT[DISTINCT](column[{,column}])1*FROMtable[{,table}][ORDERBYcolumn[ASC]I[DESC[{,column[ASC]|[DESC}]](column[{,column}])1*FROMtable[{,table}][ORDERBYcolumn[ASC]I[DESC[{,column[ASC]|[DESC}]]WHEREpredicate[{logical-connectorpredicate}];NULL和三值邏輯在SQL中NULL是一個復(fù)雜的話題,關(guān)于NULL的詳細(xì)描述更適合于在SQL的高級教程而不是現(xiàn)在的入門教程中進(jìn)行介紹。但由于NULL需要進(jìn)行特殊處理,并且你也很可能會遇到它,所以我們還是簡略地進(jìn)行一下說明。首先,在斷言中進(jìn)行NULL判斷時需要特殊的語法。例如,如果用戶需要顯示所有年薪未知的職員的全部信息,用戶可以使用如下SELECT語句:SELECT*FROMEMPLOYEESWHERESALARYISNULL;相反,如果用戶需要所有已知年薪數(shù)據(jù)的職員的信息,你可以使用以下語句SELECT*FROMEMPLOYEESWHERESALARYISNOTNULL;請注意我們在列名之后使用了關(guān)鍵字ISNULL或ISNOTNULL,而不是標(biāo)準(zhǔn)的比較形式:COLUMN=NULL、COLUMN<>NULL或是邏輯操作符NOT(NULL)。這種形式相當(dāng)簡單。但當(dāng)你不明確地測試NULL(而它們確實(shí)存在)時,事情會變得很混亂。例如,回過頭來看我們圖1中的EM-PLOYEES表,可以看到IndianaJones的工薪等級或年薪值都是未知的。這兩個列都包含NULL??梢韵胂筮\(yùn)行如下的查詢:SELECT*FROMEMPLOYEESWHEREGRADE<=SALARY;此時‘IndianaJones應(yīng)該出現(xiàn)在結(jié)果表中。因?yàn)镹ULL都是相等的,所以可以想象它們是能夠通過GRADE小于等于SALARY的檢查的。這其實(shí)是一個毫無疑義的查詢,但是并沒有關(guān)系。SQL允許進(jìn)行這樣的比較,只要兩個列都是數(shù)字類型的。然而,IndianaJones并沒有出現(xiàn)在查詢的結(jié)果中,為什么?正如我們早先提到過的,NULL表示未知的值(而不是象某些人所想象的那樣表示一個為NULL的值)。對于SQL來說意味著這個值是未知的,而只要這個值為未知,就不能將其與其他值比較(即使其他值也是NULL)。所以SQL允許除了在true和false之外還有第三種類型的真值,稱之為“非確定”(unknown)值。如果比較的兩邊都是NULL,整個斷言就被認(rèn)為是非確定的。將一個非確定斷言取反或使用AND或OR與其他斷言進(jìn)行合并之后,其結(jié)果仍是非確定的。由于結(jié)果表中只包括斷言值為“真”的行,所以NULL不可能滿足該檢查。從而需要使用特殊的操作符ISNULL和ISNOTNULL。UPDATE語句UPDATE語句允許用戶在已知的表中對現(xiàn)有的行進(jìn)行修改。例如,我們剛剛發(fā)現(xiàn)IndianaJones的等級為16,工資為$40,000.00,我們可以通過下面的SQL語句對數(shù)據(jù)庫進(jìn)行更新(并清除那些煩人的NULL)。UPDATEEMPLOYEESSETGRADE=16,SALARY=40000WHEREFIRST_NAME='Indiana'ANDLAST_NAME='Jones';上面的例子說明了一個單行更新,但是UPDATE語句可以對多行進(jìn)行操作。滿足WHERE條件的所有行都將被更新。如果,你想讓Boston辦事處中的所有職員搬到NewYork,你可以使用如下語句:UPDATEEMPLOYEESSETBRANCH_OFFICE='NewYork'WHEREBRANCH_OFFICE='Boston';如果忽略WHERE子句,表中所有行中的部門值都將被更新為NewYork。UPDATE語句的語法流圖如下面所示:UPDATEtableSETcolumn=value[{,column=value}][WHEREpredicate[{logical-connectorpredicate}]];DELETE語句DELETE語句用來刪除已知表中的行。如同UPDATE語句中一樣,所有滿足WHERE子句中條件的行都將被刪除。由于SQL中沒有UNDO語句或是“你確認(rèn)刪除嗎?”之類的警告,在執(zhí)行這條語句時千萬要小心。如果決定取消LosAngeles辦事處并解雇辦事處的所有職員,這一卑鄙的工作可以由以下這條語句來實(shí)現(xiàn):DELETEFROMEMPLOYEESWHEREBRANCH_OFFICE='LosAngeles';如同UPDATE語句中一樣,省略WHERE子句將使得操作施加到表中所有的行。DELETE語句的語法流圖如下面所示:DELETEFROMtable[WHEREpredicate[{logical-connectorpredicate}]];

SQL語句集錦--語句功能--數(shù)據(jù)操作SELECT --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列INSERT --向數(shù)據(jù)庫表添加新數(shù)據(jù)行DELETE --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行UPDATE --更新數(shù)據(jù)庫表中的數(shù)據(jù)--數(shù)據(jù)定義CREATETABLE --創(chuàng)建一個數(shù)據(jù)庫表DROPTABLE --從數(shù)據(jù)庫中刪除表ALTERTABLE --修改數(shù)據(jù)庫表結(jié)構(gòu)CREATEVIEW --創(chuàng)建一個視圖DROPVIEW --從數(shù)據(jù)庫中刪除視圖CREATEINDEX --為數(shù)據(jù)庫表創(chuàng)建一個索引DROPINDEX --從數(shù)據(jù)庫中刪除索引CREATEPROCEDURE--創(chuàng)建一個存儲過程DROPPROCEDURE --從數(shù)據(jù)庫中刪除存儲過程CREATETRIGGER--創(chuàng)建一個觸發(fā)器DROPTRIGGER --從數(shù)據(jù)庫中刪除觸發(fā)器CREATESCHEMA --向數(shù)據(jù)庫添加一個新模式DROPSCHEMA --從數(shù)據(jù)庫中刪除一個模式CREATEDOMAINALTERDOMAIN--CREATEDOMAINALTERDOMAIN--創(chuàng)建一個數(shù)據(jù)值域--改變域定義DROPDOMAIN-從數(shù)據(jù)庫中刪除一個域DROPDOMAIN-從數(shù)據(jù)庫中刪除一個域--數(shù)據(jù)控制GRANT--授予用戶訪問權(quán)限D(zhuǎn)ENY --拒絕用戶訪問REVOKE --解除用戶訪問權(quán)限--數(shù)據(jù)控制GRANT--授予用戶訪問權(quán)限D(zhuǎn)ENY --拒絕用戶訪問REVOKE --解除用戶訪問權(quán)限--事務(wù)控制COMMIT --結(jié)束當(dāng)前事務(wù)ROLLBACK --中止當(dāng)前事務(wù)SETTRANSACTION --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征--程序化SQLDECLARE --為查詢設(shè)定游標(biāo)EXPLAN --為查詢描述數(shù)據(jù)訪問計(jì)劃OPEN --檢索查詢結(jié)果打開一個游標(biāo)FETCH --檢索一行查詢結(jié)果CLOSE --關(guān)閉游標(biāo)PREPARE --為動態(tài)執(zhí)行準(zhǔn)備SQL語句EXECUTE --動態(tài)地執(zhí)行SQL語句DESCRIBE --描述準(zhǔn)備好的查詢---局部變量declare@idchar(10)--set@id='10010001'select@id='10010001'---全局變量---必須以@@開頭--IFELSEdeclare@xint@yint@zintselect@x=1@yselect@id='10010001'---全局變量---必須以@@開頭--IFELSEdeclare@xint@yint@zintselect@x=1@y=2@z=3if@x>@yprint'x>y'--打印字符串'x>y'elseif@y>@zprint'y>z'elseprint'z>y'--CASEusepanguupdateemployeesete_wage=casewhenjob_level='1'thene_wage*1.08whenjob_level='2'thene_wage*1.07whenjob_level='3'thene_wage*1.06elsee_wage*1.05end--WHILECONTINUEBREAKdeclare@xint@yint@cintselect@x=1@y=lwhile@x<3beginprint@x--打印變量x的值while@y<3beginselect@c=100*@x+@yprint@c--打印變量c的值select@y=@y+1endselect@x=@x+1select@y=1end--WAITFOR-例等待1小時2分零3秒后才執(zhí)行SELECT語句waitfordelay'01:02:03'select*fromemployee-例等到晚上11點(diǎn)零8分后才執(zhí)行SELECT語句waitfortime'23:08:00'select*fromemployee***SELECT***select*(列名)fromtable_name(表名)wherecolumn_nameoperatorvalueex:(宿主)select*fromstock_informationwherestockid=str(nid)stockname='str_name'stocknamelike'%findthis%'stocknamelike'[a-zA-Z]%' ([]指定值的范圍)stocknamelike'[人F-M]%' (人排除指定范圍) 只能在使用like關(guān)鍵字的where子句中使用通配符)orstockpath='stock_path'orstocknumber<1000andstockindex=24notstocksex='man'stocknumberbetween20and100stocknumberin(10,20,30)orderbystockiddesc(asc) 排序,desc-降序,asc-升序orderby1,2 by列號stockname=(selectstocknamefromstock_informationwherestockid=4) 子查詢 除非能確保內(nèi)層select只返回一個行的值, 否則應(yīng)在外層where子句中用一個in限定符selectdistinctcolumn_nameformtable_name distinct指定檢索獨(dú)有的列值,不重復(fù)selectstocknumber,"stocknumber+10"=stocknumber+10fromtable_nameselectstockname,"stocknumber"=count(*)fromtable_namegroupbystockname groupby將表按行分組,指定列中有相同的值havingcount(*)=2 having選定指定的組select*fromtable1,table2wheretablel.id*=table2.id 左外部連接,tablei中有的而table2中沒有得以null表示table1.id=*table2.id 右外部連接selectstocknamefromtable1union[all]——union合并查詢結(jié)果集,all-保留重復(fù)行selectstocknamefromtable2***insert***insertintotable_name(Stock_name,Stock_number)value("xxx","xxxx")value(selectStockname,StocknumberfromStock_table2)---value為select語句***update***updatetable_namesetStockname="xxx"[whereStockid=3]Stockname=defaultStockname=nullStocknumber=Stockname+4***delete***

deletefromtable_namewhereStockid=3truncatetable_name 刪除表中所有行,仍保持表的完整性droptabletable_name 完全刪除表***altertable***---修改數(shù)據(jù)庫表結(jié)構(gòu)altertabledatabase.owner.table_nameaddcolumn_namechar(2)null sp_helptable_name 顯示表已有特征createtabletable_name(namechar(20),agesmallint,lnamevarchar(30))insertintotable_nameselect 實(shí)現(xiàn)刪除列的方法(創(chuàng)建新表)altertabletable_namedropconstraintStockname_default——刪除Stockname的default約束***function(/*常用函數(shù)*/)*** 統(tǒng)計(jì)函數(shù) AVG --求平均值COUNT--統(tǒng)計(jì)數(shù)目MAX --求最大值MIN --求最小值SUM --求和--AVGusepanguselectavg(e_wage)asdept_avgWageusepangufromemployeegroupbydept_id--MAX--求工資最高的員工姓名fromemployeegroupbydept_id--MAX--求工資最高的員工姓名selecte_namefromemployeewheree_wage=(selectmax(e_wage)fromemployee)--STDEV()--STDEV()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差--STDEVP()--STDEVP0函數(shù)返回總體標(biāo)準(zhǔn)差--VAR()--VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計(jì)變異數(shù)--VARP()--VARP()函數(shù)返回總體變異數(shù) 算術(shù)函數(shù) /***三角函數(shù)***/SIN(float_expression)--返回以弧度表示的角的正弦COS(float_expression)--返回以弧度表示的角的余弦TAN(float_expression)--返回以弧度表示的角的正切COT(float_expression)--返回以弧度表示的角的余切/***反三角函數(shù)***/ASIN(float_expression)--返回正弦是FLOAT值的以弧度表示的角ACOS(float_expression)--返回余弦是FLOAT值的以弧度表示的角ATAN(float_expression)--返回正切是FLOAT值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1/float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為--INTEGER/MONEY/REAL/FLOAT類型RADIANS(numeric_expression)--把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類型可為--INTEGER/MONEY/REAL/FLOAT類型EXP(float_expression)--返回表達(dá)式的指數(shù)值LOG(float_expression)--返回表達(dá)式的自然對數(shù)值LOG10(float_expression)--返回表達(dá)式的以10為底的對數(shù)值SQRT(float_expression)--返回表達(dá)式的平方根/***取近似值函數(shù)***/CEILING(numeric_expression)--返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為--INTEGER/MONEY/REAL/FLOAT類型FLOOR(numeric_expression) --返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為--INTEGER/MONEY/REAL/FLOAT類型ROUND(numeric_expression) --返回以integer_expression為精度的四舍五入值返回的數(shù)據(jù)―類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT類型ABS(numeric_expression) --返回表達(dá)式的絕對值返回的數(shù)據(jù)類型與表達(dá)式相同可為--INTEGER/MONEY/REAL/FLOAT類型SIGN(numeric_expression) --測試參數(shù)的正負(fù)號返回0零值1正數(shù)或-1負(fù)數(shù)返回的數(shù)據(jù)類型―與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT類型PI() ―返回值為n即3.1415926535897936RAND([integer_expression])--用任選的[integer_expression]做種子值得出0-1間的隨機(jī)浮點(diǎn)數(shù) 字符串函數(shù) ASCII() --函數(shù)返回字符表達(dá)式最左端字符的ASCII碼值CHAR()--函數(shù)用于將ASCII碼轉(zhuǎn)換為字符--如果沒有輸入0?255之間的ASCII碼值CHAR函數(shù)會返回一個NULL值LOWER()--函數(shù)把字符串全部轉(zhuǎn)換為小寫UPPER() --函數(shù)把字符串全部轉(zhuǎn)換為大寫STR() --函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)LTRIM()--函數(shù)把字符串頭部的空格去掉RTRIM()--函數(shù)把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING()--函數(shù)返回部分字符串CHARINDEX(),PATINDEX()--函數(shù)返回字符串中某個指定的子串出現(xiàn)的開始位置

SOUNDEX()--函數(shù)返回一個四位字符碼--SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對數(shù)字和漢字均只返回0值DIFFERENCE() --函數(shù)返回由SOUNDEX函數(shù)返回的兩個字符表達(dá)式的值的差異--0兩個SOUNDEX函數(shù)返回值的第一個字符不同--1兩個SOUNDEX函數(shù)返回值的第一個字符相同--2兩個SOUNDEX函數(shù)返回值的第一二個字符相同--3兩個SOUNDEX函數(shù)返回值的第一二三個字符相同--4兩個SOUNDEX函數(shù)返回值完全相同QUOTENAME()--函數(shù)返回被特定字符括起來的字符串/*selectquotename('abc','{')quotename('abc')運(yùn)行結(jié)果如下 {{abc}[abc]*/REPLICATE() --函數(shù)返回一個重復(fù)character_expression指定次數(shù)的字符串/*selectreplicate('abc',3)replicate('abc',-2)運(yùn)行結(jié)果如下abcabcabcNULL*/abcdefg*/REVERSE() --函數(shù)將指定的字符串的字符排列順序顛倒REPLACE。 -函數(shù)返回被替換了指定子串的字符串/*selectreplace('abcl23g','123','def)運(yùn)行結(jié)果如下REVERSE() --函數(shù)將指定的字符串的字符排列順序顛倒REPLACE。 -函數(shù)返回被替換了指定子串的字符串/*selectreplace('abcl23g','123','def)運(yùn)行結(jié)果如下SPACE() --函數(shù)返回一個有指定長度的空白字符串STUFF() --函數(shù)用另一子串替換字符串指定位置長度的子串 數(shù)據(jù)類型轉(zhuǎn)換函數(shù) CAST()函數(shù)語法如下CAST()(<expression>AS<data_type>[length])CONVERT()函數(shù)語法如下CONVERT()(<data_type>[length],<expression>[,style])selectcast(100+99aschar)convert(varchar(12),getdate())運(yùn)行結(jié)果如下199Jan152000 日期函數(shù) DAY()--函數(shù)返回date_expression中的日期值MONTH() --函數(shù)返回date_expression中的月份值YEAR()--函數(shù)返回date_expression中的年份值DATEADD(<datepart>,<number>,<date>)-函數(shù)返回指定日期date加上指定的額外日期間隔number產(chǎn)生的新日期DATEDIFF(<datepart>,<number>,<date>)--函數(shù)返回兩個指定日期在datepart方面的不同之處DATENAME(<datepart>,<date>)--函數(shù)以字符串的形式返回日期的指定部分DATEPART(<datepart>,<date>)--函數(shù)以整數(shù)值的形式返回日期的指定部分GETDATE()--函數(shù)以DATETIME的缺省格式返回系統(tǒng)當(dāng)前的日期和時間 系統(tǒng)函數(shù) APP_NAME() --函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱COALESCE()--函數(shù)返回眾多表達(dá)式中第一個非NULL表達(dá)式的值COL_LENGTH(<'table_name'>,<'column_name'>)--函數(shù)返回表中指定字段的長度值COL_NAME(<table_id>,<column_id>) --函數(shù)返回表中指定字段的名稱即列名DATALENGTH()--函數(shù)返回數(shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長度DB_ID(['database_name'])--函數(shù)返回數(shù)據(jù)庫的編號DB_NAME(database_id)--函數(shù)返回數(shù)據(jù)庫的名稱HOST_ID() --函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱HOST_NAME() --函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱IDENTITY(<data_type>[,seedincrement])[AScolumn_name])--IDENTITY。函數(shù)只在SELECTINTO語句中使用用于插入一個identitycolumn列到新表中/*selectidentity(int,1,1)ascolumn_nameintonewtablefromoldtable*/ISDATE()--函數(shù)判斷所給定的表達(dá)式是否為合理日期ISNULL(vcheck_expression>,vreplacement_value>)--函數(shù)將表達(dá)式中的NULL值用指定值替換ISNUMERIC()-函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值NEWID()--函數(shù)返回一個UNIQUEIDENTIFIER類型的數(shù)值NULLIF(<expression1>,<expression2>)--NULLIF函數(shù)在expression1與expression2相等時返回NULL值若不相等時則返回expression1的值主要SQL語句詳解CREATEDATABASEdatabase_name[WITHLOGIN“pathname”]創(chuàng)建數(shù)據(jù)庫。database_name:數(shù)據(jù)庫名稱?!皃athname":事務(wù)處理日志文件。創(chuàng)建一database_name.dbs目錄,存取權(quán)限由GRANT設(shè)定,無日志文件就不能使用BEGINWORK等事務(wù)語句(可用STARTDATABASE語句來改變)??蛇x定當(dāng)前數(shù)據(jù)庫的日志文件。如:selectdirpathformsystableswheretabtype=“L”;例:createdatabsecustomerdbwithlogin“/usr/john/log/customer.log”;DATABASEdatabse-name[EXCLUSIVE]選擇數(shù)據(jù)庫。database_name:數(shù)據(jù)庫名稱。EXCLUSIVE:獨(dú)占狀態(tài)。存取當(dāng)前目錄和DBPATH中指定的目錄下的數(shù)據(jù)庫,事務(wù)中處理過程中不要使用此語句。例:dtabasecustomerdb;CLOSEDATABASE關(guān)閉當(dāng)前數(shù)據(jù)庫。database_name:數(shù)據(jù)庫名稱。此語句之后,只有下列語句合法:CREATEDATABASE;DATABASE;DROPDATABSE;ROLLFORWARDDATABASE;刪除數(shù)據(jù)庫前必須使用此語句。例:closedatabase;DROPDATABASEdatabase_name刪除指定數(shù)據(jù)庫。database_name:數(shù)據(jù)庫名稱。用戶是DBA或所有表的擁有者;刪除所有文件,但不包括數(shù)據(jù)庫目錄;不允許刪除當(dāng)前數(shù)據(jù)庫(須先關(guān)閉當(dāng)前數(shù)據(jù)庫);事務(wù)中處理過程中不能使用此語句,通過ROLLBACKWORK也不可將數(shù)據(jù)庫恢復(fù)。例:dropdatabsecustomerdb;CREATE[TEMP]TABLEtable-name(column_namedatatype[NOTNULL],…)[IN“pathname”]創(chuàng)建表或臨時表。table-name:表名稱。column_name:字段名稱。data-type:字段數(shù)據(jù)類型。path-name:指定表的存放位置TEMP用于指定建立臨時表;表名要唯一,字段要唯一;有CONNECT權(quán)限的用戶可建立臨時表;創(chuàng)建的表缺省允許CONNECT用戶存取,但不可以ALTER。例:createtableuser(c0serialnotnull,c1char(10),c2char(2),c3smallint,c4decimal(6,3),c5date)in“usr/john/customer.dbs/user;?ALTERTABLEALTERTABLEtable-name{ADD(newcol_namenewcol_type[BEFOREoldcol_name],…)|DROP(oldcol_name,…)|MODIFY(oldcol_namenewcol_type[NOTNULL],…)},…修改表結(jié)構(gòu)。table-name:表名稱。newcol_name:新字段名稱newcol_type:新字段類型oldcol_name:老字段名稱可以使用單個或多個ADD子句、DROP子句、MODIFY子句,但某個字句失敗,操作即中止;原字段是NULL,不允許MODIFY為NOTNULL,除非所有NULL字段中均非空,反之可以;ALTER使用者是表的擁有者或擁有DBA權(quán)限,或被授權(quán);事務(wù)中處理過程中不要使用此語句。例:altertableuseradd(c6char(20)beforec5);?RENAMETABLEoldnameTOnewname修改表名。oldname:原名稱。newname:新名稱。RENAME使用者是表的擁有者或擁有DBA權(quán)限,或被授權(quán);事務(wù)中處理過程中不要使用此語句。例:renameusertobbb;DROPTABLEtable-name刪除表。table-name:表名稱。刪除表意味著刪除其中所有數(shù)據(jù)、各字段上的索引及對表的賦權(quán)、視圖等;用戶不能刪除任何系統(tǒng)目錄表;語句使用者是表擁有者或擁有DBA權(quán)限,事務(wù)中處理過程中不要使用此語句。RENAMECOLUMNtable.oldcolumn,TOnewcolumn修改字段名。table.oldcolumn:表名及原字段名稱newcolumn:新字段名稱。語句使用者是表的擁有者或擁有DBA權(quán)限或有ALTER權(quán)限的用戶,事務(wù)中處理過程中不要使用此語句。例:renamecolumnuser.c6toc7;CREATEVIEWview-namecolumn-listCREATEVIEWview-namecolumn-listASselect_statement[WITHCHECKOPTION]創(chuàng)建視圖。view-name:視圖名稱。column-list:字段列表。select_statement:SELECT語句。以下語句不使用視圖:ALTERTABLE,DROPINDEX,ALTERINDEX,LOCKTABLE,CREATEINDEX,RENAMETABLE;視圖將延用基表的字段名,對表達(dá)式等虛字段和多表間字段重名必須指明標(biāo)識其字段名;若對視圖中某些字段命名,則所有字段都必須命名;視圖中數(shù)據(jù)類型延用基表中的數(shù)據(jù)類型,虛字段起訣于表達(dá)式;不能使用ORDERBY和UNION子句;對視圖中所有的字段要有SELECT權(quán)限;事務(wù)中處理過程中使用此語句,即使事務(wù)回滾,視圖也將建立,不能恢復(fù)。例:createviewv_userasselect*fromuserwherec1=“B1”;DROPVIEWview-name刪除視圖。view-name:視圖名稱。用戶可刪除自己建立的視圖;視圖的后代視圖也被刪除;事務(wù)中處理中不要使用此語句。例:dropviewv_user;CREATEINDEXCREATE[UNIQUE/DISTINCT][CLUSTER]INDEXindex_nameONtable_name([column_nameASC/DESC],...)創(chuàng)建索引。index_name:索弓丨名稱。

table_name:表名稱。column_name:字段名稱。UNIQUE/DISTINCT:唯一索引。CLUSTER:使表的物理存放順序按索引排列。ASC/DESC:升序或降序,缺省升序。語句執(zhí)行時,將表的狀態(tài)置為EXCLUSIVE;復(fù)合索引最多包含8個字段,所有字段長度和不得大于120字節(jié);事務(wù)中處理過程中使用此語句,即使事務(wù)回滾,索引將建立,不能恢復(fù)。例:createclusterindexix_useronuser(c5);ALTERINDEXindex-nameTO[NOT]CLUSTER修改索引性質(zhì)。index-name:索弓丨名稱。TO[NOT]CLUSTER:去掉或加上CLUSTER屬性。語句執(zhí)行時,將表的狀態(tài)置為EXCLUSIVE;事務(wù)中處理過程中使用此語句,即使事務(wù)回滾,索引性質(zhì)將改變,不能恢復(fù)。例:alterindexix_usertonotcluster;DROPINDEXindex-name刪除索引。index-name:索弓丨名稱。語句使用者是索引的擁有者或擁有DBA權(quán)限,事務(wù)中處理過程中不要使用此語句,否則事務(wù)無法恢復(fù)。例:dropindexix_user;?CREATESYNONYMsynonymFORtable-name創(chuàng)建同義名。synonym:同義名例:dropindexix_user;?CREATESYNONYMsynonymFORtable-name創(chuàng)建同義名。synonym:同義名table-name:表名稱數(shù)據(jù)庫的創(chuàng)建者可以使用同義名;沒有賦予同義名權(quán)限的用戶不能使用同義名;同義名不能和表名相同;事務(wù)中處理過程中不要使用此語句。例:createsynonymuser_aliasforuser;DROPSYNONYMsynonym刪除同義名。synonym:同義名可以刪除自己建立的同義名;事務(wù)中處理過程中不要使用此語句,否則無法恢復(fù)。例:dropsynonymuser_alias;UPDATESTATISTICS[FORTABLEtabl-ename]更新數(shù)據(jù)庫的統(tǒng)計(jì)數(shù)字。table-name:表名稱此語句僅作用于當(dāng)前數(shù)據(jù)庫;可提高查詢效率;只有執(zhí)行此語句,才改變統(tǒng)計(jì)數(shù)據(jù)。例:updatestatisticsfortableuser;18.GRANT{DBAIRESOURCEICONNECT}TO{PUBLICIuser-list授權(quán)命令。PUBLICIuser-list:全部或指定的用戶。三種權(quán)限居且僅居其一,事務(wù)處理過程中不要執(zhí)行GRANT語句。例:grantresourcetopulbic;GRANTtab-privilegeONtable-nameTO{PUBLICIuser-list}[WITHGRANTOPTION]

授表級權(quán)限。tab-privilege:表級權(quán)限。table-name:表名稱。PUBLICIuser-list:全部或指定的用戶。[WITHGRANTOPTION]:表示被授權(quán)用戶有否權(quán)限進(jìn)行二次授權(quán)。用戶可以在自己建立表達(dá)式或被[WITHGRANTOPTION]準(zhǔn)許的表中進(jìn)行賦權(quán);限定越多的權(quán)限優(yōu)先級越高。例:grantupdate(c1,c6)onusertodickwithgrantoption;附(INFORMIX的權(quán)限)數(shù)據(jù)庫的權(quán)限(控制對數(shù)據(jù)庫的訪問以及數(shù)據(jù)庫中表的創(chuàng)建和刪除)DBA權(quán)限:全部權(quán)利,修改系統(tǒng)表,建立和刪除表與索引、增加和恢復(fù)表數(shù)據(jù),以及授予其他用戶數(shù)據(jù)庫權(quán)限等;RESOURCE權(quán)限:允許對數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行存取,建立永久性表以及索引。CONNECT權(quán)限:只允許對數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行存取,建立和刪除視圖與臨時表。表級權(quán)限(對表的建立、修改、檢索和更新等權(quán)限)ALTER:更改權(quán)限D(zhuǎn)ELETE:刪除權(quán)限INDEX:索引權(quán)限INSERT:插入權(quán)限SELECT[(cols)]:指定字段或所有字段上的查詢權(quán)限,不指明字段缺省為所有字段。UPDATE[(cols)]:指定字段或所有字段上的更新權(quán)限,不指明字段缺省為所有字段。ALL[PRIVILEGES]:以上所有表級權(quán)限19.REVOKE{DBAIRESOURCEICONNECT}FROM{PUBLIC|user-list}收權(quán)命令。PUBLIC|user-list:全部或指定的用戶。三種權(quán)限居且僅居其一,事務(wù)處理過程中不要執(zhí)行GRANT語句。19.REVOKE{DBAIRESOURCEICONNECT}FROM{PUBLIC|user-list}收權(quán)命令。PUBLIC|user-list:全部或指定的用戶。三種權(quán)限居且僅居其一,事務(wù)處理過程中不要執(zhí)行GRANT語句。例:revokeresourcefromjohn;REVOKEtab-privilegeONtable-nameFROM{PUBLIC|user-list}收表級權(quán)限。tab-privilege:表級權(quán)限。table-name:表名稱。PUBLIC|user-list:全部或指定的用戶。[WITHGRANTOPTION]:表示被授權(quán)用戶有否權(quán)限進(jìn)行二次授權(quán)。用戶只能取消由其本人賦予其他用戶的表級存取權(quán)限;不能取消自己的權(quán)限,對SELECT和UPDATE作取消時,將取消所有表中字段的SELECT和UPDATE權(quán)限。例;revokeupdateonuserfromdick;?LOCKTABLEtable-nameIN{SHAREIEXCLUSIVE}MODE記錄級加鎖和表級加鎖或文件加鎖。table-name:表名稱。SHARE:允許讀表中數(shù)據(jù),但不允許作任何修改EXCLUSIVE:禁止其他任何形式訪問表每次只能對表瑣定一次;事務(wù)處理過程中,BEGINWORK后立即執(zhí)行LOCKTABLE以取代記錄級加鎖,COMMITWORK和ROLLBACKWORK語句取消所有對表的加鎖;若沒有事務(wù)處理,鎖將保持到用戶退出或執(zhí)行UNLOCK為止。例:locktableuserinexclusivemode;?UNLOCKTABLEtable-name

取消記錄級加鎖和表級加鎖或文件加鎖。table-name:表名稱。例:unlockuser;?SETLOCKMODETO[NOT]WAIT改變鎖定狀態(tài)。TO[NOT]:等待解鎖,有可能被死鎖或不等待并提示錯誤信息,表示此記錄被鎖,缺省值。訪問一個EXCLUSIVE狀態(tài)下的記錄,將返回一個錯誤。?STARTDATABSEdb_name[WITHLOGIN“pathname”]啟動事務(wù)處理?!皃athname":事務(wù)處理日志文件。執(zhí)行該語句前,需要先關(guān)閉當(dāng)前數(shù)據(jù)庫。例;clostdatabase;startdatabsecustomerwithlogin“/usr/john/log/customer.log”;?BEGINWORK開始事務(wù)。例:beginwork;?COMMITWORK提交(正常結(jié)束)事務(wù)。例:commitwork;?ROLLBACKWORK回滾(非正常結(jié)束)事務(wù)。例:rollbackwork;?SELECTSELECTselect_listFROMtab_name|view_nameWHEREconditionGROUPBYcolumn_nameHAVINGconditionGROUPBYcolumn_nameHAVINGconditionORDERBYcolumn_listINTOTEMPtable_name查詢語句。select_list:選擇表或*tab_name:表名稱view_name:視圖名稱。condition:查詢條件,可使用BETWEEN、IN、LIKE、ISNULL、LIKE、MATCHES、NOT、AND、 OR、 =、 !=或<>、 >、 >=、 <=、 <、 ALL、ANY、 SOMEcolumn_name:分組字段名稱condition:群聚條件column」ist:排序字段列表,缺省ASC,可指定DSC;排序時,NULL值小于非零值。table_name:臨時表名稱例:略附(常用函數(shù))(1)集合函數(shù):count(*)、sum(數(shù)據(jù)項(xiàng)/表達(dá)式)、avg(數(shù)據(jù)項(xiàng)/表達(dá)式)、max(數(shù)據(jù)項(xiàng)/表達(dá)式)、min(數(shù)據(jù)項(xiàng)/表達(dá)式)count(distinct數(shù)據(jù)項(xiàng)/表達(dá)式)、sum(distinct數(shù)據(jù)項(xiàng)/表達(dá)式)、avg(distinct數(shù)據(jù)項(xiàng)/表達(dá)式)(2)代數(shù)函數(shù)和三角函數(shù)HEX(數(shù)據(jù)項(xiàng)/表達(dá)式)、ROUND(數(shù)據(jù)項(xiàng)/表達(dá)式)、TRUNC(數(shù)據(jù)項(xiàng)/表達(dá)式)、TAN(數(shù)據(jù)項(xiàng)/表達(dá)式)、ABS(數(shù)據(jù)項(xiàng)/表達(dá)式)、MOD(被除數(shù),除數(shù))統(tǒng)計(jì)函數(shù)標(biāo)準(zhǔn)差,stdev()、方差,variance()、范圍,rang()時間函數(shù)DAY(日期/時間表達(dá)式):返回數(shù)字型MONTH(日期/時間表達(dá)式):返回整數(shù)WEEKDAY(日期/時間表達(dá)式):0��6,0星期天,1星期一;返回整數(shù)YEAR(日期/時間表達(dá)式)、返回整數(shù)DATE(非日期表達(dá)式):返回日期型EXTEND(日期/時間表達(dá)式,[第一個至最后一個]):返回指定的整數(shù)MDY(月,日,年):返回日期型CURRENT:返回日期型時間函數(shù)ROUND(),四舍五入。如:ROUND(10.95,position)position進(jìn)行四舍五入的前一位置TRUNC(),截取。如:TRUNC(10.95,0)position截取的位置INFORMIX臨時表在下列情況下自動取消:退出數(shù)據(jù)庫訪問工具(如DBACCESS)SQL通話結(jié)束(DISCONNECT)發(fā)出取消表語句退出程序時INSERTINSERTINTOview_nameltable_name[(column」ist)]VALUES(value」ist)或INSERTINTOview_name|table_name[(column」ist)]select_statement插入數(shù)據(jù)view_name|table_name:視圖名或表名稱column」ist:數(shù)據(jù)項(xiàng)列表。value」ist:值列表select_statement:查詢語句。例:略DELETEFROMview_name|table_nameWHEREsearch-conditions刪除語句。view_name|table_name:視圖名或表名稱search-conditions;刪除條件例:略UPDATEUPDATEview_name|table_nameSETcolumn_1=value_1istWHEREsearch_conditions或UPDATEview_name|table_nameSETcolumn_1l*=value_1istWHEREsearch_conditions更新數(shù)據(jù)語句。view_name|table_name:表名稱或視圖表名稱value_1ist:字段值search_conditions:更新數(shù)據(jù)的條件例:略31.CHECKTABLEtable-name檢查索引語句。語句使用者是表的擁有者或擁有DBA權(quán)限;不能對systable使用此語句。例:略REPAIRTABLEtable-name修復(fù)索引。語句使用者是表的擁有者或擁有DBA權(quán)限;不能對systable使用此語句。例:略LOADFROM“file-name"INSERTINTOtable_name[(column_name[,...])]將文本數(shù)據(jù)栽入表中。例:loadform“aa.txt"insertintouser;UNLOADTO“pathname”將表中數(shù)據(jù)卸為文本。例:unloadto“aa.txt”select*fromuser;INFO系統(tǒng)信息查詢。INFOTABLES:得到當(dāng)前數(shù)據(jù)庫上表的名字。INFOcolumnsFORtable_name:指定表上的字段信息。INFOINDEXESFORtable_name:指定表上的索引信息。INFO[ACCESSIPRIVILEGES]FORtable_name:指定表上的存取權(quán)限。INFOSTATUSFORtable_name指定表的狀態(tài)信息。例:infotables;SQL査詢語句使用一、簡單查詢簡單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。例如,下面的語句查詢testtable表中姓名為“張三"的nickname字段和email字段。SELECTnickname,emailFROMtesttableWHEREname=張三'選擇列表選擇列表(select」ist)指出所查詢列,它可以是一組列名列表、星號、表達(dá)式、變量(包括局部變量和全局變量)等構(gòu)成。1、 選擇所有列例如,下面語句顯示testtable表中所有列的數(shù)據(jù):SELECT*FROMtesttable2、 選擇部分列并指定它們的顯示次序查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。例如:SELECTnickname,emailFROMtesttable3、 更改列標(biāo)題在選擇列表中,可重新指定列標(biāo)題。定義格式為:列標(biāo)題=列名列名列標(biāo)題如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識符格式時,應(yīng)使用引號定界符。例如,下列語句使用漢字顯示列標(biāo)題:SELECT昵稱=nickname,電子郵件=emailFROMtesttable4、 刪除重復(fù)行SELECT語句中使用ALL或DISTINCT選項(xiàng)來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)為ALL。使用DISTINCT選項(xiàng)時,對于所有重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。5、限制返回的行數(shù)使用TOPn[PERCENT]選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOPn說明返回n行,而TOPnPERCENT時,說明n是表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。例如:SELECTTOP2*FROMtesttableSELECTTOP20PERCENT*FROMtesttable(二) FROM子句FROM子句指定SELECT語句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應(yīng)使用對象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應(yīng)使用下面語句格式加以限定:SELECTusername,citytable.cityidFROMusertable,citytableWHEREusertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:表名as別名表名別名例如上面語句可用表的別名格式表示為:SELECTusername,b.cityidFROMusertablea,citytablebWHEREa.cityid=b.cityidSELECT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語句所返回的結(jié)果集合中查詢數(shù)據(jù)。例如:SELECTa.au_fname+a.au」nameFROMauthorsa,titleauthorta(SELECTtitle_id,titleFROMtitlesWHEREytd_sales>10000)AStWHEREa.au_id=ta.au_idANDta.title_id=t.title_id此例中,將SELECT返回的結(jié)果集合給予一別名t,然后再從中檢索數(shù)據(jù)。(三) 使用WHERE子句設(shè)置查詢條件WHERE子句設(shè)置查詢條件,過濾掉不需要的數(shù)據(jù)行。例如下面語句查詢年齡大于20的數(shù)據(jù):SELECT*FROMusertableWHEREage>20WHERE子句可包括各種條件運(yùn)算符:比較運(yùn)算符(大小比較):>、>=、=、<、<=、<>、!>、!<范圍運(yùn)算符(表達(dá)式值是否在指定的范圍):BETWEEN...AND...NOTBETWEEN...AND...列表運(yùn)算符(判斷表達(dá)式是否為列表中的指定項(xiàng)):IN(項(xiàng)1,項(xiàng)2......)NOTIN(項(xiàng)1,項(xiàng)模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、NOTLIKE空值判斷符(判斷表達(dá)式是否為空):ISNULL、NOTISNULL邏輯運(yùn)算符(用于多條件的邏輯連接):NOT、AND、OR1、 范圍運(yùn)算符例:ageBETWEEN10AND30相當(dāng)于age>=10ANDage<=302、 列表運(yùn)算符例:countryIN('Germany','China')3、 模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配??捎糜赾har、varchar、text、ntext、datetime和smalldatetime等類型查詢??墒褂靡韵峦ㄅ渥址喊俜痔?:可匹配任意類型和長度的字符,如果是中文,請使用兩個百分號即%%。下劃線_:匹配單個任意字符,它常用來限制表達(dá)式的字符長度。方括號[]:指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。[勺:其取值也[]相同,但它要求所匹配對象為指定字符以外的任一個字符。例如:限制以Publishing結(jié)尾,使用LIKE'%Publishing'限制以A開頭:LIKE'[A]%'限制以A開頭外:LIKEPA]%'4、空值判斷符例WHEREageISNULL5、邏輯運(yùn)算符:優(yōu)先級為NOT、AND、OR(四)查詢結(jié)果排序使用ORDERBY子句對查詢返回的結(jié)果按一列或多列排序。ORDERBY子句的語法格式為:ORDERBY{column_name[ASC|DESC]}[,…n]其中ASC表示升序,為默認(rèn)值,DESC為降序。ORDERBY不能按ntext、text和image數(shù)據(jù)類型進(jìn)行排序。例如:SELECT*FROMusertableORDERBYagedesc,useridASC另外,可以根據(jù)表達(dá)式進(jìn)行排序。二、 聯(lián)合查詢UNION運(yùn)算符可以將兩個或兩個以上上SELECT語句的查詢結(jié)果集合合并成一個結(jié)果集合顯示,即執(zhí)行聯(lián)合查詢。UNION的語法格式為:select_statementUNION[ALL]selectstatement[UNION[ALL]selectstatement][...n]其中selectstatement為待聯(lián)合的SELECT查詢語句。ALL選項(xiàng)表示將所有行合并到結(jié)果集合中。不指定該項(xiàng)時,被聯(lián)合查詢結(jié)果集合中的重復(fù)行將只保留一行。聯(lián)合查詢時,查詢結(jié)果的列標(biāo)題為第一個查詢語句的列標(biāo)題。因此,要定義列標(biāo)題必須在第一個查詢語句中定義。要對聯(lián)合查詢結(jié)果排序時,也必須使用第一查詢語句中的列名、列標(biāo)題或者列序號。在使用UNION運(yùn)算符時,應(yīng)保證每個聯(lián)合查詢語句的選擇列表中有相同數(shù)量的表達(dá)式,并且每個查詢選擇表達(dá)式應(yīng)具有相同的數(shù)據(jù)類型,或是可以自動將它們轉(zhuǎn)換為相同的數(shù)據(jù)類型。在自動轉(zhuǎn)換時,對于數(shù)值類型,系統(tǒng)將低精度的數(shù)據(jù)類型轉(zhuǎn)換為高精度的數(shù)據(jù)類型。在包括多個查詢的UNION語句中,其執(zhí)行順

溫馨提示

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

最新文檔

評論

0/150

提交評論