




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
/SQL是用于訪問(wèn)和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語(yǔ)言。什么是SQL?SQL指結(jié)構(gòu)化查詢語(yǔ)言SQL使我們有能力訪問(wèn)數(shù)據(jù)庫(kù)SQL是一種ANSI的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言編者注:ANSI,美國(guó)國(guó)家標(biāo)準(zhǔn)化組織SQL能做什么?SQL面向數(shù)據(jù)庫(kù)執(zhí)行查詢SQL可從數(shù)據(jù)庫(kù)取回?cái)?shù)據(jù)SQL可在數(shù)據(jù)庫(kù)中插入新的紀(jì)錄SQL可更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)SQL可從數(shù)據(jù)庫(kù)刪除記錄SQL可創(chuàng)建新數(shù)據(jù)庫(kù)SQL可在數(shù)據(jù)庫(kù)中創(chuàng)建新表SQL可在數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)過(guò)程SQL可在數(shù)據(jù)庫(kù)中創(chuàng)建視圖SQL可以設(shè)置表、存儲(chǔ)過(guò)程和視圖的權(quán)限SQL是一種標(biāo)準(zhǔn)-但是...SQL是一門(mén)ANSI的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言,用來(lái)訪問(wèn)和操作數(shù)據(jù)庫(kù)系統(tǒng)。SQL語(yǔ)句用于取回和更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。SQL可與數(shù)據(jù)庫(kù)程序協(xié)同工作,比如MSAccess、DB2、Informix、MSSQLServer、Oracle、Sybase以和其他數(shù)據(jù)庫(kù)系統(tǒng)。不幸地是,存在著很多不同版本的SQL語(yǔ)言,但是為了與ANSI標(biāo)準(zhǔn)相兼容,它們必須以相似的方式共同地來(lái)支持一些主要的關(guān)鍵詞(比如SELECT、UPDATE、DELETE、INSERT、WHERE等等)。注釋?zhuān)撼薙QL標(biāo)準(zhǔn)之外,大部分SQL數(shù)據(jù)庫(kù)程序都擁有它們自己的私有擴(kuò)展!在您的網(wǎng)站中使用SQL要?jiǎng)?chuàng)建發(fā)布數(shù)據(jù)庫(kù)中數(shù)據(jù)的網(wǎng)站,您需要以下要素:RDBMS數(shù)據(jù)庫(kù)程序(比如MSAccess,SQLServer,MySQL)服務(wù)器端腳本語(yǔ)言(比如PHP或ASP)SQLHTML/CSSRDBMSRDBMS指的是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。RDBMS是SQL的基礎(chǔ),同樣也是所有現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ),比如MSSQLServer,IBMDB2,Oracle,MySQL以和MicrosoftAccess。RDBMS中的數(shù)據(jù)存儲(chǔ)在被稱(chēng)為表(tables)的數(shù)據(jù)庫(kù)對(duì)象中。表是相關(guān)的數(shù)據(jù)項(xiàng)的集合,它由列和行組成。SQL語(yǔ)法數(shù)據(jù)庫(kù)表一個(gè)數(shù)據(jù)庫(kù)通常包含一個(gè)或多個(gè)表。每個(gè)表由一個(gè)名字標(biāo)識(shí)(例如“客戶”或者“訂單”)。表包含帶有數(shù)據(jù)的記錄(行)。下面的例子是一個(gè)名為"Persons"的表:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing上面的表包含三條記錄(每一條對(duì)應(yīng)一個(gè)人)和五個(gè)列(Id、姓、名、地址和城市)。SQL語(yǔ)句您需要在數(shù)據(jù)庫(kù)上執(zhí)行的大部分工作都由SQL語(yǔ)句完成。下面的語(yǔ)句從表中選取LastName列的數(shù)據(jù):SELECTLastNameFROMPersons在本教程中,我們將為您講解各種不同的SQL語(yǔ)句。重要事項(xiàng)一定要記住,SQL對(duì)大小寫(xiě)不敏感!SQL語(yǔ)句后面的分號(hào)?某些數(shù)據(jù)庫(kù)系統(tǒng)要求在每條SQL命令的末端使用分號(hào)。在我們的教程中不使用分號(hào)。分號(hào)是在數(shù)據(jù)庫(kù)系統(tǒng)中分隔每條SQL語(yǔ)句的標(biāo)準(zhǔn)方法,這樣就可以在對(duì)服務(wù)器的相同請(qǐng)求中執(zhí)行一條以上的語(yǔ)句。如果您使用的是MSAccess和SQLServer2000,則不必在每條SQL語(yǔ)句之后使用分號(hào),不過(guò)某些數(shù)據(jù)庫(kù)軟件要求必須使用分號(hào)。SQLDML和DDL可以把SQL分為兩個(gè)部分:數(shù)據(jù)操作語(yǔ)言(DML)和數(shù)據(jù)定義語(yǔ)言(DDL)。SQL(結(jié)構(gòu)化查詢語(yǔ)言)是用于執(zhí)行查詢的語(yǔ)法。但是SQL語(yǔ)言也包含用于更新、插入和刪除記錄的語(yǔ)法。查詢和更新指令構(gòu)成了SQL的DML部分:SELECT-從數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù)UPDATE-更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù)DELETE-從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)INSERTINTO-向數(shù)據(jù)庫(kù)表中插入數(shù)據(jù)SQL的數(shù)據(jù)定義語(yǔ)言(DDL)部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之間的鏈接,以和施加表間的約束。SQL中最重要的DDL語(yǔ)句:CREATEDATABASE-創(chuàng)建新數(shù)據(jù)庫(kù)ALTERDATABASE-修改數(shù)據(jù)庫(kù)CREATETABLE-創(chuàng)建新表ALTERTABLE-變更(改變)數(shù)據(jù)庫(kù)表DROPTABLE-刪除表CREATEINDEX-創(chuàng)建索引(搜索SQLSELECT語(yǔ)句本章講解SELECT和SELECT*語(yǔ)句。SQLSELECT語(yǔ)句SELECT語(yǔ)句用于從表中選取數(shù)據(jù)。結(jié)果被存儲(chǔ)在一個(gè)結(jié)果表中(稱(chēng)為結(jié)果集)。SQLSELECT語(yǔ)法SELECT列名稱(chēng)FROM表名稱(chēng)以和:SELECT*FROM表名稱(chēng)注釋?zhuān)篠QL語(yǔ)句對(duì)大小寫(xiě)不敏感。SELECT等效于select。SQLSELECT實(shí)例如需獲取名為"LastName"和"FirstName"的列的內(nèi)容(從名為"Persons"的數(shù)據(jù)庫(kù)表),請(qǐng)使用類(lèi)似這樣的SELECT語(yǔ)句:SELECTLastName,FirstNameFROMPersons"Persons"表:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing結(jié)果:LastNameFirstNameAdamsJohnBushGeorgeCarterThomasSQLSELECT*實(shí)例現(xiàn)在我們希望從"Persons"表中選取所有的列。請(qǐng)使用符號(hào)*取代列的名稱(chēng),就像這樣:SELECT*FROMPersons提示:星號(hào)(*)是選取所有列的快捷方式。結(jié)果:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing在結(jié)果集(result-set)中導(dǎo)航由SQL查詢程序獲得的結(jié)果被存放在一個(gè)結(jié)果集中。大多數(shù)數(shù)據(jù)庫(kù)軟件系統(tǒng)都允許使用編程函數(shù)在結(jié)果集中進(jìn)行導(dǎo)航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record等等。類(lèi)似這些編程函數(shù)不在本教程講解之列。如需學(xué)習(xí)通過(guò)函數(shù)調(diào)用訪問(wèn)數(shù)據(jù)的知識(shí),請(qǐng)?jiān)L問(wèn)我們的\o"ADO教程"ADO教程和\o"PHP教程"PHP教程。SQLSELECTDISTINCT語(yǔ)句本章講解SELECTDISTINCT語(yǔ)句。SQLSELECTDISTINCT語(yǔ)句在表中,可能會(huì)包含重復(fù)值。這并不成問(wèn)題,不過(guò),有時(shí)您也許希望僅僅列出不同(distinct)的值。關(guān)鍵詞DISTINCT用于返回唯一不同的值。語(yǔ)法:SELECTDISTINCT列名稱(chēng)FROM表名稱(chēng)使用DISTINCT關(guān)鍵詞如果要從"Company"列中選取所有的值,我們需要使用SELECT語(yǔ)句:SELECTCompanyFROMOrders"Orders"表:CompanyOrderNumberIBM3532W3School2356Apple4698W3School6953結(jié)果:CompanyIBMW3SchoolAppleW3School請(qǐng)注意,在結(jié)果集中,W3School被列出了兩次。如需從Company"列中僅選取唯一不同的值,我們需要使用SELECTDISTINCT語(yǔ)句:SELECTDISTINCTCompanyFROMOrders結(jié)果:CompanyIBMW3SchoolApple現(xiàn)在,在結(jié)果集中,"W3School"僅被列出了一次。SQLWHERE子句WHERE子句用于規(guī)定選擇的標(biāo)準(zhǔn)。WHERE子句如需有條件地從表中選取數(shù)據(jù),可將WHERE子句添加到SELECT語(yǔ)句。語(yǔ)法SELECT列名稱(chēng)FROM表名稱(chēng)WHERE列運(yùn)算符值下面的運(yùn)算符可在WHERE子句中使用:操作符描述=等于<>不等于>大于<小于>=大于等于<=小于等于BETWEEN在某個(gè)范圍內(nèi)LIKE搜索某種模式注釋?zhuān)涸谀承┌姹镜腟QL中,操作符<>可以寫(xiě)為!=。使用WHERE子句如果只希望選取居住在城市"Beijing"中的人,我們需要向SELECT語(yǔ)句添加WHERE子句:SELECT*FROMPersonsWHERECity='Beijing'"Persons"表LastNameFirstNameAddressCityYearAdamsJohnOxfordStreetLondon1970BushGeorgeFifthAvenueNewYork1975CarterThomasChanganStreetBeijing1980GatesBillXuanwumen10Beijing1985結(jié)果:LastNameFirstNameAddressCityYearCarterThomasChanganStreetBeijing1980GatesBillXuanwumen10Beijing1985引號(hào)的使用請(qǐng)注意,我們?cè)诶又械臈l件值周?chē)褂玫氖菃我?hào)。SQL使用單引號(hào)來(lái)環(huán)繞文本值(大部分?jǐn)?shù)據(jù)庫(kù)系統(tǒng)也接受雙引號(hào))。如果是數(shù)值,請(qǐng)不要使用引號(hào)。文本值:這是正確的:SELECT*FROMPersonsWHEREFirstName='Bush'這是錯(cuò)誤的:SELECT*FROMPersonsWHEREFirstName=Bush數(shù)值:這是正確的:SELECT*FROMPersonsWHEREYear>1965這是錯(cuò)誤的:SELECT*FROMPersonsWHEREYear>'1965'SQLAND&OR運(yùn)算符AND和OR運(yùn)算符用于基于一個(gè)以上的條件對(duì)記錄進(jìn)行過(guò)濾。AND和OR運(yùn)算符AND和OR可在WHERE子語(yǔ)句中把兩個(gè)或多個(gè)條件結(jié)合起來(lái)。如果第一個(gè)條件和第二個(gè)條件都成立,則AND運(yùn)算符顯示一條記錄。如果第一個(gè)條件和第二個(gè)條件中只要有一個(gè)成立,則OR運(yùn)算符顯示一條記錄。原始的表(用在例子中的):LastNameFirstNameAddressCityAdamsJohnOxfordStreetLondonBushGeorgeFifthAvenueNewYorkCarterThomasChanganStreetBeijingCarterWilliamXuanwumen10BeijingAND運(yùn)算符實(shí)例使用AND來(lái)顯示所有姓為"Carter"并且名為"Thomas"的人:SELECT*FROMPersonsWHEREFirstName='Thomas'ANDLastName='Carter'結(jié)果:LastNameFirstNameAddressCityCarterThomasChanganStreetBeijingOR運(yùn)算符實(shí)例使用OR來(lái)顯示所有姓為"Carter"或者名為"Thomas"的人:SELECT*FROMPersonsWHEREfirstname='Thomas'ORlastname='Carter'結(jié)果:LastNameFirstNameAddressCityCarterThomasChanganStreetBeijingCarterWilliamXuanwumen10Beijing結(jié)合AND和OR運(yùn)算符我們也可以把AND和OR結(jié)合起來(lái)(使用圓括號(hào)來(lái)組成復(fù)雜的表達(dá)式):SELECT*FROMPersonsWHERE(FirstName='Thomas'ORFirstName='William')ANDLastName='Carter'結(jié)果:LastNameFirstNameAddressCityCarterThomasChanganStreetBeijingCarterWilliamXuanwumen10BeijingSQLORDERBY子句ORDERBY語(yǔ)句用于對(duì)結(jié)果集進(jìn)行排序。ORDERBY語(yǔ)句ORDERBY語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。ORDERBY語(yǔ)句默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序。如果您希望按照降序?qū)τ涗涍M(jìn)行排序,可以使用DESC關(guān)鍵字。原始的表(用在例子中的):Orders表:CompanyOrderNumberIBM3532W3School2356Apple4698W3School6953實(shí)例1以字母順序顯示公司名稱(chēng):SELECTCompany,OrderNumberFROMOrdersORDERBYCompany結(jié)果:CompanyOrderNumberApple4698IBM3532W3School6953W3School2356實(shí)例2以字母順序顯示公司名稱(chēng)(Company),并以數(shù)字順序顯示順序號(hào)(OrderNumber):SELECTCompany,OrderNumberFROMOrdersORDERBYCompany,OrderNumber結(jié)果:CompanyOrderNumberApple4698IBM3532W3School2356W3School6953實(shí)例3以逆字母順序顯示公司名稱(chēng):SELECTCompany,OrderNumberFROMOrdersORDERBYCompanyDESC結(jié)果:CompanyOrderNumberW3School6953W3School2356IBM3532Apple4698實(shí)例4以逆字母順序顯示公司名稱(chēng),并以數(shù)字順序顯示順序號(hào):SELECTCompany,OrderNumberFROMOrdersORDERBYCompanyDESC,OrderNumberASC結(jié)果:CompanyOrderNumberW3School2356W3School6953IBM3532Apple4698注意:在以上的結(jié)果中有兩個(gè)相等的公司名稱(chēng)(W3School)。只有這一次,在第一列中有相同的值時(shí),第二列是以升序排列的。如果第一列中有些值為nulls時(shí),情況也是這樣的。SQLINSERTINTO語(yǔ)句INSERTINTO語(yǔ)句INSERTINTO語(yǔ)句用于向表格中插入新的行。語(yǔ)法INSERTINTO表名稱(chēng)VALUES(值1,值2,)我們也可以指定所要插入數(shù)據(jù)的列:INSERTINTOtable_name(列1,列2,...)VALUES(值1,值2,)插入新的行"Persons"表:LastNameFirstNameAddressCityCarterThomasChanganStreetBeijingSQL語(yǔ)句:INSERTINTOPersonsVALUES('Gates','Bill','Xuanwumen10','Beijing')結(jié)果:LastNameFirstNameAddressCityCarterThomasChanganStreetBeijingGatesBillXuanwumen10Beijing在指定的列中插入數(shù)據(jù)"Persons"表:LastNameFirstNameAddressCityCarterThomasChanganStreetBeijingGatesBillXuanwumen10BeijingSQL語(yǔ)句:INSERTINTOPersons(LastName,Address)VALUES('Wilson','Champs-Elysees')結(jié)果:LastNameFirstNameAddressCityCarterThomasChanganStreetBeijingGatesBillXuanwumen10BeijingWilson
Champs-Elysees
SQLUPDATE語(yǔ)句Update語(yǔ)句Update語(yǔ)句用于修改表中的數(shù)據(jù)。語(yǔ)法:UPDATE表名稱(chēng)SET列名稱(chēng)=新值WHERE列名稱(chēng)=某值Person:LastNameFirstNameAddressCityGatesBillXuanwumen10BeijingWilson
Champs-Elysees
更新某一行中的一個(gè)列我們?yōu)閘astname是"Wilson"的人添加firstname:UPDATEPersonSETFirstName='Fred'WHERELastName='Wilson'結(jié)果:LastNameFirstNameAddressCityGatesBillXuanwumen10BeijingWilsonFredChamps-Elysees
更新某一行中的若干列我們會(huì)修改地址(address),并添加城市名稱(chēng)(city):UPDATEPersonSETAddress='Zhongshan23',City='Nanjing'WHERELastName='Wilson'結(jié)果:LastNameFirstNameAddressCityGatesBillXuanwumen10BeijingWilsonFredZhongshan23NanjingSQLDELETE語(yǔ)句DELETE語(yǔ)句DELETE語(yǔ)句用于刪除表中的行。語(yǔ)法DELETEFROM表名稱(chēng)WHERE列名稱(chēng)=值Person:LastNameFirstNameAddressCityGatesBillXuanwumen10BeijingWilsonFredZhongshan23Nanjing刪除某行"FredWilson"會(huì)被刪除:DELETEFROMPersonWHERELastName='Wilson'結(jié)果:LastNameFirstNameAddressCityGatesBillXuanwumen10Beijing刪除所有行可以在不刪除表的情況下刪除所有的行。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的:DELETEFROMtable_name或者:DELETE*FROMtable_nameSQL高級(jí)SQLTOP子句TOP子句TOP子句用于規(guī)定要返回的記錄的數(shù)目。對(duì)于擁有數(shù)千條記錄的大型表來(lái)說(shuō),TOP子句是非常有用的。注釋?zhuān)翰⒎撬械臄?shù)據(jù)庫(kù)系統(tǒng)都支持TOP子句。SQLServer的語(yǔ)法:SELECTTOPnumber|percentcolumn_name(s)FROMtable_nameMySQL和Oracle中的SQLSELECTTOP是等價(jià)的MySQL語(yǔ)法SELECTcolumn_name(s)FROMtable_nameLIMITnumber例子SELECT*FROMPersonsLIMIT5Oracle語(yǔ)法SELECTcolumn_name(s)FROMtable_nameWHEREROWNUM<=number例子SELECT*FROMPersonsWHEREROWNUM<=5原始的表(用在例子中的):Persons表:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing4ObamaBarackPennsylvaniaAvenueWashingtonSQLTOP實(shí)例現(xiàn)在,我們希望從上面的"Persons"表中選取頭兩條記錄。我們可以使用下面的SELECT語(yǔ)句:SELECTTOP2*FROMPersons結(jié)果:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYorkSQLTOPPERCENT實(shí)例現(xiàn)在,我們希望從上面的"Persons"表中選取50%的記錄。我們可以使用下面的SELECT語(yǔ)句:SELECTTOP50PERCENT*FROMPersons結(jié)果:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYorkSQLLIKE操作符LIKE操作符用于在WHERE子句中搜索列中的指定模式。LIKE操作符LIKE操作符用于在WHERE子句中搜索列中的指定模式。SQLLIKE操作符語(yǔ)法SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpattern原始的表(用在例子中的):Persons表:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijingLIKE操作符實(shí)例例子1現(xiàn)在,我們希望從上面的"Persons"表中選取居住在以"N"開(kāi)始的城市里的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityLIKE'N%'提示:"%"可用于定義通配符(模式中缺少的字母)。結(jié)果集:IdLastNameFirstNameAddressCity2BushGeorgeFifthAvenueNewYork例子2接下來(lái),我們希望從"Persons"表中選取居住在以"g"結(jié)尾的城市里的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityLIKE'%g'結(jié)果集:IdLastNameFirstNameAddressCity3CarterThomasChanganStreetBeijing例子3接下來(lái),我們希望從"Persons"表中選取居住在包含"lon"的城市里的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityLIKE'%lon%'結(jié)果集:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon例子4通過(guò)使用NOT關(guān)鍵字,我們可以從"Persons"表中選取居住在不包含"lon"的城市里的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityNOTLIKE'%lon%'結(jié)果集:IdLastNameFirstNameAddressCity2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijingSQL通配符在搜索數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),您可以使用SQL通配符。SQL通配符在搜索數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),SQL通配符可以替代一個(gè)或多個(gè)字符。SQL通配符必須與LIKE運(yùn)算符一起使用。在SQL中,可使用以下通配符:通配符描述%替代一個(gè)或多個(gè)字符_僅替代一個(gè)字符[charlist]字符列中的任何單一字符[^charlist]或者[!charlist]不在字符列中的任何單一字符原始的表(用在例子中的):Persons表:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing使用%通配符例子1現(xiàn)在,我們希望從上面的"Persons"表中選取居住在以"Ne"開(kāi)始的城市里的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityLIKE'Ne%'結(jié)果集:IdLastNameFirstNameAddressCity2BushGeorgeFifthAvenueNewYork例子2接下來(lái),我們希望從"Persons"表中選取居住在包含"lond"的城市里的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityLIKE'%lond%'結(jié)果集:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon使用_通配符例子1現(xiàn)在,我們希望從上面的"Persons"表中選取名字的第一個(gè)字符之后是"eorge"的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHEREFirstNameLIKE'_eorge'結(jié)果集:IdLastNameFirstNameAddressCity2BushGeorgeFifthAvenueNewYork例子2接下來(lái),我們希望從"Persons"表中選取的這條記錄的姓氏以"C"開(kāi)頭,然后是一個(gè)任意字符,然后是"r",然后是任意字符,然后是"er":我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERELastNameLIKE'C_r_er'結(jié)果集:IdLastNameFirstNameAddressCity3CarterThomasChanganStreetBeijing使用[charlist]通配符例子1現(xiàn)在,我們希望從上面的"Persons"表中選取居住的城市以"A"或"L"或"N"開(kāi)頭的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityLIKE'[ALN]%'結(jié)果集:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork例子2現(xiàn)在,我們希望從上面的"Persons"表中選取居住的城市不以"A"或"L"或"N"開(kāi)頭的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERECityLIKE'[!ALN]%'結(jié)果集:IdLastNameFirstNameAddressCity3CarterThomasChanganStreetBeijingSQLIN操作符IN操作符IN操作符允許我們?cè)赪HERE子句中規(guī)定多個(gè)值。SQLIN語(yǔ)法SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameIN(value1,value2,...)原始的表(在實(shí)例中使用:)Persons表:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijingIN操作符實(shí)例現(xiàn)在,我們希望從上表中選取姓氏為Adams和Carter的人:我們可以使用下面的SELECT語(yǔ)句:SELECT*FROMPersonsWHERELastNameIN('Adams','Carter')結(jié)果集:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon3CarterThomasChanganStreetBeijingSQLBETWEEN操作符BETWEEN操作符在WHERE子句中使用,作用是選取介于兩個(gè)值之間的數(shù)據(jù)范圍。BETWEEN操作符操作符BETWEEN...AND會(huì)選取介于兩個(gè)值之間的數(shù)據(jù)范圍。這些值可以是數(shù)值、文本或者日期。SQLBETWEEN語(yǔ)法SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue2原始的表(在實(shí)例中使用:)Persons表:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing4GatesBillXuanwumen10BeijingBETWEEN操作符實(shí)例如需以字母順序顯示介于"Adams"(包括)和"Carter"(不包括)之間的人,請(qǐng)使用下面的SQL:SELECT*FROMPersonsWHERELastNameBETWEEN'Adams'AND'Carter'結(jié)果集:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork重要事項(xiàng):不同的數(shù)據(jù)庫(kù)對(duì)BETWEEN...AND操作符的處理方式是有差異的。某些數(shù)據(jù)庫(kù)會(huì)列出介于"Adams"和"Carter"之間的人,但不包括"Adams"和"Carter";某些數(shù)據(jù)庫(kù)會(huì)列出介于"Adams"和"Carter"之間并包括"Adams"和"Carter"的人;而另一些數(shù)據(jù)庫(kù)會(huì)列出介于"Adams"和"Carter"之間的人,包括"Adams",但不包括"Carter"。所以,請(qǐng)檢查你的數(shù)據(jù)庫(kù)是如何處理BETWEENAND操作符的!實(shí)例2如需使用上面的例子顯示范圍之外的人,請(qǐng)使用NOT操作符:SELECT*FROMPersonsWHERELastNameNOTBETWEEN'Adams'AND'Carter'結(jié)果集:IdLastNameFirstNameAddressCity3CarterThomasChanganStreetBeijing4GatesBillXuanwumen10BeijingSQLAlias(別名)通過(guò)使用SQL,可以為列名稱(chēng)和表名稱(chēng)指定別名(Alias)。SQLAlias表的SQLAlias語(yǔ)法SELECTcolumn_name(s)FROMtable_nameASalias_name列的SQLAlias語(yǔ)法SELECTcolumn_nameASalias_nameFROMtable_nameAlias實(shí)例:使用表名稱(chēng)別名假設(shè)我們有兩個(gè)表分別是:"Persons"和"Product_Orders"。我們分別為它們指定別名"p"和"po"。現(xiàn)在,我們希望列出"JohnAdams"的所有定單。我們可以使用下面的SELECT語(yǔ)句:SELECTpo.OrderID,p.LastName,p.FirstNameFROMPersonsASp,Product_OrdersASpoWHEREp.LastName='Adams'WHEREp.FirstName='John'不使用別名的SELECT語(yǔ)句:SELECTProduct_Orders.OrderID,Persons.LastName,Persons.FirstNameFROMPersons,Product_OrdersWHEREPersons.LastName='Hansen'WHEREPersons.FirstName='Ola'從上面兩條SELECT語(yǔ)句您可以看到,別名使查詢程序更易閱讀和書(shū)寫(xiě)。Alias實(shí)例:使用一個(gè)列名別名表Persons:IdLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijingSQL:SELECTLastNameASFamily,FirstNameFROMPersons結(jié)果:FamilyNameAdamsJohnBushGeorgeCarterThomasSQLJOINSQLjoin用于根據(jù)兩個(gè)或多個(gè)表中的列之間的關(guān)系,從這些表中查詢數(shù)據(jù)。Join和Key有時(shí)為了得到完整的結(jié)果,我們需要從兩個(gè)或更多的表中獲取結(jié)果。我們就需要執(zhí)行join。數(shù)據(jù)庫(kù)中的表可通過(guò)鍵將彼此聯(lián)系起來(lái)。主鍵(PrimaryKey)是一個(gè)列,在這個(gè)列中的每一行的值都是唯一的。在表中,每個(gè)主鍵的值都是唯一的。這樣做的目的是在不重復(fù)每個(gè)表中的所有數(shù)據(jù)的情況下,把表間的數(shù)據(jù)交叉捆綁在一起。請(qǐng)看"Persons"表:Id_PLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing請(qǐng)注意,"Id_P"列是Persons表中的的主鍵。這意味著沒(méi)有兩行能夠擁有相同的Id_P。即使兩個(gè)人的姓名完全相同,Id_P也可以區(qū)分他們。接下來(lái)請(qǐng)看"Orders"表:Id_OOrderNoId_P177895324467833224561424562153476465請(qǐng)注意,"Id_O"列是Orders表中的的主鍵,同時(shí),"Orders"表中的"Id_P"列用于引用"Persons"表中的人,而無(wú)需使用他們的確切姓名。請(qǐng)留意,"Id_P"列把上面的兩個(gè)表聯(lián)系了起來(lái)。引用兩個(gè)表我們可以通過(guò)引用兩個(gè)表的方式,從兩個(gè)表中獲取數(shù)據(jù):誰(shuí)訂購(gòu)了產(chǎn)品,并且他們訂購(gòu)了什么產(chǎn)品?SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersons,OrdersWHEREPersons.Id_P=Orders.Id_P結(jié)果集:LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678SQLJOIN-使用Join除了上面的方法,我們也可以使用關(guān)鍵詞JOIN來(lái)從兩個(gè)表中獲取數(shù)據(jù)。如果我們希望列出所有人的定購(gòu),可以使用下面的SELECT語(yǔ)句:SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsINNERJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName結(jié)果集:LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678不同的SQLJOIN除了我們?cè)谏厦娴睦又惺褂玫腎NNERJOIN(內(nèi)連接),我們還可以其他幾種連接。下面列出了您可以使用的JOIN類(lèi)型,以和它們之間的差異。JOIN:如果表中有至少一個(gè)匹配,則返回行LEFTJOIN:即使右表中沒(méi)有匹配,也從左表返回所有的行RIGHTJOIN:即使左表中沒(méi)有匹配,也從右表返回所有的行FULLJOIN:只要其中一個(gè)表中存在匹配,就返回行SQLINNERJOIN關(guān)鍵字SQLINNERJOIN關(guān)鍵字在表中存在至少一個(gè)匹配時(shí),INNERJOIN關(guān)鍵字返回行。INNERJOIN關(guān)鍵字語(yǔ)法SELECTcolumn_name(s)FROMtable_name1INNERJOINtable_name2ONtable_name1.column_name=table_name2.column_name注釋?zhuān)篒NNERJOIN與JOIN是相同的。原始的表(用在例子中的):"Persons"表:Id_PLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing"Orders"表:Id_OOrderNoId_P177895324467833224561424562153476465內(nèi)連接(INNERJOIN)實(shí)例現(xiàn)在,我們希望列出所有人的定購(gòu)。您可以使用下面的SELECT語(yǔ)句:SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsINNERJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName結(jié)果集:LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678INNERJOIN關(guān)鍵字在表中存在至少一個(gè)匹配時(shí)返回行。如果"Persons"中的行在"Orders"中沒(méi)有匹配,就不會(huì)列出這些行。SQLLEFTJOIN關(guān)鍵字SQLLEFTJOIN關(guān)鍵字LEFTJOIN關(guān)鍵字會(huì)從左表(table_name1)那里返回所有的行,即使在右表(table_name2)中沒(méi)有匹配的行。LEFTJOIN關(guān)鍵字語(yǔ)法SELECTcolumn_name(s)FROMtable_name1LEFTJOINtable_name2ONtable_name1.column_name=table_name2.column_name注釋?zhuān)涸谀承?shù)據(jù)庫(kù)中,LEFTJOIN稱(chēng)為L(zhǎng)EFTOUTERJOIN。原始的表(用在例子中的):"Persons"表:Id_PLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing"Orders"表:Id_OOrderNoId_P177895324467833224561424562153476465左連接(LEFTJOIN)實(shí)例現(xiàn)在,我們希望列出所有的人,以和他們的定購(gòu)-如果有的話。您可以使用下面的SELECT語(yǔ)句:SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsLEFTJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName結(jié)果集:LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678BushGeorge
LEFTJOIN關(guān)鍵字會(huì)從左表(Persons)那里返回所有的行,即使在右表(Orders)中沒(méi)有匹配的行。SQLRIGHTJOIN關(guān)鍵字SQLRIGHTJOIN關(guān)鍵字RIGHTJOIN關(guān)鍵字會(huì)右表(table_name2)那里返回所有的行,即使在左表(table_name1)中沒(méi)有匹配的行。RIGHTJOIN關(guān)鍵字語(yǔ)法SELECTcolumn_name(s)FROMtable_name1RIGHTJOINtable_name2ONtable_name1.column_name=table_name2.column_name注釋?zhuān)涸谀承?shù)據(jù)庫(kù)中,RIGHTJOIN稱(chēng)為RIGHTOUTERJOIN。原始的表(用在例子中的):"Persons"表:Id_PLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing"Orders"表:Id_OOrderNoId_P177895324467833224561424562153476465右連接(RIGHTJOIN)實(shí)例現(xiàn)在,我們希望列出所有的定單,以和定購(gòu)它們的人-如果有的話。您可以使用下面的SELECT語(yǔ)句:SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsRIGHTJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName結(jié)果集:LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678
34764RIGHTJOIN關(guān)鍵字會(huì)從右表(Orders)那里返回所有的行,即使在左表(Persons)中沒(méi)有匹配的行。SQLFULLJOIN關(guān)鍵字SQLFULLJOIN關(guān)鍵字只要其中某個(gè)表存在匹配,F(xiàn)ULLJOIN關(guān)鍵字就會(huì)返回行。FULLJOIN關(guān)鍵字語(yǔ)法SELECTcolumn_name(s)FROMtable_name1FULLJOINtable_name2ONtable_name1.column_name=table_name2.column_name注釋?zhuān)涸谀承?shù)據(jù)庫(kù)中,F(xiàn)ULLJOIN稱(chēng)為FULLOUTERJOIN。原始的表(用在例子中的):"Persons"表:Id_PLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing"Orders"表:Id_OOrderNoId_P177895324467833224561424562153476465全連接(FULLJOIN)實(shí)例現(xiàn)在,我們希望列出所有的人,以和他們的定單,以和所有的定單,以和定購(gòu)它們的人。您可以使用下面的SELECT語(yǔ)句:SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsFULLJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName結(jié)果集:LastNameFirstNameOrderNoAdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678BushGeorge
34764FULLJOIN關(guān)鍵字會(huì)從左表(Persons)和右表(Orders)那里返回所有的行。如果"Persons"中的行在表"Orders"中沒(méi)有匹配,或者如果"Orders"中的行在表"Persons"中沒(méi)有匹配,這些行同樣會(huì)列出。SQLUNION和UNIONALL操作符SQLUNION操作符UNION操作符用于合并兩個(gè)或多個(gè)SELECT語(yǔ)句的結(jié)果集。請(qǐng)注意,UNION內(nèi)部的SELECT語(yǔ)句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類(lèi)型。同時(shí),每條SELECT語(yǔ)句中的列的順序必須相同。SQLUNION語(yǔ)法SELECTcolumn_name(s)FROMtable_name1UNIONSELECTcolumn_name(s)FROMtable_name2注釋?zhuān)耗J(rèn)地,UNION操作符選取不同的值。如果允許重復(fù)的值,請(qǐng)使用UNIONALL。SQLUNIONALL語(yǔ)法SELECTcolumn_name(s)FROMtable_name1UNIONALLSELECTcolumn_name(s)FROMtable_name2另外,UNION結(jié)果集中的列名總是等于UNION中第一個(gè)SELECT語(yǔ)句中的列名。下面的例子中使用的原始表:Employees_China:E_IDE_Name01Zhang,Hua02Wang,Wei03Carter,Thomas04Yang,MingEmployees_USA:E_IDE_Name01Adams,John02Bush,George03Carter,Thomas04Gates,Bill使用UNION命令實(shí)例列出所有在中國(guó)和美國(guó)的不同的雇員名:SELECTE_NameFROMEmployees_ChinaUNIONSELECTE_NameFROMEmployees_USA結(jié)果E_NameZhang,HuaWang,WeiCarter,ThomasYang,MingAdams,JohnBush,GeorgeGates,Bill注釋?zhuān)哼@個(gè)命令無(wú)法列出在中國(guó)和美國(guó)的所有雇員。在上面的例子中,我們有兩個(gè)名字相同的雇員,他們當(dāng)中只有一個(gè)人被列出來(lái)了。UNION命令只會(huì)選取不同的值。UNIONALLUNIONALL命令和UNION命令幾乎是等效的,不過(guò)UNIONALL命令會(huì)列出所有的值。SQLStatement1UNIONALLSQLStatement2使用UNIONALL命令實(shí)例:列出在中國(guó)和美國(guó)的所有的雇員:SELECTE_NameFROMEmployees_ChinaUNIONALLSELECTE_NameFROMEmployees_USA結(jié)果E_NameZhang,HuaWang,WeiCarter,ThomasYang,MingAdams,JohnBush,GeorgeCarter,ThomasGates,BillSQLSELECTINTO語(yǔ)句SQLSELECTINTO語(yǔ)句可用于創(chuàng)建表的備份復(fù)件。SELECTINTO語(yǔ)句SELECTINTO語(yǔ)句從一個(gè)表中選取數(shù)據(jù),然后把數(shù)據(jù)插入另一個(gè)表中。SELECTINTO語(yǔ)句常用于創(chuàng)建表的備份復(fù)件或者用于對(duì)記錄進(jìn)行存檔。SQLSELECTINTO語(yǔ)法您可以把所有的列插入新表:SELECT*INTOnew_table_name[INexternaldatabase]FROMold_tablename或者只把希望的列插入新表:SELECTcolumn_name(s)INTOnew_table_name[INexternaldatabase]FROMold_tablenameSQLSELECTINTO實(shí)例-制作備份復(fù)件下面的例子會(huì)制作"Persons"表的備份復(fù)件:SELECT*INTOPersons_backupFROMPersonsIN子句可用于向另一個(gè)數(shù)據(jù)庫(kù)中拷貝表:SELECT*INTOPersonsIN'Backup.mdb'FROMPersons如果我們希望拷貝某些域,可以在SELECT語(yǔ)句后列出這些域:SELECTLastName,FirstNameINTOPersons_backupFROMPersonsSQLSELECTINTO實(shí)例-帶有WHERE子句我們也可以添加WHERE子句。下面的例子通過(guò)從"Persons"表中提取居住在"Beijing"的人的信息,創(chuàng)建了一個(gè)帶有兩個(gè)列的名為"Persons_backup"的表:SELECTLastName,FirstnameINTOPersons_backupFROMPersonsWHERECity='Beijing'SQLSELECTINTO實(shí)例-被連接的表從一個(gè)以上的表中選取數(shù)據(jù)也是可以做到的。下面的例子會(huì)創(chuàng)建一個(gè)名為"Persons_Order_Backup"的新表,其中包含了從Persons和Orders兩個(gè)表中取得的信息:SELECTPersons.LastName,Orders.OrderNoINTOPersons_Order_BackupFROMPersonsINNERJOINOrdersONPersons.Id_P=Orders.Id_PSQLCREATEDATABASE語(yǔ)句CREATEDATABASE語(yǔ)句CREATEDATABASE用于創(chuàng)建數(shù)據(jù)庫(kù)。SQLCREATEDATABASE語(yǔ)法CREATEDATABASEdatabase_nameSQLCREATEDATABASE實(shí)例現(xiàn)在我們希望創(chuàng)建一個(gè)名為"my_db"的數(shù)據(jù)庫(kù)。我們使用下面的CREATEDATABASE語(yǔ)句:CREATEDATABASEmy_db可以通過(guò)CREATETABLE來(lái)添加數(shù)據(jù)庫(kù)表。SQLCREATETABLE語(yǔ)句CREATETABLE語(yǔ)句CREATETABLE語(yǔ)句用于創(chuàng)建數(shù)據(jù)庫(kù)中的表。SQLCREATETABLE語(yǔ)法CREATETABLE表名稱(chēng)(列名稱(chēng)1數(shù)據(jù)類(lèi)型,列名稱(chēng)2數(shù)據(jù)類(lèi)型,列名稱(chēng)3數(shù)據(jù)類(lèi)型,)數(shù)據(jù)類(lèi)型(data_type)規(guī)定了列可容納何種數(shù)據(jù)類(lèi)型。下面的表格包含了SQL中最常用的數(shù)據(jù)類(lèi)型:數(shù)據(jù)類(lèi)型描述integer(size)int(size)smallint(size)tinyint(size)僅容納整數(shù)。在括號(hào)內(nèi)規(guī)定數(shù)字的最大位數(shù)。decimal(size,d)numeric(size,d)容納帶有小數(shù)的數(shù)字。"size"規(guī)定數(shù)字的最大位數(shù)。"d"規(guī)定小數(shù)點(diǎn)右側(cè)的最大位數(shù)。char(size)容納固定長(zhǎng)度的字符串(可容納字母、數(shù)字以和特殊字符)。在括號(hào)中規(guī)定字符串的長(zhǎng)度。varchar(size)容納可變長(zhǎng)度的字符串(可容納字母、數(shù)字以和特殊的字符)。在括號(hào)中規(guī)定字符串的最大長(zhǎng)度。date(yyyymmdd)容納日期。SQLCREATETABLE實(shí)例本例演示如何創(chuàng)建名為"Person"的表。該表包含5個(gè)列,列名分別是:"Id_P"、"LastName"、"FirstName"、"Address"以和"City":CREATETABLEPersons(Id_Pint,LastNamevarchar(255),FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))Id_P列的數(shù)據(jù)類(lèi)型是int,包含整數(shù)。其余4列的數(shù)據(jù)類(lèi)型是varchar,最大長(zhǎng)度為255個(gè)字符。空的"Persons"表類(lèi)似這樣:Id_PLastNameFirstNameAddressCity
可使用INSERTINTO語(yǔ)句向空表寫(xiě)入數(shù)據(jù)。SQL約束(Constraints)SQL約束約束用于限制加入表的數(shù)據(jù)的類(lèi)型。可以在創(chuàng)建表時(shí)規(guī)定約束(通過(guò)CREATETABLE語(yǔ)句),或者在表創(chuàng)建之后也可以(通過(guò)ALTERTABLE語(yǔ)句)。我們將主要探討以下幾種約束:NOTNULLUNIQUEPRIMARYKEYFOREIGNKEYCHECKDEFAULT注釋?zhuān)涸谙旅娴恼鹿?jié),我們會(huì)詳細(xì)講解每一種約束。SQLNOTNULL約束SQLNOTNULL約束NOTNULL約束強(qiáng)制列不接受NULL值。NOTNULL約束強(qiáng)制字段始終包含值。這意味著,如果不向字段添加值,就無(wú)法插入新紀(jì)錄或者更新記錄。下面的SQL語(yǔ)句強(qiáng)制"Id_P"列和"LastName"列不接受NULL值:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))SQLUNIQUE約束SQLUNIQUE約束UNIQUE約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。UNIQUE和PRIMARYKEY約束均為列或列集合提供了唯一性的保證。PRIMARYKEY擁有自動(dòng)定義的UNIQUE約束。請(qǐng)注意,每個(gè)表可以有多個(gè)UNIQUE約束,但是每個(gè)表只能有一個(gè)PRIMARYKEY約束。SQLUNIQUEConstraintonCREATETABLE下面的SQL在"Persons"表創(chuàng)建時(shí)在"Id_P"列創(chuàng)建UNIQUE約束:MySQL:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),UNIQUE(Id_P))SQLServer/Oracle/MSAccess:CREATETABLEPersons(Id_PintNOTNULLUNIQUE,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))如果需要命名UNIQUE約束,以和為多個(gè)列定義UNIQUE約束,請(qǐng)使用下面的SQL語(yǔ)法:MySQL/SQLServer/Oracle/MSAccess:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),CONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName))撤銷(xiāo)UNIQUE約束如需撤銷(xiāo)UNIQUE約束,請(qǐng)使用下面的SQL:MySQL:ALTERTABLEPersonsDROPINDEXuc_PersonIDSQLServer/Oracle/MSAccess:ALTERTABLEPersonsDROPCONSTRAINTuc_PersonIDSQLPRIMARYKEY約束SQLPRIMARYKEY約束PRIMARYKEY約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。主鍵必須包含唯一的值。主鍵列不能包含NULL值。每個(gè)表應(yīng)該都一個(gè)主鍵,并且每個(gè)表只能有一個(gè)主鍵。SQLPRIMARYKEYConstraintonCREATETABLE下面的SQL在"Persons"表創(chuàng)建時(shí)在"Id_P"列創(chuàng)建PRIMARYKEY約束:MySQL:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),PRIMARYKEY(Id_P))SQLServer/Oracle/MSAccess:CREATETABLEPersons(Id_PintNOTNULLPRIMARYKEY,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))如果需要命名PRIMARYKEY約束,以和為多個(gè)列定義PRIMARYKEY約束,請(qǐng)使用下面的SQL語(yǔ)法:MySQL/SQLServer/Oracle/MSAccess:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),CONSTRAINTuc_PersonIDPRIMARYKEY(Id_P,LastName))SQLPRIMARYKEYConstraintonALTERTABLE如果在表已存在的情況下為"Id_P"列創(chuàng)建PRIMARYKEY約束,請(qǐng)使用下面的SQL:MySQL/SQLServer/Oracle/MSAccess:ALTERTABLEPersonsADDPRIMARYKEY(Id_P)如果需要命名PRIMARYKEY約束,以和為多個(gè)列定義PRIMARYKEY約束,請(qǐng)使用下面的SQL語(yǔ)法:MySQL/SQLServer/Oracle/MSAccess:ALTERTABLEPersonsADDCONSTRAINTpk_PersonIDPRIMARYKEY(Id_P,LastName)注釋?zhuān)喝绻褂肁LTERTABLE語(yǔ)句添加主鍵,必須把主鍵列聲明為不包含NULL值(在表首次創(chuàng)建時(shí))。撤銷(xiāo)PRIMARYKEY約束如需撤銷(xiāo)PRIMARYKEY約束,請(qǐng)使用下面的SQL:MySQL:ALTERTABLEPersonsDROPPRIMARYKEYSQLServer/Oracle/MSAccess:ALTERTABLEPersonsDROPCONSTRAINTpk_PersonIDSQLFOREIGNKEY約束SQLFOREIGNKEY約束一個(gè)表中的FOREIGNKEY指向另一個(gè)表中的PRIMARYKEY。讓我們通過(guò)一個(gè)例子來(lái)解釋外鍵。請(qǐng)看下面兩個(gè)表:"Persons"表:Id_PLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing"Orders"表:Id_OOrderNoId_P1778953244678332245614245621請(qǐng)注意,"Orders"中的"Id_P"列指向"Persons"表中的"Id_P"列。"Persons"表中的"Id_P"列是"Persons"表中的PRIMARYKEY。"Orders"表中的"Id_P"列是"Orders"表中的FOREIGNKEY。FOREIGNKEY約束用于預(yù)防破壞表之間連接的動(dòng)作。FOREIGNKEY約束也能防止非法數(shù)據(jù)插入外鍵列,因?yàn)樗仨毷撬赶虻哪莻€(gè)表中的值之一。SQLFOREIGNKEYConstraintonCREATETABLE下面的SQL在"Orders"表創(chuàng)建時(shí)為"Id_P"列創(chuàng)建FOREIGNKEY:MySQL:CREATETABLEOrders(O_IdintNOTNULL,OrderNointNOTNULL,Id_Pint,PRIMARYKEY(O_Id),FOREIGNKEY(Id_P)REFERENCESPersons(Id_P))SQLServer/Oracle/MSAccess:CREATETABLEOrders(O_IdintNOTNULLPRIMARYKEY,OrderNointNOTNULL,Id_PintFOREIGNKEYREFERENCESPersons(Id_P))如果需要命名FOREIGNKEY約束,以和為多個(gè)列定義FOREIGNKEY約束,請(qǐng)使用下面的SQL語(yǔ)法:MySQL/SQLServer/Oracle/MSAccess:CREATETABLEOrders(O_IdintNOTNULL,OrderNointNOTNULL,Id_Pint,PRIMARYKEY(O_Id),CONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P))SQLFOREIGNKEYConstraintonALTERTABLE如果在"Orders"表已存在的情況下為"Id_P"列創(chuàng)建FOREIGNKEY約束,請(qǐng)使用下面的SQL:MySQL/SQLServer/Oracle/MSAccess:ALTERTABLEOrdersADDFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)如果需要命名FOREIGNKEY約束,以和為多個(gè)列定義FOREIGNKEY約束,請(qǐng)使用下面的SQL語(yǔ)法:MySQL/SQLServer/Oracle/MSAccess:ALTERTABLEOrdersADDCONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)撤銷(xiāo)FOREIGNKEY約束如需撤銷(xiāo)FOREIGNKEY約束,請(qǐng)使用下面的SQL:MySQL:ALTERTABLEOrdersDROPFOREIGNKEYfk_PerOrdersSQLServer/Oracle/MSAccess:ALTERTABLEOrdersDROPCONSTRAINTfk_PerOrdersSQLCHECK約束SQLCHECK約束CHECK約束用于限制列中的值的范圍。如果對(duì)單個(gè)列定義CHECK約束,那么該列只允許特定的值。如果對(duì)一個(gè)表定義CHECK約束,那么此約束會(huì)在特定的列中對(duì)值進(jìn)行限制。SQLCHECKConstraintonCREATETABLE下面的SQL在"Persons"表創(chuàng)建時(shí)為"Id_P"列創(chuàng)建CHECK約束。CHECK約束規(guī)定"Id_P"列必須只包含大于0的整數(shù)。MySQL:CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),CHECK(Id_P>0))SQLServer/Oracle/MSAccess:CREATETABLEPersons(Id_PintNOTNULLCHECK(Id_P>0),LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))如果需要命名CHECK約束,以和為多
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視劇道具租賃與影視場(chǎng)景搭建綜合服務(wù)合同
- 2025年中國(guó)搬運(yùn)系統(tǒng)行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 文化新聞稿件供應(yīng)與文化交流合作協(xié)議
- 網(wǎng)絡(luò)安全應(yīng)急響應(yīng)與安全設(shè)備采購(gòu)合同
- 電商平臺(tái)數(shù)據(jù)同步補(bǔ)充協(xié)議
- 網(wǎng)店運(yùn)營(yíng)稅費(fèi)代征代繳服務(wù)合同
- 觀光車(chē)維保合同范本
- 白名單授權(quán)協(xié)議書(shū)
- 淘寶店鋪銷(xiāo)售數(shù)據(jù)分析與運(yùn)營(yíng)決策支持合同
- 各工種承包協(xié)議書(shū)
- 特崗教師科學(xué)試題及答案
- 抖音員工合同協(xié)議
- 銀行培訓(xùn)中心管理制度
- 鋰電池基礎(chǔ)知識(shí)培訓(xùn)單選題100道及答案
- 2025年陜西省八年級(jí)中考三模生物試題(原卷版+解析版)
- 高分子化學(xué)材料結(jié)構(gòu)與性能試題及答案
- 客服質(zhì)檢管理競(jìng)聘述職報(bào)告
- 2025至2030年中國(guó)木瓜酶膠囊數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 郵件分揀員(國(guó)內(nèi)郵件分揀)中級(jí)
- 雞湯來(lái)嘍完整臺(tái)詞
- 中醫(yī)醫(yī)療技術(shù)的醫(yī)院感染控制制度
評(píng)論
0/150
提交評(píng)論