版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
SQL
這一句回答中,我們馬上可以看到兩個關(guān)鍵字:從(FROM)數(shù)據(jù)庫中的表格內(nèi)選出(SELECT)。(表格是一個數(shù)據(jù)庫內(nèi)的結(jié)構(gòu),它的目的是資料。在表格處理這一部分中,我們會提到如何使用SQL來設(shè)定表格。)我們由這里可以看到最基本的SQL架構(gòu):SELECT欄位名FROM表格名LosSanLos若要選出所有的店名(store_Name),我們就打入:SELECTstore_nameFROMStore_InformationLosAngelesSanDiegoLosAngeles我們一次可以好幾個欄位,也可以同時由好幾個表格中選資料SELECT指令讓我們能夠表格中一個或數(shù)個欄位的所有資料。這將把所哪些不同的值,而每個值出現(xiàn)的次數(shù)并不重要。這要如何達(dá)成呢?在SQLSELECTDISTINCT就可以了。DISTINCT的語法如下:SELECTDISTINCT欄位名FROM表格名LosSanLosSELECTDISTINCTstore_nameFROMLosAngelesSanDiego$1,000WHERE這個指令。這個SELECT欄位名FROM表格名"WHERE條件$1,000LosSanLosSELECTstore_nameFROMStore_InformationWHERESales>1000Los在上一頁中,我們看到WHERE指令可以被用來由表格中有條件地選取資料。這個條件可能是簡單的(像上一頁的例子),也可能是復(fù)雜的。復(fù)雜條件ANDORSQL語句中SELECT欄位名FROM"表格名"WHERE簡單條件"{[AND|OR簡單條件{}+代表{}AND加簡單條OR()來代表舉例來說,我們?nèi)粢?中選出所有Sales高$1,000Sales$500$275LosSanSanSELECTstore_nameFROMStore_InformationWHERESales>1000OR(Sales<500ANDSales>LosAngelesSanFranciscoSQLIN這個指令;這一頁將介紹其中之一━━與WHERE有關(guān)的那一個情況。在這個用法下,我們事先已知道至少一個我們需要的值,而這些知道的值都放入IN這個子句。IN指令的語SELECT欄位名FROM表格名WHERE欄位名IN值一值二字。若在括弧內(nèi)只有一個值,那這個子句就等于WHERE欄位名值一 中找出所有含蓋LosAngeles或SanDiego的資料,LosSanSanSELECTFROMWHEREstore_nameIN('LosAngeles','SanLosSanIN這個指令可以讓我們依照一或數(shù)個不連續(xù)(discrete)的值的限制之內(nèi)抓BETWEEN(range)內(nèi)抓出數(shù)據(jù)庫中的值。BETWEEN這個子句的語法如下:SELECT欄位名FROM"表格名WHERE欄位名BETWEEN值一AND值二舉例來說,若我們要 中找出所有介January6,1999January10,1999LosSanSanSELECTFROMWHEREDateBETWEEN'Jan-06-1999'AND'Jan-10-SanSanLIKEWHERE子句中會用到的指令?;旧希琇IKE能讓我們依據(jù)一個套式(pattern)來找出我們要的資料。相對來說,在運用IN的時BETWEEN的時候,我們則是列出一個范圍。LIKE的語法如下:SELECT欄位名FROM表格名WHERE欄位名LIKE套式{套式}(wildcard).'A_Z':'A''Z'為結(jié)尾的字串。'ABZ'和'A2Z'都符合這一個模式,而'AKKZ'并不符合(因為在A和Z'ABC%':'ABC'起頭的字串。舉例來說,'ABCD''%XYZ':'XYZ'結(jié)尾的字串。舉例來說,'WXYZ''ZZXYZ'都'%AN%':'AN''LOSANGELES'和'SANFRANCISCO'都符合這個套式。以上最后一個例子用在我們 上LOSSANSANSELECTFROMWHEREstore_nameLIKELOSSANSAN到目前為止,我們已學(xué)到如何藉由SELECT及WHERE這兩個指令將資料(ascending)或是由大往小(descending)。在這種情況下,我們就可以運用ORDERBY這個指令來達(dá)到我們的目的。ORDERBY的語法如下SELECT欄位名FROM"表格名"[WHERE條件"]ORDERBY欄位名ASC[]代表WHERE是一定需要的。不過,如果WHERE子句存在的話,它是在ORDERBY子句之前。ASC代表結(jié)果會以由小往大的順序列出,而DESC代表結(jié)果會以由大往小的順序列出。如果兩者皆沒有被寫出的話,那我們就會用ASC。ORDERBY子句ORDERBY欄位一ASCDESC]欄位二ASC"欄位一""欄位一"的值相等,那這幾筆資料就依據(jù)"欄位二"由小往大排。舉例來說,若我們要依照SalesLosSanSanSELECTstore_name,Sales,DateFROMStore_InformationORDERBYSalesDESCLosSanSan(SQL句中的順序)SELECT后的第一個欄位為1,第二個欄位為2,以此類推。在上面這個例子中,我們打以下這一句SQL可以達(dá)到完全一樣的效果:SELECTstore_name,Sales,DateFROMStore_InformationORDERBY2DESCSQL有提供一些這一類的函數(shù)。它們是:AVG(平均COUNT(計數(shù)MAX(最大值MIN(最小值SUM(總合SELECT函數(shù)名"("欄位名")FROM"表格名"舉例來說,若我們要由我們的示范表格中求出SalesLosSanLosSELECTSUM(Sales)FROM$2750Sales欄位的總合:$1500$250$300除了函數(shù)的運用外,SQL也可以做簡單的數(shù)算,例如加(+)和減(-)。對于文字類的資料,SQL也有好幾個文字處理方面的函數(shù),例如文字相連(concatenation)(trim)(substring)。不同的數(shù)據(jù)在上一頁有提到,COUNT是函數(shù)之一。由于它的使用廣泛,我們在這里特別提出來討論?;旧?,COUNT讓我們能夠數(shù)出在表格中有多少筆資料被選出SELECTCOUNT("欄位名FROM表格名store_name欄不是空白LosSanLosSELECTCOUNT(store_name)FROMStore_InformationWHEREstore_nameisnotNULL"isnotNULL""這個欄位不是空白"COUNTDISTINCT經(jīng)常被合起來使用,目的是找出表格中有多少筆不(至于這些資料實際上是什么并不重要)出我們的表格中有多少個不同的store_name,我們就打入,SELECTCOUNT(DISTINCTFROMCount(DISTINCTstore_name)SUMSales營業(yè)額)吧!如果我們的需求變成是要算出每一間店(store_name)的營業(yè)額store_nameSalessalesstore_nameSELECT1SUM("FROM"表格名"GROUPBY1"LosSanLosSELECTstore_name,SUM(Sales)FROMStore_InformationGROUPBYstore_namestore_nameSUM(Sales)LosAngeles$1800SanDiego 要用到GROUPBY這個指令。在這個情況下,我們需要確定我們有GROUPBY所有其他的欄位。換句話說,除了有包括函數(shù)的欄位外,我們都需要將其放在GROUPBY的子句中。$1,500WHERE的指令。那要怎么辦呢?很幸運地,SQLHAVING的指令,而我們就可以用這個指令來達(dá)到這個目標(biāo)。HAVING子句通常是在一個SQL句子的最后。一個含有HAVING子句的SQL并不一定要包含GROUPBY子句。HAVING的語法如下:SELECT1SUM("FROM"表格名"GROUPBY1"HAVING函數(shù)條件請讀者注意:GROUPBY子句并不是一定需要的。 LosSanLosSELECTstore_name,SUM(sales)FROMStore_InformationGROUPBYstore_nameHAVINGSUM(sales)>Los alias別名)SQL上的用處。最常用到的別名有兩種:簡單地來說,欄位別名的目的是為了讓SQL產(chǎn)生的結(jié)果易讀。在之前的例子SUM(sales)第二種別名是表格別名。要給一個表格取一個別名,只要在FROM子句中SQL(join)SELECT表格別名"."1欄位別名"FROM"表格名""表格別名"分開。我們繼續(xù)使用Store_Information這個表格來做例子:LosSanLosSQLGROUPBYSELECTA1.store_nameStore,SUM(A1.Sales)"TotalSales"FROMStore_InformationA1GROUPBY TotalSalesLosAngeles$1800SanDiego "Sum(Sales)",而現(xiàn)在我們有一個很清楚的"TotalSales"。很明顯地,"TotalSales"能夠比"Sum(Sales)"過這在下一頁(SQLJoin)就會很清楚了。介紹過的指令。我們先假設(shè)我們有以下的兩個表格,LosSanLosGeographyNewLosSan(region_name)(sales)Geography這Store_Information告訴我們每一個同的欄位,store_nameSQLSELECTA1.region_nameREGION,SUM(A2.Sales)SALESFROMGeographyA1,Store_InformationA2WHEREA1.store_name=A2.store_nameGROUPBYA1.region_nameREGION 在第一行中,我們告訴SQL去選出兩個欄位:第一個欄位是Geography表格中的Region_name欄位(我們?nèi)×艘粋€別名叫做REGION);第二個 中的sales欄位(別名為SALES)。請注意在這里我們有用到表格別名:Geography表格的別名是A1,A2SELECTGeography.region_nameSUM(Store_Information.Sales)很明顯地,這就復(fù)雜多了。在這里我們可以看到表格別名的功用:它能讓SQL接下來我們看第三行,就是WHERE子句。這是我們闡述連接條件的地GeographyStore_name欄位的值與中store_name欄位的值是相等的。這個WHERE子句是接的人物,因為它的角色是確定兩個表格之間的連接是正確的。如果WHERE子句是錯誤的,我們就極可能得到一個連接(Cartesianjoin)。連接會造成我們得到所有兩個表格每兩行之間所有可能的組合。在這個例子中,連接會讓我們得到4x4=16行的(leftjoin)(innerjoin)。在這個情況么辦呢?在這個時候,我們就需要用到SQLOUTERJOIN(外部連接)的外部連接的語法是依數(shù)據(jù)庫的不同而有所不同的。舉例來說,在Oracle上,WHERE"(+)"來LosSanLosGeographyNewLosSan'NewYork'Store_Information這個表格。SELECTA1.store_name,SUM(A2.Sales)SALESFROMGeorgraphyA1,Store_InformationA2WHEREA1.store_name=A2.store_name(+)GROUPBYOraclestore_nameSALES NewYorkLosAngeles$1800SanDiego 請注意:當(dāng)?shù)诙€表格沒有相對的資料時,SQL會傳回NULL值。在這一個例子中,'NewYork'并不存在于 "SALES"欄位是NULL。(leftjoin)(innerjoin)。在這個情況么辦呢?在這個時候,我們就需要用到SQLOUTERJOIN(外部連接)的外部連接的語法是依數(shù)據(jù)庫的不同而有所不同的。舉例來說,在Oracle上,WHERE"(+)"來LosSanLosGeographyNewLosSan'NewYork'Store_Information這個表格。SELECTA1.store_name,SUM(A2.Sales)SALESFROMGeorgraphyA1,Store_InformationA2WHEREA1.store_name=A2.store_name(+)GROUPBYOraclestore_nameSALES NewYorkLosAngeles$1800SanDiego 請注意:當(dāng)?shù)诙€表格沒有相對的資料時,SQL會傳回NULL值。在這一個例子中,'NewYork'并不存在于 "SALES"欄位是NULL。我們可以在一個SQL語句中放入另一個SQL語句。當(dāng)我們在WHERE子句或WHERE子句或HAVING子句中插入另一個SQL語句時,我們就subquerySubquery的作用是什么呢?第一,它可以被用來連接表格。另外,有的時候subquery是唯一能夠連接兩個表格的方式。SubquerySELECT1"FROM"表格"WHERE2比較運算素](SELECT"1"FROM"表格"WHERE條件])[比較運算素]這也可以是一個對文字的運算素,例如"LIKE."SQLLosSanLosGeographyNewLosSansubquerySQLSELECTSUM(Sales)FROMStore_InformationWHEREStore_nameIN(SELECTstore_nameFROMGeographyWHEREregion_name='West')UNION指令的目的是將兩個SQL語句的結(jié)果合并起來。從這個角度來看,UNION跟JOIN有些許類似,因為這兩個指令都可以由多個表格中擷取資料。UNION的一個限制是兩個SQL語句所產(chǎn)生的欄位需要是同樣的資料UNION(類似SELECTDISTINCT)。UNION[SQL1][SQL語句LosSanLosInternetSales(sales)的日子。要達(dá)到這個目的,我們用以下的SQL語句:SELECTDateFROMStore_InformationSELECTDateFROM有一點值得注意的是,如果我們在任何一個SQL語句(或是兩句都一起)"SELECTDISTINCTDate"UNIONALL這個指令的目的也是要將兩個SQL語句的結(jié)果合并在一起。UNIONALLUNIONUNIONALL會將每一筆符合條UNIONALL[SQL1]UNIONALL[SQL2]UNIONALLUNION的不同。同LosSanLosInternetSales以下的SQL語句:SELECTDateFROMStore_InformationUNIONALLSELECTDateFROMUNIONINTERSECTSQL語句所產(chǎn)生的結(jié)果做處理的。不同的地方是,UNION基本上是一個OR(如果這個值存在于第一句或是第二句,它就會被選出),而INTERSECT則比較像AND(這個值要存在于第一句和第二句才會被選出)。UNION是聯(lián)集,而INTERSECT是交集。INTERSECT[SQL1][SQL語句LosSanLosInternetSales而我們要找出哪幾天有店面和網(wǎng)絡(luò)。要達(dá)到這個目的,我們用以下SQLSELECTDateFROMStore_InformationSELECTDateFROMINTERSECTMINUSSQLSQL語句所產(chǎn)生的結(jié)果,然后看這些結(jié)果有沒有在第二個SQL語句的結(jié)果中。如果有的話,那這一筆資料就被去除,而不會在最后的結(jié)果中出現(xiàn)。如果第二個SQL語句所產(chǎn)生的結(jié)果并沒有存在于第一個SQL語句所產(chǎn)生的結(jié)果內(nèi),那這筆資料就MINUS[SQL1][SQL語句LosSanLosInternetSales的,我們用以下的SQL語句:SELECTDateFROMStore_InformationSELECTDateFROM"Jan-05-1999",Jan-07-1999",andJan-08-1999"DateFROMStore_Information"所產(chǎn)生的結(jié)果。在這里面,"Jan-07-1999"是存在于"SELECTDateFROMInternet_Sales"所產(chǎn)生的結(jié)果中。因此"Jan-07-1999"并不在最后的結(jié)果中。MINUS 格。雖然許多數(shù)據(jù)庫工具可以在不需用到SQL的情況下建立表格,不過由于表格是一個最基本的架構(gòu),我們決定包括CREATETABLE的語法在這CREATETABLE的語法之前,我們最好先對表格這個東西有些多一點的了解。表格被分為欄位(column)及列位(row)。每一列代表一筆(1),、一個實數(shù)(0.55)('sql')、一個日期/時間(例如'2000-JAN-2503:22:22')、或甚至是以二進(jìn)法(binary)的下定義。(例如'姓'這個欄位的資料種類是char(50)━━代表這是一個50CREATETABLECREATETABLE表格名("11資料種類"22資料種類...若我們要建立我們上面提過的顧客表格,我們就打入以下的CREATETABLEcustomer(First_Namechar(50),Last_Namechar(50),Addresschar(50),Citychar(50),Countrychar(25),Birth_Datedate)這樣做的話,那將會是一個很大的問題,因為數(shù)據(jù)庫管理師(DatabaseAdministratorDBA)勢必?zé)o法對數(shù)據(jù)庫做有效率的管理。還好,SQL有提供一個DROPTABLE的語法來讓我們清除表格。DROPTABLE的語DROPTABLE表格名我們?nèi)绻宄赟QLCREATEDROPTABLE有時候我們會需要清除一個表格中的所有資料。要達(dá)到這個目的,式是我們在SQLDROP那一頁看到的DROPTABLE指令。不過這樣整個表格就,而無法再被用了。另式就是運用TRUNCATETABLE的指令。在這個指令之下,表格中的資料會完全,可是表格本身會繼續(xù)存在。TRUNCATETABLE的語法為下:TRUNCATETABLE表格名SQLCreate那一頁建立的顧客表格之內(nèi)的資料,TRUNCATETABLE入這些表格的呢?這就是這一頁(INSERTINTO)和下一頁(UPDATE)一種是一次輸入好幾筆。我們先來看一次輸入一筆的方式。INSERTINTO表格名12VALUES12ColumnDataJanuary10,1999,LosAngeles店有$900的營業(yè)額。我們就打入以下的SQL語句:INSERTINTOStore_Information(store_name,Sales,Date)VALUES('LosAngeles',900,'Jan-10-1999')INSERTINTO能夠讓我們一次輸入多筆的資料。跟上面剛的例子不同的是,現(xiàn)在我們要用SELECT指令來指明要輸入表格的資料。如果您想INSERTINTO112SELECT34FROMSQLWHEREGROUPBY、及HAVING等子句,以及表格連接及別名等等。舉例來說,若我們想要將1998Sales_Information表格取得的話,那我們就可以打入以下的SQL:INSERTINTOStore_Information(store_name,Sales,Date)SELECTstore_name,Sales,DateFROMSales_InformationWHEREYear(Date)=1998SQLServer中的函數(shù)來由日期中找出年。不同的數(shù)據(jù)庫會有不同的語法。舉個例來說,在Oracle上,您將會使用WHEREDELETEFROMDELETEFROM表格名"WHERE{條件}LosSanLosLosAngelesSQL來達(dá)到這個目的DE
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班會統(tǒng)戰(zhàn)知識課件
- 狂飆人物介紹
- 2026年設(shè)備安全漏洞主動修復(fù)機(jī)制項目評估報告
- 2026年無人機(jī)配送系統(tǒng)項目可行性研究報告
- 2025年江蘇省鎮(zhèn)江市中考化學(xué)真題卷含答案解析
- 2025年四川省資陽市中考地理真題卷含答案解析
- 2025年全國物業(yè)管理師考試真題及答案
- 2025年公共營養(yǎng)師三級資格證考試題(附答案)
- 2025年地質(zhì)災(zāi)害隱患點巡排查年度工作總結(jié)
- 腳手架工程量計算詳解
- 2025年網(wǎng)約車司機(jī)收入分成合同
- 2026年海南財金銀河私募基金管理有限公司招聘備考題庫參考答案詳解
- 2026年GRE數(shù)學(xué)部分測試及答案
- 癌癥疼痛與心理護(hù)理的綜合治療
- 2026屆湖北省黃岡市重點名校數(shù)學(xué)高一上期末質(zhì)量檢測試題含解析
- 甘肅省酒泉市2025-2026學(xué)年高一上學(xué)期期末語文試題(解析版)
- 2026年滬教版初一歷史上冊期末考試題目及答案
- 天津市八校聯(lián)考2025屆高三上學(xué)期1月期末考試英語試卷(含答案無聽力原文及音頻)
- 2026屆遼寧省遼南協(xié)作校高一數(shù)學(xué)第一學(xué)期期末監(jiān)測試題含解析
- 2026瑞眾保險全國校園招聘參考筆試題庫及答案解析
- 2025年山東省棗莊市檢察院書記員考試題(附答案)
評論
0/150
提交評論