版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據庫SQL函數(shù)使用基礎第1頁內容提要關系數(shù)據庫基本知識SQL語言概述SQL語句(Select)使用SQL函數(shù)使用SQL語句與數(shù)據庫可用性和性能關系第2頁目標了解數(shù)據庫一些基本概念(表、列、索引、事務、鎖)了解SQL語言歷史、特點和語句分類掌握Select語句基本語法結構和使用掌握Select語句中復雜條件、排序、分組、聚集計算使用了解多表關聯(lián)查詢(左連接和等值連接)使用和注意事項掌握主要函數(shù)使用方法和使用注意事項結合一些例子,說明編寫SQL時注意事項;記住常見易造成IQ數(shù)據庫可用性(節(jié)點宕機、資源消耗大)問題和性能問題一些SQL操作/函數(shù)
第3頁內容提要關系數(shù)據庫基本知識SQL語言概述SQL語句(Select)使用SQL函數(shù)使用SQL語句與數(shù)據庫可用性和性能關系第4頁關系數(shù)據庫基本知識數(shù)據庫基本知識數(shù)據庫概念和基本特征數(shù)據庫管理系統(tǒng)數(shù)據模型關系數(shù)據庫基礎關系數(shù)據庫定義表特征完整性問題表與表之間關系視圖第5頁關系數(shù)據庫基本知識關系數(shù)據庫基礎索引鎖事務第6頁數(shù)據庫和概念基本特征數(shù)據概念數(shù)據(Data)是數(shù)據庫中存放基本對象數(shù)據定義
描述事物符號統(tǒng)計數(shù)據分類文字、圖形、圖像、聲音數(shù)據庫概念和特征數(shù)據庫是按照某種數(shù)據模型組織起來長久存放在計算機內有組織、可共享數(shù)據集合第7頁數(shù)據庫概念和基本特征數(shù)據庫概念和特征這種數(shù)據集合含有以下特點:數(shù)據按一定數(shù)據模型組織、描述和儲存可為各種用戶共享冗余度較小數(shù)據獨立性較高易擴展含有一致性和可維護性,能夠確保數(shù)據可靠性和安全性第8頁數(shù)據庫管理系統(tǒng)定義位于用戶和操作系統(tǒng)之間一個軟件(數(shù)據庫管理軟件)用途科學地組織和存放數(shù)據、高效地獲取、管理和維護數(shù)據組成數(shù)據描述語言(DDL)及其翻譯程序數(shù)據操縱語言(DML)及其翻譯程序數(shù)據庫運行管理程序第9頁數(shù)據模型定義表示實體類型及實體類型間聯(lián)絡模型稱為“數(shù)據模型”種類概念數(shù)據模型結構數(shù)據模型實體定義:客觀存在并可相互區(qū)分事物。如:客戶,產品等第10頁數(shù)據模型概念數(shù)據模型它是獨立于計算機系統(tǒng)模型,完全不包括信息在系統(tǒng)中表示,只是用來描述某個特定組織所關心信息結構。結構數(shù)據模型它是直接面向數(shù)據庫邏輯結構,是現(xiàn)實世界第二層抽象,主要包含:層次模型——用樹型結構表示實體間聯(lián)絡數(shù)據模型。網狀模型——有向圖結構表示實體類型及實體間聯(lián)絡 數(shù)據模型。關系模型——用二維表格結構表示實體集,用外鍵表示
實體間聯(lián)絡。第11頁關系數(shù)據庫定義關系數(shù)據庫是關系(二維表)集合關系數(shù)據庫使用關系(二維表)存放數(shù)據由行和列組成二維結構
存放學生信息關系表
列(字段/屬性)行(一條統(tǒng)計)第12頁表特征二維表是由行和列組成二維結構每一行稱為元組(統(tǒng)計行),每一列含有唯一名稱(字段/屬性名)行和列交叉點,表示單個數(shù)據值(數(shù)據項)每張表必須含有主鍵,用來標識唯一元組每一列全部值必須符合相同數(shù)據格式每一列含有特定范圍值,稱為屬性域行與列次序并不主要第13頁表特征字段字段用于保留數(shù)據中某一類型屬性,需要為字段定義對應類型常見類型數(shù)值、字符串、日期/時間主鍵能夠唯一標識表中每條統(tǒng)計字段或者字段組合一張表中只能有一個主鍵第14頁數(shù)據完整性數(shù)據完整性是指數(shù)據正確性、相容性和有效性完整性包含:輸入類型是否正確?年紀必須是數(shù)字輸入格式是否正確?
身份證號碼必須是18位是否在允許范圍內?性別只能是”男”或者”女”是否存在重復輸入?學員信息輸入了兩次是否符合其它特定要求?信譽值大于5用戶才能夠加入會員列表……列值要求(約束)整行要求(約束)第15頁數(shù)據完整性關系模型完整性規(guī)則是對關系某種約束條件完整性約束包含:實體完整性域完整性參考完整性用戶定義完整性第16頁實體完整性實體完整性要求表中全部行都有唯一標識實現(xiàn)方法有主鍵約束(PRIMARYKEY)惟一性約束(UNIQUE)第17頁域完整性域完整性指列值域完整性如數(shù)據類型、格式、值域范圍、是否允許空值等域完整性限制了一些屬性中出現(xiàn)值,把屬性限制在一個有限集合中比如,假如屬性類型是整數(shù),那么它就不能是101.5或任何非整數(shù)第18頁參考完整性參考完整性是對不一樣表之間屬性或字段引用關系比如外鍵約束職員號部門編號姓名…9801980298039804980501010203張三李四王五趙六錢七部門編號部門名稱…01020304經理辦公室人事部公關部技術部職員表(R2)部門表(R1)主鍵外鍵第19頁參考完整性注意實體完整性是對應元組或者行而言。域完整性是對應屬性或者列而言。引用完整性是對不一樣表之間屬性或列引用關系而言。第20頁用戶定義完整性關系數(shù)據庫系統(tǒng)依據應用環(huán)境不一樣,往往需要一些特殊約束條件,用戶定義完整性是針對某一詳細應用領域,對關系數(shù)據庫提出約束條件。反應了某一詳細應用包括數(shù)據必須滿足語義要求比如:學生年紀限制為14---35之間關系數(shù)據庫提供了定義和檢驗這些完整性約束機制,方便用統(tǒng)一系統(tǒng)方法處理它們,而不用應用程序處理第21頁表與表之間關系表與表之間關系分為三種一對一關系比如,班級與班長之間聯(lián)絡:一個班級只有一個正班長一對多關系班級與學生之間聯(lián)絡:一個班級中有若干名學生,每個學生只在一個班級中學習多對多關系課程與學生之間聯(lián)絡:一門課程同時有若干個學生選修一個學生能夠同時選修多門課程第22頁視圖視圖是一個虛擬表,其內容由查詢定義同真實表一樣,視圖包含一系列字段和行數(shù)據。不過視圖并不在數(shù)據庫中真正存放數(shù)據。視圖中數(shù)據來自于定義視圖查詢所引用表,而且在使用視圖時動態(tài)生成。為何要使用視圖簡單性——看到就是需要安全性——經過視圖用戶只能查詢和修改他們所能見到數(shù)據邏輯數(shù)據獨立性——視圖能夠幫助用戶屏蔽真實表結構改變帶來影響第23頁索引在關系數(shù)據庫中,能夠使用索引加緊訪問表中數(shù)據速度在了解索引時,能夠想象一本書,其中書內容就相當于表里數(shù)據,而書前面目錄就相當于該表索引經過在要執(zhí)行搜索表中選擇一列或多列來創(chuàng)建索引索引是針對表中某個字段或某幾個字段創(chuàng)建關系數(shù)據庫會在一些約束上自動創(chuàng)建對應索引(比如:主鍵、唯一約束)第24頁IQ數(shù)據庫支持九種索引第25頁事務數(shù)據庫事務是指作為單個邏輯工作單元執(zhí)行一組操作事務含有ACID屬性原子性——是指對工作單元中修改數(shù)據操作要么全都執(zhí)行,要么都不執(zhí)行一致性——是指事務在完成時,必須使全部數(shù)據都保持一致狀態(tài)隔離性——是指由并發(fā)事務所做修改必須與任何其它并發(fā)事務所做修改相隔離持久性——是指事務完成后,事務對數(shù)據所做修改時持久。第26頁鎖不一樣關系數(shù)據庫產品在實現(xiàn)事務隔離性時可能會采取不一樣方法,當前主要有兩類方法:一個是采取"消極"方法,這種方法主要采取鎖定技術(locking)來實現(xiàn)不一樣隔離級別(比如:SAPASE);另一類方法主要采取MVCC(即多版本并發(fā)控制,是一個"樂觀"方法)技術再輔之以少許鎖實現(xiàn)(比如:SAPIQ)第27頁鎖不一樣關系數(shù)據庫產品在實現(xiàn)事務隔離性時可能會采取不一樣方法,當前主要有兩類方法:一個是采取"消極"方法,這種方法主要采取鎖定技術(locking)來實現(xiàn)不一樣隔離級別(比如:SAPASE);另一類方法主要采取MVCC(即多版本并發(fā)控制,是一個"樂觀"方法)技術再輔之以少許鎖實現(xiàn)(比如:SAPIQ)第28頁IQ數(shù)據庫事務和鎖特點IQ使用ANSI隔離級別3保持事務中數(shù)據一致性,這一隔離級別也叫做“SnapshotVersioning”。在一個事務進行過程中,IQ展現(xiàn)給每一個連接到數(shù)據庫用戶最近一次已提交表數(shù)據快照,直到用戶重新連接到IQ或發(fā)出“commit”命令第29頁IQ數(shù)據庫事物和鎖特點IQ執(zhí)中行Insert、Update、Delete、LoadTable等語句時會加排它鎖;而查詢(Select)語句不會向ASE那樣加上共享鎖,而是經過“版本快照技術”實現(xiàn)事物隔離性IQ數(shù)據庫中能夠有多個“寫用戶”,寫用戶不會阻塞讀用戶,讀用戶不會阻塞寫用戶,不過對于同一個表只允許一個寫用戶IQ在實現(xiàn)SnapshotVersioning機制時,需要使用IQMainStore中空間存放版本數(shù)據。當有大量用戶連接時,而且用戶執(zhí)行大量數(shù)據修改,會占用大量MainStore空間。第30頁內容提要關系型數(shù)據庫基本知識SQL語言概述SQL語句(Select)使用SQL函數(shù)使用SQL語句與數(shù)據庫可用性和性能關系第31頁SQL簡史上世紀70年代,SQL誕生于IBM企業(yè)在加利福尼亞SanJose試驗室SQL全稱是結構化查詢語言StructuredQueryLanguage并經常簡稱為sequelSQL為RDBMS(關系型數(shù)據庫管理系統(tǒng))開發(fā)是一個非過程語言非過程性語言意思就是指與詳細過程無關舉例來說SQL描述了怎樣對數(shù)據進行檢索插入刪除但它并不說明怎樣進行這么操作第32頁SQL語言介紹SQL全稱是“結構化查詢語言(StructuredQueryLanguage)”,最早是IBM圣約瑟研究試驗室為其關系數(shù)據庫管理系統(tǒng)SYSTEMR開發(fā)一個查詢語言,它前身是SQUARE語言。SQL語言結構簡練,功效強大,簡單易學,所以自從IBM企業(yè)1981年推出以來,SQL語言,得到了廣泛應用。如今不論是像Oracle,Sybase,Informix,SQLserver這些大型數(shù)據庫管理系統(tǒng),還是像VisualFoxporo,PowerBuilder這些微機上慣用數(shù)據庫開發(fā)系統(tǒng),都支持SQL語言作為查詢語言。第33頁SQL語言介紹美國國家標準協(xié)會(ANSI)和國際標準化組織(ISO)已將其同意為正式關系查詢語言標準。ANSISQL-86ANSISQL-89ANSISQL-92ANSISQL-99ANSISQL-ANSISQL標準實際上定義了三個級別兼容性:入門級、中級與完整級。大多數(shù)產品完全符合入門級標準,但只部分符合更高標準。第34頁SQL語言特點統(tǒng)一語言 SQL可用于全部用戶DB活動模型,包含系統(tǒng)管理員、數(shù)據庫管理員、應用程序員、決議支持系統(tǒng)人員及許多其它類型終端用戶。基本SQL命令只需極少時間就能學會,最高級命令在幾天內便可掌握。 SQL為許多任務提供了命令,包含:查詢數(shù)據在表中插入、修改和刪除統(tǒng)計建立、修改和刪除數(shù)據對象控制對數(shù)據和數(shù)據對象存取確保數(shù)據庫一致性和完整性 以前數(shù)據庫管理系統(tǒng)為上述各類操作提供單獨語言,而SQL將全部任務統(tǒng)一在一個語言中。第35頁SQL語言特點非過程化語言SQL是一個非過程化語言,因為它一次處理一個統(tǒng)計,對數(shù)據提供自動導航。SQL允許用戶在高層數(shù)據結構上工作,而不對單個統(tǒng)計進行操作,可操作統(tǒng)計集。全部SQL語句接收集合作為輸入,返回集合作為輸出。SQL集合特征允許一條SQL語句結果作為另一條SQL語句輸入。SQL不要求用戶指定對數(shù)據存放方法。這種特征使用戶更易集中精力于要得到結果。全部SQL語句使用查詢優(yōu)化器,它是RDBMS一部分,由它決定對指定數(shù)據存取最快速度伎倆。查詢優(yōu)化器知道存在什么索引,哪兒使用適當,而用戶從不需要知道表是否有索引,表有什么類型索引。第36頁SQL語言特點面向集合操作方式SQL語言采取集合操作方式,不但查找結果能夠是元組集合,而且一次插入、刪除、更新操作對象也能夠是元組集合非關系數(shù)據模型采取是面向統(tǒng)計操作方式,任何一個操作其對象都是一條統(tǒng)計。比如查詢全部平均成績在80分以上學生姓名,用戶必須說明完成該請求詳細處理過程,即怎樣用循環(huán)結構按照某條路徑一條一條地把滿足條件學生統(tǒng)計讀出來。第37頁SQL語言特點是所相關系數(shù)據庫公共語言 因為全部主要關系數(shù)據庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL技能從一個RDBMS(關系數(shù)據庫管理系統(tǒng))轉到另一個,全部用SQL編寫程序都是能夠移植。
第38頁SQL語言特點以同一個語法結構提供兩種使用方式 SQL語言既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用于聯(lián)機交互使用方式,用戶能夠在終端鍵盤上直接鍵入SQL命令對數(shù)據庫進行操作。作為嵌入式語言,SQL語句能夠嵌入到高級語言(比如C、COBOL、FORTRAN、PL/1)程序中,供程序員設計程序時使用。而在兩種不一樣使用方式下,SQL語言語法結構基本上是一致。這種以統(tǒng)一語法結構提供兩種不一樣使用方式作法,為用戶提供了極大靈活性與方便性。第39頁SQL語言特點語言簡練,易學易用SQL語言功效極強,但因為設計巧妙,語言十分簡練,完成數(shù)據定義、數(shù)據操縱、數(shù)據控制關鍵功效只用了9個動詞:CREATE、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。而且SQL語言語法簡單,靠近英語口語,所以輕易學習,輕易使用。第40頁SQL語言分類DDL,數(shù)據定義語言DML,數(shù)據操縱語言DCL,數(shù)據控制語言第41頁SQL語言分類——DDL用戶創(chuàng)建或重新構建數(shù)據庫語言 CREATETABLE ALTERTABLE DROPTABLE CREATEINDEX ALTERINDEX DROPINDEX第42頁SQL語言分類——DML用于在關系數(shù)據庫對象中操縱數(shù)據 INSERT UPDATE DELETE SELECT(也被單獨稱為DQL)第43頁SQL語言分類——DCL用于創(chuàng)建與用戶訪問相關對象,也控制著用戶權限分配 ALTERUSER改變數(shù)據庫用戶信息
GRANT為用戶授予特權
REVOKE從用戶處收回特權第44頁事務控制命令用戶管理數(shù)據庫事務命令 COMMIT用于保護數(shù)據庫事務 ROLLBACK用于撤消數(shù)據庫事務 SAVEPOINT創(chuàng)建一組事務中撤消點
第45頁內容提要關系數(shù)據庫基本知識SQL語言概述SQL語句(Select)使用SQL函數(shù)使用SQL語句與數(shù)據庫可用性和性能關系第46頁SQL語句普通語法規(guī)則Select語句簡單例子SELECT NAME,STARTTERM,ENDTERMFROM PRESIDENTSWHERE NAME=LINCOLN關鍵字(大小寫不敏感)SelectFromWhere使用空格分開不一樣部分第47頁Select、From、Distinct語法:select<列名>
例1:selectcolname
例2:select*
例3:select10*10語法:from<表名>——第一個查詢
例1:select*fromemployees;語法:DISTINCT(返回沒有重復數(shù)據)例1:selectdistinctdept_idfromemployee第48頁練習以下語句所返回結果是否相同SELECT*FROMCHECKSselect*fromchecks以下查詢能否工作a.Selectb.Select*b.Select*fromemployeec.Selectemp_id,salaryFROMemployee第49頁SQL語言元素關鍵字每個SQL語句都包含一個或多個關鍵字。SQL關鍵字不區(qū)分大小。比如,在下面語句中,SELECT和FROM是關鍵字: SELECT* FROMemployee第50頁SQL語言元素保留字SQL中一些關鍵字也是保留字。要在SQL語句中使用保留字作為標識符,必須用雙引號將它引發(fā)來。SQL語句中出現(xiàn)很多關鍵字都是保留字,但并非全部都是。比如,必須使用以下語法檢索名為SELECT表內容。 SELECT* FROM"SELECT”SybaseIQ保留字詳細列表,參見第51頁SQL語言元素標識符標識符是數(shù)據庫中對象(如用戶ID、表和列)名稱。標識符最大長度是128個字節(jié)。當以下任一條件成立時,標識符需要用雙引號引發(fā)來或用中括號括起來:標識符包含空格。標識符首字符不是字母字符標識符包含保留字。標識符包含字母和數(shù)字以外其它字符。字母字符包含字母表中字母,以及下劃線(_)、at符號(@)、井號(#)和美元符號($)。數(shù)據庫歸類序列指出了哪些字符被視為字母字符或數(shù)字字符。第52頁表示式表示式定義非常簡單:表示式能夠返回一個值,表示式類型非常廣泛,它以包含各種類型數(shù)據如數(shù)字、字符、邏輯類型等SELECTamountFROMchecksAmount是表示式SELECTNAME,ADDRESS,PHONEFROMADDRESSBOOKNAME、ADDRESS、PHONE、ADDRESSBOOK是表示式第53頁SQL運算符算術運算符—加、減、乘、除、取模賦值運算符—=位運算符—&、|、^比較運算符—True、False、unknown;>、<、!=(<>)字符型—like(%、_)、||邏輯型—NOT、AND、ORselect*fromdepartmentwhere1=1or1=1and1=2select*fromdepartmentwherenot1=2and1=1第54頁SQL運算符集合運算—union、unionall、intersect、minus隸屬運算—in、between第55頁搜索條件比較條件=等于>大于<小于>=大于或等于<=小于或等于!=不等于<>不等于!>小于!<大于
第56頁搜索條件Between BETWEEN條件語法以下: expr[NOT]BETWEENstart-exprANDend-expr BETWEEN條件值能夠是TRUE、FALSE或UNKNOWN。在沒相關鍵字NOT情況下,假如expr介于start-expr和end-expr之間,則條件值為TRUE。NOT關鍵字使條件含義相反,但保留UNKNOWN不變。 BETWEEN條件相當于兩個不等式組合: expr>=start-exprANDexpr<=end-expr第57頁搜索條件LIKE LIKE條件語法以下: expression[NOT]LIKEpattern[ESCAPEescape-expr] LIKE條件值能夠是TRUE、FALSE或UNKNOWN只能對字符串數(shù)據使用like
通配符匹配項_(下劃線)任意一個字符%(百分號)包含零個或多個字符任意字符串[]指定范圍或集合中任意單個字符[^]不在指定范圍或集合中任意單個字符第58頁搜索條件Exists EXISTS條件語法以下: EXISTS(subquery)
假如子查詢結果最少包含一行,則EXISTS條件為TRUE;假如子查詢結果不包含任何行,則條件為FALSE。EXISTS條件不能為UNKNOWN第59頁搜索條件ISnull ISNULL條件語法以下: expressionIS[NOT]NULL
在沒有NOT關鍵字情況下,假如表示式值為NULL,則ISNULL條件為TRUE,不然為FALSE。NOT關鍵字使條件含義相反。第60頁練習寫一個查詢返回數(shù)據庫中全部名字以M開頭人WHEREa>=10ANDa<=30更便捷寫法是什么請寫出來
第61頁SQL子句WhereGroupbyOrderbyHaving第62頁SQL子句Where(對統(tǒng)計集合進行過濾) select*fromemployeewheresalary>100000 select*fromemployeewhereemp_fname='MaryAnne‘ select*fromemployeewhereemp_fnamelike'Mary%'第63頁SQL子句Groupby(經慣用于分組計算) (1)selectdept_id,count(*)fromemployeegroupbydept_id(2)selectstate,city,count(*)fromEmployees
groupbystate//錯誤 (3)selectstate,city,count(*)fromemployees
groupbycity//錯誤對于分組來說,SELECT語句中出現(xiàn)字段只能是在GROUPBY中出現(xiàn)過才能夠第64頁SQL子句Orderby(用于對結果進行排序,asc/desc) (1)select*fromdepartment (2)select*fromdepartmentOrderbydept_name (3)selectdept_id,count(*)fromemployee groupbydept_idorderbydept_id,manager_iddesc (4)selectstate,count(*)fromemployeesgroupbystateorderbycount(*)desc第65頁SQL子句Having(對分組數(shù)據進行限制) (1)selectdept_id,avg(salary)fromemployee whereavg(salary)>50000groupbydept_id ASAError-150:Invaliduseofanaggregatefunction(2)selectdept_id,avg(salary)fromemployeegroupbydept_id havingavg(salary)>50000第66頁SQL子句Having(對分組數(shù)據進行限制) (3)selectdept_id,avg(salary)fromemployee groupbydept_id havingcount(*)>10//能夠使用select子句沒出現(xiàn)字段第67頁SQL子句綜合應用條件+排序 selectcity,sum(salary)fromemployee wherecitylike'Be%'orsalary>80000groupbycity orderbycity第68頁SQL子句綜合應用求和、平均、最大值、最小值 selectstate, round(sum(salary),2)sum,round(avg(salary),2)avg, round(max(salary),2)max,round(min(salary),2)min fromemployee groupbystate orderbystate第69頁SQL子句綜合應用全部子句都用到 selectstate,sum(salary),count(*) fromemployee wheresalary>50000 groupbystate havingsum(salary)>100000 Orderbycount(*)第70頁三、多表關聯(lián)查詢交叉連接內部連接(等值連接、不等值連接)外部連接左連接右連接完全外連接自連接子查詢第71頁表連接——交叉連接交叉連接——笛卡爾積selectcount(*)fromaccmaininfo(131)selectcount(*)fromaccdetail(99)selectcount(*)fromaccmaininfom,accdetaild(12969)wherevno=vnoandm.accno=d.accno(92)
笛卡爾積會把兩個表每條統(tǒng)計一一進行連接假如A表有n行統(tǒng)計,B表有m行統(tǒng)計,則笛卡爾積有n*m行統(tǒng)計!?。弥斜M可能防止出現(xiàn)笛卡爾積,會造成災難性后果!第72頁表連接——內部連接內部連接
完全匹配連接,相當于兩個表交集 selectcount(*) fromaccmaininfominnerjoinaccdetaild onvno=vnoandm.accno=d.accno
也能夠按照下面語法寫: selectcount(*) fromaccmaininfom,accdetaild wherevno=vnoandm.accno=d.accno第73頁表連接——內部連接正確地找到列 Select*能夠選擇全部列。假如需要選擇特定列,怎么做? selectaccname,balance fromaccmaininfom,accdetaild wherevno=vnoandm.accno=d.accno
使用表名前綴 selectm.accname,m.balance fromaccmaininfom,accdetaild wherevno=vnoandm.accno=d.accno第74頁表連接——外部連接左外部連接:Leftouterjoin(左邊表全集) selectm.balance,d.balance,tranprono fromaccmaininfomleftouterjoinaccdetaild onvno=vnoandm.accno=d.accno andtranprono='30'
第75頁表連接——外部連接右外部連接——Rightouterjoin(右邊表全集) selectm.balance,d.balance fromaccmaininfomrightouterjoinaccdetaild onvno=vnoandm.accno=d.accno andtranprono='30‘第76頁表連接——外部連接全外部連接——Fullouterjoin(兩個表都是全集兩個表并集)selectcity,dept_namefromemployeeefullouterjoindepartmentdone.dept_id=d.dept_idande.city=‘Acton’第77頁表連接——自連接自連接——跟同一個表聯(lián)合
查找薪水超出80000員工,并查出其manager名稱和薪水selecta.emp_fname,a.salary,b.emp_fname,b.salaryfromemployeea,employeebwherea.emp_id=b.manager_idandb.salary>80000第78頁子查詢子查詢是一個把查詢結果作為參數(shù)返回給另一個查詢一個查詢。子查詢能夠讓你將多個查詢綁定在一起,到今天結束以后,你將掌握以下內容建立一個子查詢在你子查詢中使用EXISTANY和ALL關字建立和使用子查詢關聯(lián)第79頁子查詢建立子查詢:要查詢某人下全部賬戶數(shù)據,但不知道賬戶代碼,只知道姓名 select*fromaccdetailwhere accnoin(SELECTaccnofromaccmaininfo whereaccname=
‘偉澤’)三個之一即可accno'016601100129425''156001100301019''49000338228'第80頁子查詢——使用匯總函數(shù)子查詢中能夠使用SUM、AVG、COUNT、MIN和MAX。比如,想查詢余額在平均值以上accmaininfo:selectaccname,balancefromaccmaininfoWherebalance>(selectavg(balance)fromaccmaininfo)第81頁子查詢——相關子查詢到現(xiàn)在為止,我們所寫出子查詢都是獨立它們都沒有包括到其它子查詢。相關子查詢能夠接收外部引用。 select*fromaccdetaildwhere '偉澤'=(SELECTaccnamefromaccmaininfo whereaccno=d.accno)跟下面語句相當: select*fromaccdetaild,accmaininfom Whered.accno=m.accnoandaccname=
'偉澤'第82頁子查詢——inIn能夠返回多個值selectcount(*)fromaccdetail whereaccno=(selectaccnofromaccmaininfo whereaccname='悠悠')可是使用in代替=selectcount(*)fromaccdetail whereaccnoin(selectaccnofromaccmaininfo whereaccname='悠悠')第83頁子查詢——existsExists返回true或者false select*fromaccdetaildwhere exists(SELECTaccnamefromaccmaininfo whereaccname='偉澤') Exists只是一個條件,true時候返回全部數(shù)據,false時候不返回數(shù)據第84頁子查詢——existsExists更為有用是使用相關子查詢 select*fromaccdetaildwhere exists(SELECTaccnamefromaccmaininfom whereaccname='偉澤'andm.accno=d.accno)
這時候,只返回該客戶賬戶細節(jié)數(shù)據第85頁四、修改數(shù)據InsertUpdateDelete第86頁操作數(shù)據——InsertINSERT語句允許你向數(shù)據庫中輸入數(shù)據,它有兩種寫法:INSERTVALUESINSERTSELECTINSERTVALUES該語句每次向表中輸入一條統(tǒng)計,操作規(guī)模小,只有幾條語句需要輸入時它是非常有用該語句語法形式以下:INSERTINTOtable_name(col1,col2...) VALUES(value1,value2...)第87頁操作數(shù)據——Insert比如: insertintobranchinfo(provno,brno,brname,remark) values('01','0101','北京分行','REMAEK1')Insert語句能夠不需要列名 insertintobranchinfo values('01','0102','北京分行營業(yè)部','REMAEK2')第88頁操作數(shù)據——insertselectINSERTVALUE語句在向表中插入幾個數(shù)據時候非常有用,但顯然這是不夠。假如你想向表中插入25,000行數(shù)據時怎么辦?在這種情況下INSERTSELECT語句就非常有效。它允許程序員拷貝一個或一組表信息到另外一個表中 insertintoaccmainselect*fromaccmaininfo語法 INSERTINTOtable_name(col1,col2...) SELECTcol1,col2...FROMtablenameWHEREsearch_condition第89頁操作數(shù)據——delete與向數(shù)據庫中加入數(shù)據相對應,你可能需要刪除數(shù)據庫中數(shù)據。DELETE語句語法格式以下: DELETEFROMtablenameWHEREcondition deletefrombranchwhereprovno='11‘經過DELETE語句和WHERE子句DELETE語句能夠完成下邊工作:刪除單一行刪除多個行刪除全部行什么也不刪除第90頁操作數(shù)據——update該語句作用是將已存在統(tǒng)計內容改變語法格式以下: UPDATEtable_nameSETcolumnname1=value1[,columname2=value2]... WHEREsearch_conditionUPDATE語句首先要檢驗WHERE子句,對于符合WHERE子句條件統(tǒng)計將會用給定數(shù)據進行更新第91頁操作數(shù)據——updateupdatebranchinfosetremark='Remark' whereprovno='11'
使用select語句驗證 select*frombranchinfowhereprovno='11'第92頁練習下邊語句正確嗎?DELETECOLLECTIONINSERTINTOCOLLECTIONSELECT*FROMTABLE_2UPDATECOLLECTION("HONUSWAGNERCARD"25000,"FOUNDIT")假如執(zhí)行下邊語句會有什么結果DELETE*FROMCOLLECTION第93頁LoadtableLOADTABLE是IQ裝載數(shù)據最快速方法結合一個例子說明--示例表 createtabletest1(idint,agetinyint,namechar(8),primarykey(id))
--數(shù)據文件test1.dat1||20||張三||2||22||李四||3||24||王五||
第94頁內容提要關系數(shù)據庫基本知識SQL語言概述SQL語句(Select)使用SQL函數(shù)使用SQL語句與數(shù)據庫可用性和性能關系第95頁SQL函數(shù)分類集合函數(shù)分析函數(shù)日期與時間函數(shù)數(shù)值函數(shù)字符串函數(shù)數(shù)據類型轉換函數(shù)系統(tǒng)函數(shù)HTTP函數(shù)SQL和外部環(huán)境用戶定義函數(shù)其它函數(shù)第96頁空值(NULL)處理NULL是一個特殊類型值NULL不等于任何值,也不等于自己比如:表test2包含以下統(tǒng)計
idamount -----------------------1102(NULL)320selectcount(*)fromtest2whereamount=null返回0selectcount(*)fromtest2whereamount!=null返回0selectcount(*)fromtest2whereamountisnull返回1第97頁空值(NULL)處理NULL是一個特殊類型值空值一些運算selectsum(amount)fromtest2返回30,去掉了amount為NULL統(tǒng)計
selectamount,count(*)fromtest2groupbyamount
空值作為一個分組selectamoun+10,amount*10fromtest2null運算仍為空值一些處理 select10+isnull(amount,0)fromtest2把空值變成0第98頁集合函數(shù)簡單集合函數(shù)(如AVG()、COUNT()、MAX()、MIN()和SUM())可對數(shù)據庫一組行中數(shù)據進行匯總。這些組是使用SELECT語句GROUPBY子句組成。?采取一個參數(shù)較新統(tǒng)計集合函數(shù)包含STDDEV()、STDDEV_SAMP()、STDDEV_POP()、VARIANCE()、VAR_SAMP()和VAR_POP()。第99頁集合函數(shù)CountSelectcount(*)fromemployeewheredept_id=100Count不統(tǒng)計nullSumselectsum(salary)fromemployeewheredept_id=100假如全是null,則sum結果也為null只能處理數(shù)值只能處理數(shù)值第100頁集合函數(shù)AvgselectAvg(salary)fromemployeewheredept_id=100假如全是null,則avg結果也為null只能處理數(shù)值第101頁集合函數(shù)MaxSelectMax(salary)fromemployeeSelectemp_fnamefromemployee wheresalary=max(salary)Msg13204,Level15,State0:ASAError-150:InvaliduseofanaggregatefunctionMinSelectMax(salary),min(salary)fromemployeeVariance—方差selectvariance(salary)fromemployeeStddev—標準差第102頁集合函數(shù)用于進行時序分析ISO/ANSISQL:OLAP函數(shù)包含:CORR()、COVAR_POP()、COVAR_SAMP()、CUME_DIST()、FIRST_VALUE()、LAST_VALUE()、REGR_AVGX()、REGR_AVGY()、REGR_COUNT()、REGR_INTERCEPT()、REGR_R2()、REGR_SLOPE()、REGR_SXX()、REGR_SXY()和REGR_SYY()。在數(shù)據庫行業(yè)使用非ISO/ANSISQL:OLAP集合函數(shù)擴展包含F(xiàn)IRST_VALUE()、MEDIAN()和LAST_VALUE()。用于計算加權移動平均值加權OLAP集合函數(shù)包含EXP_WEIGHTED_AVG()和WEIGHTED_AVG()第103頁集合函數(shù)簡單集合-AVG、COUNT、MAX、MIN、SUM、STDDEV和VARIANCE窗口函數(shù):窗口化集合-AVG、COUNT、MAX、MIN和SUM。排名函數(shù)-RANK、DENSE_RANK、PERCENT_RANK、ROW_NUMBER和NTILE。統(tǒng)計函數(shù)-STDDEV、STDDEV_SAMP、STDDEV_POP、VARIANCE、VAR_SAMP和VAR_POP。分布函數(shù)-PERCENTILE_CONT和PERCENTILE_DISC。行間函數(shù)-LAG和LEAD。數(shù)值函數(shù)-WIDTH_BUCKET、CEIL、LN、EXP、POWER、SQRT和FLOOR第104頁日期/時間函數(shù)函數(shù)參數(shù)功效DATEADD(datepart,number,date)以datepart指定方式,返回date加上number之和DATEDIFF(datepart,date1,date2)以datepart指定方式,返回date2與date1之差DATENAME(datepart,date)返回日期date中datepart指定部分所對應字符串DATEPART(datepart,date)返回日期date中datepart指定部分所對應整數(shù)值DAY(date)返回指定日期天數(shù)GETDATE()返回當前日期和時間MONTH(date)返回指定日期月份數(shù)YEAR(date)返回指定日期年份數(shù)第105頁日期/時間函數(shù)date-part允許值第106頁日期/時間函數(shù)date-part允許值第107頁日期/時間函數(shù)例子selectdateadd(month,2,'-08-01')selectdateadd(month,2,crt_date)fromt2selectdatediff(month,'1993/05/02','1995/11/15')selectdatepart(month,'1987/05/02')第108頁數(shù)值函數(shù)數(shù)值函數(shù)對數(shù)值數(shù)據類型執(zhí)行數(shù)學運算或者返回數(shù)值信息ABS得到絕對值SELECTABS(-66)Ceiling得到大于等于當前數(shù)值最小整數(shù)selectceiling(13.4)//返回14.0Floor得到小于等于當前數(shù)值最大整數(shù)selectfloor(13.4)//返回13.0第109頁數(shù)值函數(shù)數(shù)值函數(shù)對數(shù)值數(shù)據類型執(zhí)行數(shù)學運算或者返回數(shù)值信息Round四舍五入函數(shù)selectROUND(123.234,1)//123.20selectROUND(123.256,2)//123.260Rand返回大于0小于1隨機小數(shù)第110頁字符函數(shù)IQ中CHAR(n)和VARCHAR(n)數(shù)據類型用于存放字符串數(shù)據二者區(qū)分CHAR類型數(shù)據會在尾部補空格,直到定義長度VARCHAR不會在尾部補空格,不過用引號括起來字符串中尾部空格保留比如:createtabletest1(idint,namechar(10),name1varchar(10))insertintotest1values(1,'aaa','bbb')commit第111頁字符函數(shù)比如:selectconvert(binary,name)fromtest1whereid=1
輸出為:0x61616120(10個字節(jié))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 直郵廣告解決方案
- 二零二五年度房產租賃合同終止催告通知3篇
- 二零二五年度房地產物業(yè)管理合同范本5篇
- “銀色數(shù)字鴻溝”對老年人身心健康的影響
- “雙減”背景下學校課后服務質量的問題、原因及策略
- 蜜雪冰城企業(yè)案例分析
- 四川省瀘州市龍馬潭區(qū)瀘化中學2024-2025學年九年級上學期1月期末考試化學試卷(含答案)
- 建設生物質加工利用及年產3萬噸炭素資源化利用項目可行性研究報告模板-立項拿地
- 福建省廈門市同安區(qū)2024-2025學年八年級上學期期末模擬語文試卷(含答案)
- Unit5 Humans and nature Lesson 3 Race to the pole 說課稿 -2024-2025學年高中英語北師大版(2019)必修第二冊
- 采購部績效考核
- 超短波操作流程圖
- 小學2022 年國家義務教育質量監(jiān)測工作方案
- 化學品安全技術說明(膠水)
- 南寧市中小學學籍管理系統(tǒng)數(shù)據采集表
- 中空吹塑成型課件
- 領先閱讀X計劃第四級Bug Hunt 教學設計
- 《詩詞格律》word版
- 預算第二十三講
- 高中體育與健康人教版全一冊 6.2田徑—短跑 課件(共11張PPT)
- 蔬菜供貨服務保障方案
評論
0/150
提交評論