版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SQL語(yǔ)句教程SQL語(yǔ)句教程(01)SELECTTOC o 1-5 h z HYPERLINK l bookmark4SQL語(yǔ)句教程(02)DISTINCT2 HYPERLINK l bookmark6SQL語(yǔ)句教程(03)WHERE2 HYPERLINK l bookmark8SQL語(yǔ)句教程(04)ANDOR3 HYPERLINK l bookmark10SQL語(yǔ)句教程(05)IN3 HYPERLINK l bookmark12SQL語(yǔ)句教程(06)BETWEEN4 HYPERLINK l bookmark14SQL語(yǔ)句教程(07)LIKE4 HYPERLINK l bookmark16SQ
2、L語(yǔ)句教程(08)ORDERBY5SQL語(yǔ)句教程(09)函數(shù)5 HYPERLINK l bookmark18SQL語(yǔ)句教程(10)COUNT6 HYPERLINK l bookmark20SQL語(yǔ)句教程(11)GroupBy6 HYPERLINK l bookmark22SQL語(yǔ)句教程(12)HAVING7 HYPERLINK l bookmark24SQL語(yǔ)句教程(13)ALIAS7SQL語(yǔ)句教程(14)連接8SQL語(yǔ)句教程(15)外部連接9 HYPERLINK l bookmark26SQL語(yǔ)句教程(16)Subquery9 HYPERLINK l bookmark28SQL語(yǔ)句教程(17
3、)UNION10 HYPERLINK l bookmark30SQL語(yǔ)句教程(18)UNIONALL11 HYPERLINK l bookmark32SQL語(yǔ)句教程(19)INTERSECT11 HYPERLINK l bookmark34SQL語(yǔ)句教程(20)MINUS12 HYPERLINK l bookmark36SQL語(yǔ)句教程(21)Concatenate12SQL語(yǔ)句教程(22)Substring.SQL語(yǔ)句教程(23)TRIMSQL語(yǔ)句教程(24)CreateTableSQL語(yǔ)句教程(25)CreateView.SQL語(yǔ)句教程(26)CreateIndex141413151616S
4、QL語(yǔ)句教程(27)AlterTableTOC o 1-5 h zSQL語(yǔ)句教程(28)主鍵18SQL語(yǔ)句教程(29)外來(lái)鍵18 HYPERLINK l bookmark50SQL語(yǔ)句教程(30)DropTable19 HYPERLINK l bookmark52SQL語(yǔ)句教程(31)TruncateTable20 HYPERLINK l bookmark54SQL語(yǔ)句教程(32)InsertInto20 HYPERLINK l bookmark56SQL語(yǔ)句教程(33)Update20 HYPERLINK l bookmark58SQL語(yǔ)句教程(34)Delete21SQL語(yǔ)句教程(01)S
5、ELECT是用來(lái)做什么的呢?一個(gè)最常用的方式是將資料從數(shù)據(jù)庫(kù)中的表格內(nèi)選出。從這一句回答中,我們馬上可以看到兩個(gè)關(guān)鍵字:從(FROM)數(shù)據(jù)庫(kù)中的表格內(nèi)選出(SELECT)。(表格是一個(gè)數(shù)據(jù)庫(kù)內(nèi)的結(jié)構(gòu),它的目的是儲(chǔ)存資料。在表格處理這一部分中,我們會(huì)提到如何使用SQL來(lái)設(shè)定表格。)我們由這里可以看到最基本的SQL架構(gòu):SELECT欄位名FROM表格名我們用以下的例子來(lái)看看實(shí)際上是怎么用的。假設(shè)我們有以下這個(gè)表格:Store_Information表格storenamesalesdateLosAngeles$1500jan-05-1999SanDiego$250jan-07-1999LosAnge
6、les$300jan-08-1999Boston$700jan-08-1999若要選出所有的店名(store_Name),我們就打入:SELECTstore_nameFROMStore_Information結(jié)果:store_nameLosAngelesSanDiegoLosAngelesBoston我們一次可以讀取好幾個(gè)欄位,也可以同時(shí)由好幾個(gè)表格中選資料SQL語(yǔ)句教程(02)DISTINCTSELECT指令讓我們能夠讀取表格中一個(gè)或數(shù)個(gè)欄位的所有資料。這將把所有的資料都抓出,無(wú)論資料值有無(wú)重復(fù)。在資料處理中,我們會(huì)經(jīng)常碰到需要找出表格內(nèi)的不同資料值的情況。換句話說(shuō),我們需要知道這個(gè)表格/欄
7、位內(nèi)有哪些不同的值,而每個(gè)值出現(xiàn)的次數(shù)并不重要。這要如何達(dá)成呢?在SQL中,這是很容易做到的。我們只要在SELECT后加上一個(gè)DISTINCT就可以了。DISTINCT的語(yǔ)法如下:SELECTDISTINCT欄位名FROM表格名舉例來(lái)說(shuō),若要在以下的表格,Storenformation,找出所有不同的店名時(shí),Store_Information表格store_namesalesdateLosAngeles$1500jan-05-1999SanDiego$250jan-07-1999LosAngeles$300jan-08-1999Boston$700jan-08-1999我們就打入SELECTD
8、ISTINCTstore_nameFROMStore_Information結(jié)果:store_nameLosAngelesSanDiegoBostonSQL語(yǔ)句教程(03)WHERE我們并不一定每一次都要將表格內(nèi)的資料都完全抓出。在許多時(shí)候,我們會(huì)需要選擇性地抓資料。就我們的例子來(lái)說(shuō),我們可能只要抓出營(yíng)業(yè)額超過(guò)$1,000的資料。要做到這一點(diǎn),我們就需要用到WHERE這個(gè)指令。這個(gè)指令的語(yǔ)法如下:SELECT欄位名FROM表格名WHERE條件若我們要由以下的表格抓出營(yíng)業(yè)額超過(guò)$1,000的資料Store_Information表格storenamesalesdateLosAngeles$150
9、0jan-05-1999SanDiego$250jan-07-1999LosAngeles$300jan-08-1999Boston$700jan-08-1999我們就打入SELECTstore_nameFROMStore_InformationWHERESales1000結(jié)果:store_nameLosAngelesSQL語(yǔ)句教程(04)ANDOR在上一頁(yè)中,我們看到WHERE指令可以被用來(lái)由表格中有條件地選取資料。這個(gè)條件可能是簡(jiǎn)單的(像上一頁(yè)的例子),也可能是復(fù)雜的。復(fù)雜條件是由二或多個(gè)簡(jiǎn)單條件透過(guò)AND或是OR的連接而成。一個(gè)SQL語(yǔ)句中可以有無(wú)限多個(gè)簡(jiǎn)單條件的存在。復(fù)雜條件的語(yǔ)法如下
10、:SELECT欄位名FROM表格名WHERE簡(jiǎn)單條件ANDQR簡(jiǎn)單條件+代表之內(nèi)的情況會(huì)發(fā)生一或多次。在這里的意思就是AND加簡(jiǎn)單條件及OR加簡(jiǎn)單條件的情況可以發(fā)生一或多次。另外,我們可以用()來(lái)代表?xiàng)l件的先后次序。舉例來(lái)說(shuō),我們?nèi)粢赟tore_Information表格中選出所有Sales高于$1,000或是Sales在$500及$275之間的資料的話StoreInformation表格storenamesalesdateLosAngeles$1500jan-05-1999SanDiego$250jan-07-1999SanFrancisco$300jan-08-1999Boston$70
11、0jan-08-1999我們就打入SELECTstore_nameFROMStore_InformationWHERESales1000OR(Sales275)結(jié)果:store_nameLosAngelesSanFranciscoSQL語(yǔ)句教程(05)IN在SQL中,在兩個(gè)情況下會(huì)用到IN這個(gè)指令;這一頁(yè)將介紹其中之與WHERE有關(guān)的那一個(gè)情況。在這個(gè)用法下,我們事先已知道至少一個(gè)我們需要的值,而我們將這些知道的值都放入IN這個(gè)子句。IN指令的語(yǔ)法為下:SELECT欄位名FROM表格名WHERE欄位名IN(值一,值二;.)在括弧內(nèi)可以有一或多個(gè)值,而不同值之間由逗點(diǎn)分開(kāi)。值可以是數(shù)目或是文字。
12、若在括弧內(nèi)只有一個(gè)值,那這個(gè)子句就等于WHERE欄位名=值一舉例來(lái)說(shuō),若我們要在Store_Information表格中找出所有含蓋LosAngeles或SanDiego的資料StoreInformation表格storenamesalesdateLosAngeles$1500jan-05-1999SanDiego$250jan-07-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999我們就打入SELECTA_Z:所有以A起頭,另一個(gè)任何值的字原,且以Z為結(jié)尾的字串。ABZ和A2Z都符合這一個(gè)模式,而AKKZ并不符合(因?yàn)樵贏和Z之間有兩個(gè)
13、字原,而不是一個(gè)字原。ABC%:所有以ABC起頭的字串。舉例來(lái)說(shuō),ABCD和ABCABC都符合這個(gè)套式。%XYZ:所有以XYZ結(jié)尾的字串。舉例來(lái)說(shuō),WXYZ和ZZXYZ都符合這個(gè)套式。%AN%:所有含有AN這個(gè)套式的字串。舉例來(lái)說(shuō),LOSANGELES和SANFRANCISCO都符合這個(gè)套式。FROMStore_InformationWHEREstore_nameIN(LosAngeles,SanDiego)結(jié)果:storenamesalesdateLosAngeles$1500jan-05-1999SanDiego$250jan-07-1999SQL語(yǔ)句教程(06)BETWEENIN這個(gè)指令
14、可以讓我們依照一或數(shù)個(gè)不連續(xù)(discrete)的值的限制之內(nèi)抓出數(shù)據(jù)庫(kù)中的值,而B(niǎo)ETWEEN則是讓我們可以運(yùn)用一個(gè)范圍(range)內(nèi)抓出數(shù)據(jù)庫(kù)中的值。BETWEEN這個(gè)子句的語(yǔ)法如下SELECT欄位名FROM表格名WHERE欄位名BETWEEN值一AND值二這將選出欄位值包含在值一及值二之間的每一筆資料。舉例來(lái)說(shuō),若我們要由Store_Information表格中找出所有介于January6,1999及January10,1999中的資料StoreInformation表格store_namesalesdateLosAngeles$1500jan-05-1999SanDiego$250j
15、an-07-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999我們就打入SELECT*FROMStore_InformationWHEREDateBETWEENJan-06-1999ANDJan-10-1999請(qǐng)讀者注意:在不同的數(shù)據(jù)庫(kù)中,日期的儲(chǔ)存法可能會(huì)有所不同。在這里我們選擇了其中一種儲(chǔ)存法。結(jié)果:store_namesalesdateSanDiego$250jan-07-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999SQL語(yǔ)句教程(07)LIKELIKE是另一個(gè)在WHERE子
16、句中會(huì)用到的指令。基本上,LIKE能讓我們依據(jù)一個(gè)套式(pattern)來(lái)找出我們要的資料。相對(duì)來(lái)說(shuō),在運(yùn)用IN的時(shí)候,我們完全地知道我們需要的條件;在運(yùn)用BETWEEN的時(shí)候,我們則是列出一個(gè)范圍。LIKE的語(yǔ)法如下:SELECT欄位名FROM表格名WHERE欄位名LIKE套式StoreInformatior表格store_namesalesdateLosAngeles$1500jan-05-1999表格上:套式經(jīng)常包括野卡(wildcard).以下是幾個(gè)例子:SanDiego$250jan-07-1999SanFrancisco$300jan-08-1999Boston$700jan-08
17、-1999我們就打入storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999SanDiego$250jan-07-1999SELECT*FROMStorenformationWHEREstore_nameLIKE%AN%結(jié)果:SQL語(yǔ)句教程(08)ORDERBY到目前為止,我們已學(xué)到如何藉由SELECT及WHERE這兩個(gè)指令將資料由表格中抓出。不過(guò)我們尚未提到這些資料要如何排列。這其實(shí)是一個(gè)很重要的問(wèn)題。事實(shí)上,我們經(jīng)常需要能夠?qū)⒆コ龅馁Y料做一個(gè)有系統(tǒng)的顯示。這可能是由小往大(ascending)或是由大往小
18、(descending)。在這種情況下,我們就可以運(yùn)用ORDERBY這個(gè)指令來(lái)達(dá)到我們的目的。ORDERBY的語(yǔ)法如下:SELECT欄位名FROM表格名WHERE條件ORDERBY欄位名ASC,DESC代表WHERE是不一定需要的。不過(guò),如果WHERE子句存在的話,它是在ORDERBY子句之前。ASC代表結(jié)果會(huì)以由小往大的順序列出,而DESC代表結(jié)果會(huì)以由大往小的順序列出。如果兩者皆沒(méi)有被寫出的話,那我們就會(huì)用ASC。我們可以照好幾個(gè)不同的欄位來(lái)排順序。在這個(gè)情況下,ORDERBY子句的語(yǔ)法如下:假設(shè)有兩個(gè)欄位:ORDERBY欄位一ASC,DESC,欄位二ASC,DESC若我們對(duì)這兩個(gè)欄位都選
19、擇由小往大的話,那這個(gè)子句就會(huì)造成結(jié)果是依據(jù)欄位一由小往大排。若有好幾筆資料欄位一的值相等,那這幾筆資料就依據(jù)欄位二由小往大排。store_namesalesdateLosAngeles$1500jan-05-1999SanDiego$250jan-07-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999我們就打入SELECTstore_name,Sales,DateFROMStore_InformationORDERBYSalesDESC結(jié)果:store_namesalesdateLosAngeles$1500jan-05-1999Bos
20、ton$700jan-08-1999SanFrancisco$300jan-08-1999舉例來(lái)說(shuō),若我們要依照Sales欄位的由大往小列出Store_Information表格中的資料Store_Information表格SanDiego$250jan-07-1999在以上的例子中,我們用欄位名來(lái)指定排列順序的依據(jù)。除了欄位名外,我們也可以用欄位的順序(依據(jù)SQL句中的順序)。在SELECT后的第一個(gè)欄位為1,第二個(gè)欄位為2,以此類推。在上面這個(gè)例子中,我們打以下這一句SQL可以達(dá)到完全一樣的效果:SELECTstore_name,Sales,DateFROMStore_Informatio
21、nORDERBY2DESCSQL語(yǔ)句教程(09)函數(shù)既然數(shù)據(jù)庫(kù)中有許多資料都是已數(shù)字的型態(tài)存在,一個(gè)很重要的用途就是要能夠?qū)@些數(shù)字做一些運(yùn)算例如將它們總合起來(lái),或是找出它們的平均值。SQL有提供一些這一類的函數(shù)。它們是:AVG(平均)COUNT(計(jì)數(shù))MAX(最大值)MIN(最小值)SUM(總合)運(yùn)用函數(shù)的語(yǔ)法是:SELECT函數(shù)名(”欄位名)FROM表格名舉例來(lái)說(shuō),若我們要由我們的示范表格中求出Sales欄位的總合StoreInformation表格storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999
22、Boston$700jan-08-1999我們就打入SELECTSUM(Sales)FROMStore_Information結(jié)果:SUM(Sales)$2750$2750代表所有Sales欄位的總合:$1500+$250+$300+$700.除了函數(shù)的運(yùn)用外,SQL也可以做簡(jiǎn)單的數(shù)學(xué)運(yùn)算,例如加(+)和減(-)。對(duì)于文字類的資料,SQL也有好幾個(gè)文字處理方面的函數(shù),例如文字相連(concatenation),文字修整(trim),以及子字串(substring)。不同的數(shù)據(jù)庫(kù)對(duì)這些函數(shù)有不同的語(yǔ)法,所以最好是參考您所用數(shù)據(jù)庫(kù)的信息,來(lái)確定在那個(gè)數(shù)據(jù)庫(kù)中,這些函數(shù)是如何被運(yùn)用的。SQL語(yǔ)句教程
23、(10)COUNT在上一頁(yè)有提到,COUNT是函數(shù)之一。由于它的使用廣泛,我們?cè)谶@里特別提出來(lái)討論。基本上,COUNT讓我們能夠數(shù)出在表格中有多少筆資料被選出來(lái)。它的語(yǔ)法是:SELECTCOUNT(欄位名)FROM表格名舉例來(lái)說(shuō),若我們要找出我們的示范表格中有幾筆store_name欄不是空白的資料時(shí)Store_Information表格storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999我們就打入SELECTCOUNT(store_name)FROMStore_
24、InformationWHEREstore_nameisnotNULL結(jié)果:Count(store_name)4isnotNULL是這個(gè)欄位不是空白的意思。COUNT和DISTINCT經(jīng)常被合起來(lái)使用,目的是找出表格中有多少筆不同的資料(至于這些資料實(shí)際上是什么并不重要)。舉例來(lái)說(shuō),如果我們要找出我們的表格中有多少個(gè)不同的store_name,我們就打入,SELECTCOUNT(DISTINCTstore_name)FROMStore_Information結(jié)果:Count(DISTINCTstore_name)3SQL語(yǔ)句教程(11)GroupBy我們現(xiàn)在回到函數(shù)上。記得我們用SUM這個(gè)指令
25、來(lái)算出所有的Sales(營(yíng)業(yè)額)吧!如果我們的需求變成是要算出每一間店(store_name)的營(yíng)業(yè)額(sales),那怎么辦呢?在這個(gè)情況下,我們要做到兩件事:第一,我們對(duì)于store_name及Sales這兩個(gè)欄位都要選出。第二,我們需要確認(rèn)所有的sales都要依照各個(gè)store_name來(lái)分開(kāi)算。這個(gè)語(yǔ)法為:SELECT欄位1,SUM(欄位2)FROM表格名GROUPBY欄位1在我們的示范上Store_Information表格storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999Boston$700
26、jan-08-1999我們就打入SELECTstore_name,SUM(Sales)FROMStore_InformationGROUPBYstore_name結(jié)果:storenameSUM(Sales)LosAngeles$1800SanDiego$250Boston$700當(dāng)我們選不只一個(gè)欄位,且其中至少一個(gè)欄位有包含函數(shù)的運(yùn)用時(shí),我們就需要用到GROUPBY這個(gè)指令。在這個(gè)情況下,我們需要確定我們有GROUPBY所有其他的欄位。換句話說(shuō),除了有包括函數(shù)的欄位外,我們都需要將其放在GROUPBY的子句中。SQL語(yǔ)句教程(12)HAVING那我們?nèi)绾螌?duì)函數(shù)產(chǎn)生的值來(lái)設(shè)定條件呢?舉例來(lái)說(shuō),我
27、們可能只需要知道哪些店的營(yíng)業(yè)額有超過(guò)$1,500。在這個(gè)情況下,我們不能使用WHERE的指令。那要怎么辦呢?很幸運(yùn)地,SQL有提供一個(gè)HAVING的指令,而我們就可以用這個(gè)指令來(lái)達(dá)到這個(gè)目標(biāo)。HAVING子句通常是在一個(gè)SQL句子的最后。一個(gè)含有HAVING子句的SQL并不一定要包含GROUPBY子句。HAVING的語(yǔ)法如下:SELECT欄位1,SUM(欄位2)FROM表格名GROUPBY欄位1HAVING(函數(shù)條件)請(qǐng)讀者注意:GROUPBY子句并不是一定需要的。在我們Store_Information表格這個(gè)例子中Store_Information表格storenamesalesdateL
28、osAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999我們打入SELECTstore_name,SUM(sales)FROMStore_InformationGROUPBYstore_nameHAVINGSUM(sales)1500結(jié)果:storenameSUM(Sales)LosAngeles$1800SQL語(yǔ)句教程(13)ALIAS接下來(lái),我們討論alias(別名)在SQL上的用處。最常用到的別名有兩種:欄位別名及表格別名。簡(jiǎn)單地來(lái)說(shuō),欄位別名的目的是為了讓SQL產(chǎn)生的結(jié)果易讀。在之前的例子中,每當(dāng)
29、我們有營(yíng)業(yè)額總合時(shí),欄位名都是SUM(sales)。雖然在這個(gè)情況下沒(méi)有什么問(wèn)題,可是如果這個(gè)欄位不是一個(gè)簡(jiǎn)單的總合,而是一個(gè)復(fù)雜的計(jì)算,那欄位名就沒(méi)有這么易懂了。若我們用欄位別名的話,就可以確認(rèn)結(jié)果中的欄位名是簡(jiǎn)單易懂的。第二種別名是表格別名。要給一個(gè)表格取一個(gè)別名,只要在FROM子句中的表格名后空一格,然后再列出要用的表格別名就可以了。這在我們要用SQL由數(shù)個(gè)不同的表格中獲取資料時(shí)是很方便的。這一點(diǎn)我們?cè)谥笳劦竭B接(join)時(shí)會(huì)看到。我們先來(lái)看一下欄位別名和表格別名的語(yǔ)法:SELECT表格別名.欄位1欄位別名FROM表格名表格別名基本上,這兩種別名都是放在它們要替代的物件后面,而它們中
30、間由一個(gè)空白分開(kāi)。我們繼續(xù)使用Store_Information這個(gè)表格來(lái)做例子Store_Information表格storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999我們用跟SQLGROUPBY那一頁(yè)一樣的例子。這里的不同處是我們加上了欄位別名以及表格別名:SELECTA1.store_nameStore,SUM(A1.Sales)TotalSalesFROMStore_InformationA1GROUPBYA1.store_name結(jié)果:StoreTota
31、lSalesLosAngeles$1800SanDiego$250Boston$700在結(jié)果中,資料本身沒(méi)有不同。不同的是欄位的標(biāo)題。這是運(yùn)用欄位別名的結(jié)果。在第二個(gè)欄位上,原本我們的標(biāo)題是Sum(Sales),而現(xiàn)在我們有一個(gè)很清楚的TotalSales。很明顯地,TotalSales能夠比Sum(Sales)更精確地闡述這個(gè)欄位的含意。用表格別名的好處在這里并沒(méi)有顯現(xiàn)出來(lái),不過(guò)這在下一頁(yè)(SQLJoin)就會(huì)很清楚了。SQL語(yǔ)句教程(14)連接現(xiàn)在我們介紹連接(join)的概念。要了解連接,我們需要用到許多我們之前已介紹過(guò)的指令。我們先假設(shè)我們有以下的兩個(gè)表格Store_Informati
32、on表格storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999Geography表格regionnamestorenameEastBostonEastNewYorkWestLosAngelesWestSanDiego而我們要知道每一區(qū)(region_name)的營(yíng)業(yè)額(sales)。Geography這個(gè)表格告訴我們每一區(qū)有哪些店,而Store_Information告訴我們每一個(gè)店的營(yíng)業(yè)額。若我們要知道每一區(qū)的營(yíng)業(yè)額,我們需要將這兩個(gè)不同表格中的資料串聯(lián)起來(lái)。當(dāng)我
33、們仔細(xì)了解這兩個(gè)表格后,我們會(huì)發(fā)現(xiàn)它們可經(jīng)由一個(gè)相同的欄位,store_name,連接起來(lái)。我們先將SQL句列出,之后再討論每一個(gè)子句的意義:SELECTA1.region_nameREGION,SUM(A2.Sales)SALESFROMGeographyA1,Store_InformationA2WHEREA1.store_name=A2.store_nameGROUPBYA1.region_name結(jié)果:REGIONSALESEast$700West$2050在第一行中,我們告訴QL去選出兩個(gè)欄位:第一個(gè)欄位是Geography表格中的Region_name欄位(我們?nèi)×艘粋€(gè)別名叫做RE
34、GION);第二個(gè)欄位是Store_Information表格中的sales欄位(別名為SALES)。請(qǐng)注意在這里我們有用到表格別名:Geography表格的別名是A1,Store_Information表格的別名是A2。若我們沒(méi)有用表格別名的話,第一行就會(huì)變成SELECTGeography.region_nameREGION,SUM(Store_Information.Sales)SALES很明顯地,這就復(fù)雜多了。在這里我們可以看到表格別名的功用:它育SQL句容易被了解,尤其是這個(gè)SQL句含蓋好幾個(gè)不同的表格時(shí)。接下來(lái)我們看第三行,就是WHERE子句。這是我們闡述連接條件的地方。在這里,我們
35、要確認(rèn)Geography表格中Store_name欄位的值與Store_Information表格中store_name欄位的值是相等的。這個(gè)WHERE子句是一個(gè)連接的靈魂人物,因?yàn)樗慕巧谴_定兩個(gè)表格之間的連接是正確的。如果WHERE子句是錯(cuò)誤的,我們就極可能得到一個(gè)笛卡兒連接(Cartesianjoin)。笛卡兒連接會(huì)造成我們得到所有兩個(gè)表格每?jī)尚兄g所有可能的組合。在這個(gè)例子中,笛卡兒連接會(huì)讓我們得到4x4=16行的結(jié)果。SQL語(yǔ)句教程(15)外部連接之前我們看到的左連接(leftjoin),又稱內(nèi)部連接(innerjoin)。在這個(gè)情況下,要兩個(gè)表格內(nèi)都有同樣的值,那一筆資料才會(huì)被選
36、出。那如果我們想要列出一個(gè)表格中每一筆的資料,無(wú)論它的值在另一個(gè)表格中有沒(méi)有出現(xiàn),那該怎么辦呢?在這個(gè)時(shí)候,我們就需要用到SQLOUTERJOIN(外部連接)的指令。外部連接的語(yǔ)法是依數(shù)據(jù)庫(kù)的不同而有所不同的。舉例來(lái)說(shuō),在Oracle上,我們會(huì)在WHERE子句中要選出所有資料的那個(gè)表格之后加上一個(gè)(+)來(lái)代表說(shuō)這個(gè)表格中的所有資料我們都要。假設(shè)我們有以下的兩個(gè)表格:Store_Information表格storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999Geogr
37、aphy表格regionnamestorenameEastBostonEastNewYorkWestLosAngelesWestSanDiego我們需要知道每一間店的營(yíng)業(yè)額。如果我們用一個(gè)普通的連接,我們將會(huì)漏失掉NewYork這個(gè)店,因?yàn)樗⒉淮嬖谟赟tore_Information這個(gè)表格。所以,在這個(gè)情況下,我們需要用外部連接來(lái)串聯(lián)這兩個(gè)表格:SELECTA1.store_name,SUM(A2.Sales)SALESFROMGeorgraphyA1,Store_InformationA2WHEREA1.store_name=A2.store_name(+)GROUPBYA1.store
38、_name我們?cè)谶@里是使用了Oracle的外部連接語(yǔ)法。結(jié)果:store_nameSALESBoston$700NewYorkLosAngeles$1800SanDiego$250請(qǐng)注意:當(dāng)?shù)诙€(gè)表格沒(méi)有相對(duì)的資料時(shí),SQL會(huì)傳回NULL值。在這一個(gè)例子中,NewYork并不存在于Store_Information表格,所以它的SALES欄位是NULL。SQL語(yǔ)句教程(16)Subquery我們可以在一個(gè)SQL語(yǔ)句中放入另一個(gè)SQL語(yǔ)句。當(dāng)我們?cè)赪HERE子句或WHERE子句或HAVING子句中插入另一個(gè)SQL語(yǔ)句時(shí),我們就有一個(gè)subquery的架構(gòu)。Subquery的作用是什么呢?第它可以
39、被用來(lái)連接表格。另外,有的時(shí)候subquery是唯一能夠連接兩個(gè)表格的方式。Subquery的語(yǔ)法如下:SELECT欄位1FROM表格WHERE欄位2比較運(yùn)算素(SELECT欄位1FROM表格WHERE條件)比較運(yùn)算素可以是相等的運(yùn)算素,例如=,=,=.這也可以是一個(gè)對(duì)文字的運(yùn)算素,例如LIKE.我們就用剛剛在闡述SQL連接時(shí)用過(guò)的例子:Store_Information表格storenamesalesdateLosAngeles$1500jan-05-1999SanFrancisco$300jan-08-1999Boston$700jan-08-1999Geography表格regionna
40、mestorenameEastBostonEastNewYorkWestLosAngelesWestSanDiego我們要運(yùn)用subquery來(lái)找出所有在西部的店的營(yíng)業(yè)額。我們可以用下面的SQL來(lái)達(dá)到我們的目的:SELECTSUM(Sales)FROMStore_InformationWHEREStore_nameIN(SELECTstore_nameFROMGeographyWHEREregion_name=West)結(jié)果:SUM(Sales)2050在這個(gè)例子中,我們并沒(méi)有直接將兩個(gè)表格連接起來(lái),然后由此直接算出每一間西區(qū)店面的營(yíng)業(yè)額。我們做的是先找出哪些店是在西區(qū)的,然后再算出這些店的營(yíng)業(yè)額總共是多少。SQL語(yǔ)句教程(17)UNIONUNION指令的目的是將兩個(gè)SQL語(yǔ)句的結(jié)果合并起來(lái)。從這個(gè)角度來(lái)看,UNION跟JOIN有些許類似因?yàn)檫@兩個(gè)指令都可以由多個(gè)表格中擷取資料。UNION的一個(gè)限制是兩個(gè)SQL語(yǔ)句所產(chǎn)生的欄位需要是同樣的資料種類。另外,當(dāng)我們用UNION這個(gè)指令時(shí),我們只會(huì)看到不同的資料值(類似SELECTDISTINCT)。UNION的語(yǔ)法如下:SQL語(yǔ)句1UNIONSQL語(yǔ)句2假設(shè)我們有以下的兩個(gè)表格Store_Information表
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度智能客服系統(tǒng)開(kāi)發(fā)保密合同范本3篇
- 教師幸福成長(zhǎng)計(jì)劃
- 新學(xué)期班級(jí)管理計(jì)劃大班新學(xué)期班級(jí)管理亮點(diǎn)
- 2025小學(xué)學(xué)困生轉(zhuǎn)化工作計(jì)劃范文
- 班主任工作讀書心得感想班主任工作計(jì)劃高中
- 度教育培訓(xùn)計(jì)劃書
- 中學(xué)教師年度培訓(xùn)工作計(jì)劃范文
- 置業(yè)顧問(wèn)個(gè)人年終總結(jié)置業(yè)顧問(wèn)個(gè)人工作計(jì)劃
- 衛(wèi)生應(yīng)急培訓(xùn)計(jì)劃、小結(jié)
- 小學(xué)興趣小組活動(dòng)計(jì)劃
- 大學(xué)物業(yè)服務(wù)月考核評(píng)價(jià)評(píng)分表
- 福建師范大學(xué)《歌曲寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)學(xué)教程 《疼痛與護(hù)理》課件
- 2023-2024學(xué)年天津市部分區(qū)八年級(jí)(上)期末物理試卷
- 律師事務(wù)所薪酬分配制度
- 2024山東高速路橋集團(tuán)股份限公司社會(huì)招聘455人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 第10課《往事依依》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 2024-2030年中國(guó)呼叫中心外包行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- Unit 4 My Favourite Subject Section B(教學(xué)教學(xué)設(shè)計(jì)) 2024-2025學(xué)年人教版(2024)七年級(jí)英語(yǔ)上冊(cè)
- 汽車之家:2024年增換購(gòu)用戶需求洞察1727674734
- 陜西省師大附中2025屆高三下學(xué)期聯(lián)考物理試題含解析
評(píng)論
0/150
提交評(píng)論