數(shù)據(jù)庫培訓-SQL基礎_第1頁
數(shù)據(jù)庫培訓-SQL基礎_第2頁
數(shù)據(jù)庫培訓-SQL基礎_第3頁
數(shù)據(jù)庫培訓-SQL基礎_第4頁
數(shù)據(jù)庫培訓-SQL基礎_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Oracle數(shù)據(jù)庫根底山東眾陽軟件張目錄Oracle數(shù)據(jù)庫概述SQL根底處置數(shù)據(jù)第三方工具簡單運用.Oracle數(shù)據(jù)庫概述.Oracle〔甲骨文〕公司是世界上最大的企業(yè)軟件公司,主要向全球用戶提供數(shù)據(jù)庫、工具和運用軟件以及相關(guān)的咨詢、培訓和支持效力。Oracle數(shù)據(jù)庫〔OracleDatabase〕是甲骨文公司推出的關(guān)系型數(shù)據(jù)庫產(chǎn)品,是世界上運用最為廣泛的數(shù)據(jù)庫管理系統(tǒng),到目前仍舊在數(shù)據(jù)庫市場上占有主要份額。.關(guān)系型數(shù)據(jù)庫:引見關(guān)系型數(shù)據(jù)庫:簡而言之就是關(guān)系/二維表的集合。Oracle數(shù)據(jù)庫表名:EMPLOYEES表名:DEPARTMENTS.關(guān)系型數(shù)據(jù)庫:表的術(shù)語2.主鍵3.列4.外鍵6.空值1.行5.域空值既不是空格也不是0.多表關(guān)聯(lián)表中每一行數(shù)據(jù)均由主鍵保證獨一性。多表經(jīng)過外鍵關(guān)聯(lián)表:EMPLOYEES表:DEPARTMENTS主鍵主鍵外鍵….Oracle的總體框架構(gòu)造.Oracle實例一個oracle實例由一系列的后臺進程和內(nèi)存構(gòu)造組成當啟動實例的時候,oracle會開辟一塊內(nèi)存〔SGA〕用于存放數(shù)據(jù)庫信息,并啟動后臺進程,SGA內(nèi)的信息是被后臺進程所共享的。實例和數(shù)據(jù)庫的關(guān)系實例是“內(nèi)存〞和“后臺進程〞的集合,“數(shù)據(jù)庫〞是數(shù)據(jù)的物理存儲,要特別留意,一個實例可以用于一個數(shù)據(jù)庫,多個實例也可同時用于一個數(shù)據(jù)庫〔RAC〕,實例和數(shù)據(jù)庫是多對一的關(guān)系。.Oracle的內(nèi)存構(gòu)造Oracle的內(nèi)存由PGA〔ProgramGlobalArea〕和SGA〔SystemGlobalArea〕組成。PGA中包括效力器進程的數(shù)據(jù)和控制信息,其中的信息是不被共享的。SGA中包括數(shù)據(jù)庫實例的數(shù)據(jù)和控制信息,是可以被共享的。SGA被劃分成多個區(qū)域,主要的區(qū)域如下:數(shù)據(jù)庫高速緩沖區(qū)〔DatabaseBufferCache〕,用于存放數(shù)據(jù)文件的副本,一切的用戶進程都可以并發(fā)的銜接到這個實例,共享數(shù)據(jù)庫高速緩沖區(qū)中的數(shù)據(jù)。共享池〔SharedPool〕又分為庫緩沖區(qū)〔LibraryCache〕和字典緩沖區(qū)〔DictionaryCache〕。庫緩沖區(qū)用于存放運用過的sql,包括這些sql語句的執(zhí)行方案及這些sql的語法分析樹。數(shù)據(jù)庫對象的信息存儲在數(shù)據(jù)字典表中,包括用戶賬號數(shù)據(jù)、數(shù)據(jù)文件名、段名、盤區(qū)位置、表的闡明和權(quán)限等,當數(shù)據(jù)庫需求這些信息時就會讀取數(shù)據(jù)字典并將這些信息存儲在字典緩沖區(qū)中。重做日志緩沖區(qū)〔RedoLogBuffer〕用于存放用戶對數(shù)據(jù)庫的改動,這是一片循環(huán)運用的內(nèi)存區(qū)域。.oracle的存儲構(gòu)造Oracle的存儲構(gòu)造分為物理存儲構(gòu)造和邏輯存儲構(gòu)造。物理存儲構(gòu)造由數(shù)據(jù)文件、聯(lián)機日志文件、控制文件構(gòu)成,這些是數(shù)據(jù)庫嚴厲意義上的“物理構(gòu)造組成〞,除此之外,組成oracle的還有其他的一些文件。Oracle存儲的邏輯構(gòu)造由數(shù)據(jù)塊〔DataBlock〕、區(qū)〔Extent〕、段〔Segment〕和表空間〔Tablespace〕組成,塊是最根本的存儲單元,它們是一個自下而上的邏輯構(gòu)造。.數(shù)據(jù)塊.數(shù)據(jù)塊數(shù)據(jù)塊由塊頭、表目錄、行目錄、行數(shù)據(jù)和空余空間五部分組成。我們又把塊頭、表目錄、行目錄合稱為頭部信息區(qū),存放塊的信息而不存放數(shù)據(jù)。數(shù)據(jù)塊與操作系統(tǒng)塊不同,但是又有關(guān)系,一個數(shù)據(jù)塊的大小是操作系統(tǒng)塊大小的整數(shù)倍。行鏈接:假設插入的一行數(shù)據(jù)很大以致于一個塊存不下,oracle就會把一行數(shù)據(jù)分成幾段存在數(shù)據(jù)塊中,這個過程叫行鏈接。行遷移:數(shù)據(jù)塊中存在一條記錄,update操作使記錄變長,而當前塊沒有足夠的空間包容這條記錄,無法之下,只能把整行數(shù)據(jù)移到一個新的數(shù)據(jù)塊中,并在原數(shù)據(jù)塊中留下一個指針指向新的數(shù)據(jù)塊,被挪動的數(shù)據(jù)的rowid堅持不變,這就是行遷移。留意行鏈接和行遷移都會影響數(shù)據(jù)庫的性能。.區(qū)和段區(qū)是數(shù)據(jù)庫的一個邏輯存儲單元,它由延續(xù)的數(shù)據(jù)塊組成,特別強調(diào)的是區(qū)是一段延續(xù)的存儲空間,當段中的空間耗盡時oracle會分配一個新的區(qū)給這個段??梢越?jīng)過存儲參數(shù)來控制區(qū)的分配。段是存放數(shù)據(jù)的邏輯存儲單元,由一系列的區(qū)組成,包括數(shù)據(jù)段、索引段、暫時段、回滾段等。.表空間系統(tǒng)默許創(chuàng)建的是小文件表空間,是傳統(tǒng)的表空間類型。大文件表空間由一個單獨的很大的數(shù)據(jù)文件組成,使oracle可以運用和管理超級大的文件。系統(tǒng)表空間〔SYSTEM〕:存放數(shù)據(jù)字典的數(shù)據(jù),一旦翻開數(shù)據(jù)庫,系統(tǒng)表空間必需在線。輔助表空間〔SYSAUX〕:對系統(tǒng)表空間的補充,存放數(shù)據(jù)庫組件的信息,必要時可分擔系統(tǒng)表空間的負載?;貪L表空間〔UNDOTBS〕:存放回滾數(shù)據(jù)。每個數(shù)據(jù)庫可以有多個回滾表空間,但只能有一個活動的。暫時表空間:是暫時存放數(shù)據(jù)的地方,創(chuàng)建用戶的時候應該給用戶指定一個暫時表空間。USERS表空間:假設創(chuàng)建用戶時沒有運用DEFAULTTABLESPACE關(guān)鍵字指定默許表空間,oracle會將其指定給用戶作為默許表空間。.SQL根底.什么是SQL?SQL:構(gòu)造化查詢言語 (StructuredQueryLanguageSQL)是訪問Oracle數(shù)據(jù)庫中數(shù)據(jù)的描畫方法SQL言語主要提供下述功能:查詢表中數(shù)據(jù)行插入、修正、刪除表中的數(shù)據(jù)行創(chuàng)建、修正、刪除數(shù)據(jù)庫對象保證數(shù)據(jù)庫的一致性和完好性控制數(shù)據(jù)庫及其訪問.主要的SQL語句SELECTINSERTUPDATEDELETEMERGECREATEALTERDROPRENAMETRUNCATECOMMITROLLBACKSAVEPOINTGRANTREVOKE數(shù)據(jù)獲取數(shù)據(jù)處置言語(DML)數(shù)據(jù)定義言語(DDL)事務控制言語(TCL)數(shù)據(jù)控制言語(DCL)COMMENT.根本SQLSELECT語句SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)][ORDERBY{column,expr,alias}[ASC|DESC]];在最簡單的方式中,SELECT語句必需包含下面的內(nèi)容:一個SELECT子句,指定被顯示的列一個FROM子句,指定表,該表包含SELECT子句中的字段列表.選擇一切列與指定列SELECT*FROMdepartments; 用SELECT關(guān)鍵字后面的星號(*),可以顯示表中數(shù)據(jù)的一切列。SELECTdepartment_id,location_idFROMdepartments; 用SELECT語句來顯示表的指定列,指定列名之間用逗號分隔。SELECT后也可以指定偽列,一個偽列的行為像表中的列一樣,但不是真的存儲在表中。不能插入或刪除偽列的值。一些可用的偽列如下:CURRVAL、NEXTVAL、LEVEL、ROWID和ROWNUM。.算數(shù)運算符用算術(shù)運算符創(chuàng)建數(shù)字和日期數(shù)據(jù)的表達式上表列出了SQL提供的算術(shù)運算符。除了FROM子句,他可以在任何一個SQL語句的子句中運用算術(shù)運算符,留意優(yōu)先級。對于日期數(shù)據(jù),只能對DATE和TIMESTAMP數(shù)據(jù)類型運用加和減操作。操作+-*/說明加減乘除.空值null是一個未分配的、未知的值,既然是未知的,就有無數(shù)種能夠性null不是0,也不是空格判別一個字段能否為NULL,應該用ISNULL或ISNOTNULL,而不能用‘=’,同樣的,對NULL的!=、>、<、>=、<=等操作的結(jié)果都是未知的,也就算說,這些操作的結(jié)果依然是NULL包含空值的算術(shù)表達式計算結(jié)果為空

總結(jié):除了ISNULL、ISNOTNULL以外,對NULL的任何操作的結(jié)果還是NULL.經(jīng)典的例子SQL> CREATEORREPLACEPROCEDUREP1(P_ININNUMBER)AS

2BEGIN

3IFP_IN>=0THEN

4DBMS_OUTPUT.PUT_LINE('TRUE');

5ELSE

6DBMS_OUTPUT.PUT_LINE('FALSE');

7ENDIF;

8END;

SQL> CREATEORREPLACEPROCEDUREP2(P_ININNUMBER)AS

2BEGIN

3IFP_IN<0THEN

4DBMS_OUTPUT.PUT_LINE(‘FALSE’);

5ELSE

6DBMS_OUTPUT.PUT_LINE(‘TRUE’);

7ENDIF;

8END;

假設傳入的是null值,結(jié)果是什么呢?.定義列的別名列別名:改動列標題的名字可用于計算結(jié)果跟在列名后面或在列名和別名之間運用AS關(guān)鍵字假設別名中包含有空格、或特殊字符、或大小寫敏感,要求用雙引號SELECTlast_nameASname,commission_pctcommFROMemployees;.連字運算符連字運算符:銜接列或者字符串到其它的列用兩個豎線表示(||)構(gòu)造一個字符表達式的合成列SELECTfirst_name||last_nameASEmployeesFROMemployees;.文字字符串文字字符串是包含在SELECT列表中的一個字符串,一個數(shù)字或者一個日期日期和字符的文字字符串值必需用單引號括起來每個文字字符串在每行輸出一次

SELECTlast_name||'isa'||job_idAS“EmployeeDetails〞FROMemployees;.運用WHERE子句 用WHERE子句限制前往的行SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)];WHERE子句跟著FROM子句WHERE限制查詢滿足條件的行condition由列名、表達式、常數(shù)和比較操作組成WHERE子句可以比較列值、文字值、算術(shù)表達式或者函數(shù),WHERE子句由三個元素組成:列名,比較條件,列名、常量或值列表。.字符串和日期WHERE子句中:字符串和日期的值必需包含在單引號中,但是,數(shù)字常數(shù)不應該包含在單引號中字符串的值是大小寫敏感的,日期值是格式敏感的日期的默許格式是DD-MON-RR.

SELECTlast_name,job_id,department_idFROMemployeesWHERElast_name='Whalen';.比較條件 運算含義=等于>大于>=大于等于<小于<=小于等于<>!=^=不等于 比較條件被用于一個表達式與一個值或與另一個表達式的比較。 ...WHEREhire_date='01-JAN-95' ...WHEREsalary>=6000 ...WHERElast_name='Smith'.其他比較條件(一) 操作含義BETWEEN...AND...在兩個值之間(包含)IN(set)匹配一個恣意值列表LIKE匹配一個字符模板ISNULL是一個空值 運用BETWEEN: SELECTlast_name,salary FROMemployees WHEREsalaryBETWEEN2500AND3500; 運用IN: SELECTemployee_id,last_name,salary,manager_id FROMemployees WHEREmanager_idIN(100,101,201);.其他比較條件(二)運用LIKE條件運用LIKE條件執(zhí)行有效搜索串值的通配符搜索搜索條件既可以包含文字也可以包含數(shù)字:%表示恣意順序的零個或多個字符_表示一個字符SELECTfirst_nameFROMemployeesWHEREfirst_nameLIKE'%S_';運用NULL條件用ISNULL操作來測試空值SELECTlast_name,manager_idFROMemployeesWHEREmanager_idISNULL;NULL條件,包括ISNULL條件和ISNOTNULL條件。.邏輯條件 運算含義 AND假設兩個組成部分的條件都為真,前往TRUE OR假設兩個組成部分中的任一個條件為真,前往TRUE NOT假設跟隨的條件為假,前往TRUE 可以在WHERE子句中用AND和OR運算符運用多個條件。 假設要得到正確的結(jié)果:運用AND時要求兩個條件同時為真運用OR時要求兩者或多者之一為真即可NOT運算符那么可以用于另一個SQL運算符,例如,IN、BETWEEN、LIKE、和NULL。留意:表達式NOT(column_nameISNULL)是正確的.優(yōu)先規(guī)那么表達式求值順序1算術(shù)運算2連字操作3比較操作4IS[NOT]NULL,LIKE,[NOT]IN5[NOT]BETWEEN6NOT邏輯條件7AND邏輯條件8OR邏輯條件運用圓括號改動優(yōu)先規(guī)那么.集合操作UNION

由每個查詢選擇的一切不反復的行,即 并集不包含反復值

UNIONALL

由每個查詢選擇的一切的行,包括一切 反復的行完全,即并集包含反復值

INTERSECT

由每個查詢選擇的一切不反復的相交行 即交集

MINUS

在第一個查詢中,不在后面查詢中,并 且結(jié)果行不反復,即差集.ORDERBY子句用ORDERBY子句排序–ASC:升序排序,默許–DESC:降序排序語法:SELECTexprFROMtable[WHEREcondition(s)][ORDERBY{column,expr}[ASC|DESC]];留意:ORDERBY子句在查詢完成后執(zhí)行,假設運用了ORDERBY子句,它必需位于SQL語句的最后??梢灾付ㄒ粋€表達式,或者一個別名,或者列序號作為排序條件。.SQL函數(shù)函數(shù)是SQL的一個非常強有力的特性,函數(shù)可以用于下面的目的:執(zhí)行數(shù)據(jù)計算修正單個數(shù)據(jù)項支配輸出進展行分組格式化顯示的日期和數(shù)字轉(zhuǎn)換列數(shù)據(jù)類型SQL函數(shù)有輸入?yún)?shù),并且總有一個前往值。.SQL函數(shù)(續(xù))函數(shù)分為單行函數(shù)和多行函數(shù)單行函數(shù) 僅對單個行進展運算,并且每行前往一個結(jié)果。 我們主要討論以下幾種常用的函數(shù)類型:字符數(shù)字日期轉(zhuǎn)換多行函數(shù)可以支配成組的行,每個行組給出一個結(jié)果,這些函數(shù)也被稱為組函數(shù)。.單行函數(shù)單行函數(shù):支配數(shù)據(jù)項接受多個參數(shù)〔列或者表達式〕,并前往一個值作用于每一個前往行每行前往一個結(jié)果可以修正數(shù)據(jù)類型可以嵌套.單行函數(shù)(續(xù))常用的單行函數(shù):字符函數(shù):接受字符輸入,可以前往字符或者數(shù)字值數(shù)字函數(shù):接受數(shù)字輸入,前往數(shù)字值日期函數(shù):對DATE數(shù)據(jù)類型的值進展運算(除了MONTHS_BETWEEN函數(shù)前往一個數(shù)字,一切日期函數(shù)都前往一個DATE數(shù)據(jù)類型的值。)轉(zhuǎn)換函數(shù):從一個數(shù)據(jù)類型轉(zhuǎn)換為另一個數(shù)據(jù)類型通用函數(shù):NVL、NVL2、NULLIF、COALSECE、CASE、DECODE.字符函數(shù)字符函數(shù)可以被分為大小寫處置和字符處置兩種:大小寫處置函數(shù)如下:LOWER(column|expression) 轉(zhuǎn)換字符值為小寫 UPPER(column|expression) 轉(zhuǎn)換字符值為大寫 INITCAP(column|expression)轉(zhuǎn)換每個單詞的首字母值為大寫,一切其它值為小寫字符處置函數(shù)如下: CONCAT(column1|expression1,column2|expression2) 銜接第一個字符值到第二個字符值;等價于銜接運算符(||)SUBSTR(column|expression,m[,n]) 從字符值中前往指定的字符,開場位置在m,n字符長度(假設m是負數(shù),計數(shù)從字符值末尾開場;假設n被忽略,前往到串終了的一切字符)。.字符函數(shù)〔續(xù)〕LENGTH(column|expression)前往表達式中的字符數(shù)INSTR(column|expression,’string’,[,m],[n]) 前往一個命名串的數(shù)字位置。隨意地,他可以提供一個位置m作為查找的開場,在字符串中第n次發(fā)現(xiàn)的位置。m和n的默許值是1,意味著在起始開場查找,并且報告第一個發(fā)現(xiàn)的位置。 LPAD(column|expression,n,'string')RPAD(column|expression,n,'string') 填充字符值左、右調(diào)理到n字符位置的總寬度 TRIM([leading|trailing|both]trim_characterFROMtrim_source)使他可以從一個字符串修整頭或尾字符(或兩者)。假設trim_character或trim_source是字符文字,他必需放在單引號中。REPLACE(text,search_string,replacement_string)從字符串查找一個文本表達式,假設找到,用指定的值串替代它.字符函數(shù)(續(xù)) 函數(shù)結(jié)果 CONCAT('Hello','World')HelloWorld SUBSTR('HelloWorld',1,5)Hello LENGTH('HelloWorld')10 INSTR('HelloWorld','W')6 LPAD(salary,10,'*')*****24000 RPAD(salary,10,'*')24000***** TRIM('H'FROM'HelloWorld')elloWorld.數(shù)字函數(shù)ROUND(45.926,2)45.93TRUNC(45.926,2)45.92MOD(1600,300)100 ROUND(column|expression,n) 四舍五入列、表達式或值為n位小數(shù)位,假設n被忽略,無小數(shù)位。(假設n是負值,小數(shù)點左邊的數(shù)被四舍五入)。TRUNC(column|expression,n) 截斷列、表達式或值到n位小數(shù),假設n被忽略,那么n默以為0。MOD(m,n) 前往m除以n的余數(shù)。常用于確定一個數(shù)是奇數(shù)還是偶數(shù)。.日期的運用Oracle數(shù)據(jù)庫用內(nèi)部數(shù)字格式存儲日期:世紀,年,月,日,小時,分鐘和秒,其內(nèi)部存儲格式舉例如下: CENTURYYEARMONTHDAYHOURMINUTESECOND 2016071592043默許日期顯示格式是DD-MON-RR.

SYSDATE函數(shù)前往:?Date?TimeSYSDATE是一個日期函數(shù),它前往當前數(shù)據(jù)庫效力器的日期和時間。SELECTSYSDATEFROMDUAL;.用日期計算既然數(shù)據(jù)庫以數(shù)字方式存儲日期,那么就可以用算術(shù)運算符進展計算,例如,加或減。日期可以加或減數(shù)字常數(shù)以及日期,如下例如:運算 結(jié)果 闡明 date+number 日期加一個天數(shù)到一個日期上date-number 日期從一個日期上減一個天數(shù)date-date 天數(shù)用一個日期減另一個日期date+number/24日期加一個小時數(shù)到一個日期上從日期加或者減一個數(shù),結(jié)果是一個日期值兩個日期相減,得到兩個日期之間的天數(shù)用小時數(shù)除以24,可以加小時到日期上.日期函數(shù) 函數(shù)說明 MONTHS_BETWEEN兩個日期之間的月數(shù) ADD_MONTHS加日歷月到日期 NEXT_DAY下個星期幾是幾號 LAST_DAY指定月的最后一天 ROUND四舍五入日期 TRUNC截斷日期.日期函數(shù)(續(xù))MONTHS_BETWEEN(date1,date2):計算date1和date2之間的月數(shù),其結(jié)果可以是正的也可以是負的。假設date1大于date2,結(jié)果是正的,反之,結(jié)果是負的。結(jié)果的小數(shù)部分表示月的一部分。ADD_MONTHS(date,n):添加n個日歷月到date。n的值必需是整數(shù),但可以是負的。NEXT_DAY(date,‘char’):計算在date之后的下一個周(‘char’)指定天的日期。char的值能夠是一個表示一天的數(shù)或者是一個字符串。LAST_DAY(date):計算包含date的月的最后一天的日期ROUND(date[,‘fmt’]):前往用格式化方式fmt四舍五入到指定單位的date,假設格式方式fmt被忽略,date被四舍五入到最近的天。TRUNC(date[,‘fmt’]):前往用格式化方式fmt截斷到指定單位的帶天的時間部分的date,假設格式方式fmt被忽略,date被截斷到最近的天。.運用日期函數(shù)MONTHS_BETWEEN(‘01-SEP-15’,‘11-JAN-14’) 19.6774194ADD_MONTHS(‘11-JAN-16’,6) '11-JUL-16'NEXT_DAY(‘01-SEP-15’,‘3’)下個星期二是幾號 '08-SEP-15'LAST_DAY('01-FEB-16') '29-FEB-16'.運用日期函數(shù)(續(xù))假定SYSDATE='25-JUL-95':ROUND(SYSDATE,'MONTH')01-AUG-95ROUND(SYSDATE,'YEAR')01-JAN-96TRUNC(SYSDATE,'MONTH')01-JUL-95TRUNC(SYSDATE,'YEAR')01-JAN-95TRUNC(TO_DATE('25-JUL-95'),'YEAR') 01-JAN-95.轉(zhuǎn)換函數(shù)數(shù)據(jù)類型轉(zhuǎn)換隱式數(shù)據(jù)類型轉(zhuǎn)換顯式數(shù)據(jù)類型轉(zhuǎn)換對于直接賦值,Oracle效力器可以自動地進展下面的轉(zhuǎn)換: 從 到 VARCHAR2orCHAR NUMBER VARCHAR2orCHAR DATE NUMBERVARCHAR2 DATEVARCHAR2對于表達式賦值,Oracle效力器能自動地進展下面的轉(zhuǎn)換: 從 VARCHAR2orCHAR到 DATE 從 VARCHAR2orCHAR到 NUMBER.轉(zhuǎn)換函數(shù)(續(xù))顯式數(shù)據(jù)類型轉(zhuǎn)換SQL提供三種函數(shù)來從一種數(shù)據(jù)類型轉(zhuǎn)換值到另一種:TO_CHAR(number|date[,fmt][,nlsparams]) 轉(zhuǎn)換一個數(shù)字或日期值為一個VARCHAR2字符串,帶格式化款式fmt。數(shù)字轉(zhuǎn)換:nlsparams參數(shù)指定下面的字符,它由數(shù)字格式化元素前往:小數(shù)字符 99999.99前導0 09999本地貨幣符號 L9999國際貨幣符號 $9999假設忽略nlsparams或其它參數(shù),該函數(shù)在會話中運用默許參數(shù)值。.轉(zhuǎn)換函數(shù)(續(xù))轉(zhuǎn)化字符串到數(shù)字TO_NUMBER(char[,'format_model'])轉(zhuǎn)化字符串到日期TO_DATE(char[,'format_model'])格式模板必需放在單引號中。常用日期格式的模板 YYYY/MM/DDHH24:MI:SSselectto_timestamp('2021-07-1615:13:28.45','yyyy-mm-ddhh24:mi:ss.ff')fromdual;.通用函數(shù)以下函數(shù)可用于恣意數(shù)據(jù)類型,并且適用于空值NVL(expr1,expr2)NVL2(expr1,expr2,expr3)NULLIF(expr1,expr2)COALESCE(expr1,expr2,...,exprn)NVL轉(zhuǎn)換空值為一個實踐值。NVL2假設expr1非空,前往expr2;假設expr1為空,前往expr3。NULLIF比較兩個表達式,假設相等前往空;假設不相等,前往第一個表達式COALESCE前往表達式列表中的第一個非空表達式。.條件表達式在SQL語句中提供IF-THEN-ELSE邏輯的運用。兩種用法:–CASE表達式–DECODE函數(shù)CASE表達式CASEexpr WHENcomparison_expr1THENreturn_expr1 WHENcomparison_expr2THENreturn_expr2 WHENcomparison_exprnTHENreturn_exprn ELSEelse_expr]END.CASE運用例如 SELECTlast_name,job_id,salary, CASEsalary WHEN‘5000'THEN1.10*salary WHEN‘4000'THEN1.15*salary WHEN‘3500'THEN1.20*salary ELSEsalary END"REVISED_SALARY" FROMemployees;.DECODE函數(shù) DECODE(col|expression,search1,result1[,search2,result2,...,][,default]) DECODE函數(shù)在比較表達式(expression)和每個查找(search)值后解碼表達式,假設表達式與查找一樣,前往結(jié)果。 假設省略默許值,當沒有查找值與表達式相匹配時前往一個空值。SELECTlast_name,job_id,salary,DECODE(salary,‘5000’,1.10*salary,‘4000’,1.15*salary,‘3500’,1.20*salary,salary) REVISED_SALARYFROMemployees;.多表銜接查詢銜接表的方式:內(nèi)銜接外銜接〔左外銜接、右外鏈接〕全銜接〔全外銜接〕內(nèi)銜接(innerjoin)實踐上就是等值銜接,表中作為銜接條件的列的值必需相等,前往2個表中完全符合條件的記錄。外銜接〔outerjoin〕除了顯示匹配相等銜接條件的數(shù)據(jù)外,還可以顯示基于某一個表中無法匹配相等銜接條件的記錄。全銜接〔fulljoin〕的查詢結(jié)果是左外銜接和右外鏈接查詢結(jié)果的并集,即使是記錄關(guān)聯(lián)不上,也會把這部分信息查詢出來。

.外銜接語法外銜接運算符是加號(+)SELECTt1.column,t2.columnFROMt1,t2WHEREt1.column(+)=t2.column;SELECTt1.column,t2.columnFROMt1,t2WHEREt1.column=t2.column(+);外銜接可以從一個表中前往那些在另一個表中沒有直接匹配的行外銜接操作符是一個在圓括號中的加號(+),它被放置在銜接的短少信息的一側(cè)。為了使來自不完善表的一行或多行可以被銜接,該操作符有產(chǎn)生一個或多個空行的作用。.組函數(shù)組函數(shù)不象單行函數(shù),組函數(shù)對行的集合進展操作,對每組給出一個結(jié)果。這些集合能夠是整個表或者是表分成的組。 以下為常用的組函數(shù),每個函數(shù)接納一個參數(shù): 函數(shù) 說明 AVG([DISTINCT|ALL]n) n的平均值,忽略空值COUNT({*|[DISTINCT|ALL]expr}) 計數(shù),求除了空計算,*包括重 復和帶空值的行。MAX([DISTINCT|ALL]expr) 最大值,忽略空值MIN([DISTINCT|ALL]expr) 最小值,忽略空值STDDEV([DISTINCT|ALL]x) n的規(guī)范差,忽略空值SUM([DISTINCT|ALL]n) 合計n的值,忽略空值VARIANCE([DISTINCT|ALL]x) n的方差,忽略空值.GROUPBY子句GROUPBY就是經(jīng)過列將數(shù)據(jù)進展分組SELECTcolumn,group_function(column)FROMtable[WHEREcondition][GROUPBYgroup_by_expression][ORDERBYcolumn];在語法中,group_by_expression指定那些用于將行分組的列,這些列的值作為行分組的根據(jù)。運用WHERE子句,他可以在劃分行成組以前過濾行。在GROUPBY子句中必需包含列。在GROUPBY子句中他不能用列別名。默許情況下,行以包含在GROUPBY列表中的字段的升序排序。他可以用ORDERBY子句覆蓋這個默許值。.HAVING子句用HAVING子句約束分組,執(zhí)行過程:假設語句有WHERE子句,效力器建立候選行行被分組運用組函數(shù)匹配HAVING子句的組被顯示SELECTcolumn,group_functionFROMtable[WHEREcondition][GROUPBYgroup_by_expression][HAVINGgroup_condition][ORDERBYcolumn];.數(shù)據(jù)庫對象表 根本存儲單元,由行和列組成視圖 邏輯地從一個或多個表中表示數(shù)據(jù)子集序列 數(shù)字值發(fā)生器索引 改善一些查詢的性能同義詞給對象可選擇的名字還有其他的數(shù)據(jù)庫對象,如存儲過程、觸發(fā)器、包、函數(shù)、約束等。.命名規(guī)那么表命名和列命名:?必需以字母開場?必需是1–30個字符長度?只能包含A–Z,a–z,0–9,_,$,和#?同一個用戶所擁有的對象之間不能重名?不能用Oracle效力器的保管字留意:默許情況下名字是大小寫不敏感的,例如,EMPLOYEES與eMPloyees或eMpLOYEES作為同一個名字來處置,oracle會自動轉(zhuǎn)成大寫。假設在創(chuàng)建時運用了“〞,那么oracle就會區(qū)分大小寫。.Oracle數(shù)據(jù)庫中的表?用戶表:–由用戶創(chuàng)建和維護的表的集合,包含用戶信息?數(shù)據(jù)字典:–由Oracle效力器創(chuàng)建和維護的表的集合,包含數(shù)據(jù)庫信息有四種數(shù)據(jù)字典視圖,每一種有一個特定的前綴來反映其不同的目的。USER_這些視圖包含關(guān)于用戶所擁有的對象的信息。 ALL_這些視圖包含一切用戶可訪問的表(對象表和相關(guān)的表)的信息。DBA_這些視圖是受限制的視圖,它們只能被分配有DBA角色的用戶所訪問。 V$ 這些視圖是動態(tài)執(zhí)行的視圖,包含數(shù)據(jù)庫效力器的性能、存儲器和鎖的信息。.常用數(shù)據(jù)類型數(shù)據(jù)類型說明VARCHAR2(size) 可變長度的字符數(shù)據(jù)〔最大為4000字符〕CHAR(size) 固定長度的字符數(shù)據(jù)〔默以為1,最大為2000〕NUMBER(p,s) 可變長度的數(shù)字數(shù)據(jù)DATE 日期和時間值TIMESTAMP(size) 時間戳,默許長度為6LONG 最大2G的可變長度字符數(shù)據(jù)CLOB 最大4G的字符數(shù)據(jù)RAWandLONGRAW 原始二進制數(shù)據(jù)BLOB 最大4G的二進制數(shù)據(jù)BFILE 最大4G的,存儲在外部文件中的二進制數(shù)據(jù)ROWID一個64進制的數(shù)制系統(tǒng),表示表中一行的獨一 地址.CREATETABLE語句?用戶必需有:–CREATETABLE權(quán)限–一個存儲區(qū)域CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][,...]);?必需指定:–表名–列名、列數(shù)據(jù)類型和列的大小schema與一切者的名字一樣table表的名字DEFAULTexpr指定默許值column列的名字datatype列的數(shù)據(jù)類型和長度.用子查詢創(chuàng)建表該方法既可以創(chuàng)建表還可以將從子查詢前往的行插入新創(chuàng)建的表中。CREATETABLEdept80[(column[,column...])]ASSELECTemployee_id,last_name,salary*12ANNSAL,hire_dateFROMemployeesWHEREdepartment_id=80;被創(chuàng)建的表要帶指定的列名,并且由SELECT語句前往的行被插入到新表中。字段的定義只能包括列名和默許值。假設給出了指定的列,列的數(shù)目必需等于子查詢中列表的列數(shù)目。假設沒有給出了指定的列,表的列名應和子查詢中的列名一樣。完好性規(guī)那么不會被傳送到新表中,僅列的數(shù)據(jù)類型被定義。.ALTERTABLE語句用ALTERTABLE語句可以:?添加一個新列?修正一個已存在的列?為新列定義一個默許值?刪除一個列添加列ALTERTABLEtableADD(columndatatype[DEFAULTexpr][,columndatatype]...);修正列ALTERTABLEtableMODIFY(columndatatype[DEFAULTexpr][,columndatatype]...);刪除列ALTERTABLEtableDROP(column);.修正列可以改動列的數(shù)據(jù)類型、大小和默許值ALTERTABLEdept80MODIFY(last_nameVARCHAR2(30));對默許值的改動只影響后來插入表中的數(shù)據(jù)原那么可以添加寬度或一個數(shù)字列的精度??梢蕴砑訑?shù)字列或字符列的寬度??梢詼p少一個列的寬度,但僅在列中只包含空值或表中沒有行時。可以改動數(shù)據(jù)類型,但僅在列中只包含空值時。CHAR列與VARCHAR2數(shù)據(jù)類型可以相互轉(zhuǎn)換,但僅當列中只包含空值時,或者不改動列的大小時。對默許值的改動僅影響以后插入的列。.刪除表留意:在表中的一切數(shù)據(jù)和構(gòu)造都被刪除任何未決的事務都被提交一切的索引被刪除他不能回退DROPTABLE語句.子查詢SELECTselect_listFROMtableWHEREexproperator(SELECTselect_listFROMtable);子查詢放在圓括號中,在主查詢之前執(zhí)行一次將子查詢放在比較條件的右邊子查詢的結(jié)果被用于主查詢(外查詢)在子查詢中的ORDERBY子句普通不需求子查詢可以被放在CREATEVIEW語句中、CREATETABLE語句、UPDATE語句、INSERT語句的INTO子句和UPDATE語句的SET子句中。.子查詢類型單行子查詢:從內(nèi)SELECT語句只前往一行的查詢多行子查詢:從內(nèi)SELECT語句前往多行的查詢單行子查詢僅前往一行,運用單行比較符運算符含義=等于>大于>=大于或等于<小于<=小于或等于<>不等于.多行子查詢前往多于一行運用多行比較符操作含義IN等于列表中的任何成員ANY比較子查詢前往的每個值ALL比較子查詢前往的全部值<ANY意思是小于最大值,>ANY意思是大于最小值,=ANY等同于IN。<ALL意思是小于最小值,>ALL意思是大于最大值。.處置數(shù)據(jù).DML-數(shù)據(jù)支配言語〔datamanipulationlanguage〕是SQL的一個中心部分,用于操作數(shù)據(jù)庫中的數(shù)據(jù),DML言語不隱含COMMIT語句,因此需求用戶手動提交對數(shù)據(jù)庫的修正。當他做下面操作時,DML語句被執(zhí)行:–添加新行到表中〔增〕–刪除表中的行〔刪〕–修正表中的行〔改〕事務:由一系列的DML語句組成,成為一個邏輯任務單元。事務中的語句必需全部勝利,否那么必需全部回退。

.DML言語包括:INSERTUPDATEDELETESELECT〔DMLorDQL?〕MERGECALLEXPLAINPLANLOCKTABLE.INSERT語句語法運用INSERT語句添加新行到表中 INSERTINTOtable[(column[,column...])] VALUES(value[,value...]); 在語法中:table是表的名字column是表中的列名value是列的相應值用該語法一次只能插入一行.插入新行插入包含每一個列值的新行值以表中列的默許順序列表在INSERT子句中字段可以隨意列表INSERTINTOdepartments(department_id,department_name,manager_id,location_id)VALUES(70,'PublicRelations',100,1700);字符和日期要用單引號括起來.插入帶空值的行隱式方法:省略字段列表中的列INSERTINTOdepartments(department_id,epartment_name)VALUES(30,'Purchasing');顯式方法:在VALUES子句中指定NULL關(guān)鍵字INSERTINTOdepartments(department_id,department_name,manager_id,location_id)VALUES(100,'Finance',NULL,NULL);.插入特殊的值SYSDATE函數(shù)取出當前的日期時間insertintoemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7196,'GREEN','SALESMAN',7782,SYSDATE,2000,null,10);TO_DATE函數(shù)可作日期轉(zhuǎn)換,插入特定的日期時間的值insertintoemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7196,'GREEN','SALESMAN',7782,TO_DATE('2021-06-0108:30:20',‘YYYY-MM-DDHH24:MI:SS')

,2000,null,10);.從另一個表中復制行創(chuàng)建帶有子查詢的INSERT語句INSERTINTOsales_reps(id,name,salary,commission_pct)SELECTemployee_id,last_name,salary,commission_pctFROMemployeesWHEREjob_idLIKE'%REP%';不要運用VALUES子句在子查詢中列的數(shù)目要匹配INSERT子句中列的數(shù)目.UPDATE語句運用UPDATE語句更改現(xiàn)有的行UPDATEtableSETcolumn=value[,column=value,...][WHEREcondition];table是表的名字column是表中列的名字value是相應的值或?qū)械淖硬樵僣ondition是where條件的內(nèi)容,以此確定要被更新的行。用查詢表來顯示受更新的行以確認更新操作。假設需求,一次更新多行.更新表中的行假設運用了WHERE子句,指定的一行或多行將被修正UPDATEemployeesSETdepartment_id=70WHEREemployee_id=113;假設脫漏WHERE子句,表中一切的行都會被修正UPDATEcopy_empSETdepartment_id=110;.用子查詢更新多個列更改7698號雇員的任務和部門,使其與7499號雇員的一樣

UPDATEempSET(job,deptno)=(selectjob,deptnofromempwhereempno=7499)WHEREempno=7698;.對基于另一個表的行進展更改在UPDATE語句中,用子查詢來更新基于另一個表中值的那些行。UPDATEcopy_empSETdepartment_id=(SELECTdepartment_idFROMemployeesWHEREemployee_id=100)WHEREjob_id=any(SELECTjob_idFROMemployeesWHEREemployee_id=200);用基于來自EMPLOYEES表的值更新COPY_EMP表,它用employee100的部門號改動一切任務崗位與employee200的任務崗位一樣的那些雇員的部門號.DELETE語句運用DELETE語句從表中刪除已存在的行?假設指定了WHERE子句,那么刪除指定的行DELETEFROMdepartmentsWHEREdepartment_name='Finance';?假設脫漏了WHERE子句,表中一切的行都被刪除DELETEFROMcopy_emp;.刪除基于另一個表的行在DELETE語句中用子查詢來刪除表中的基于另一個表中值的行DELETEFROMemployeeWHEREdeptno=(SELECTdeptnofromdeptwheredname='SALES');.TRUNCATETRUNCATEtablecopy_emp;DELETEFROMcopy_emp;清空表中一切數(shù)據(jù)刪除數(shù)據(jù)的效率明顯比DELETE高恢復數(shù)據(jù)需求備份,代價高.根本SQLMERGE合并語句按照指定的條件執(zhí)行插入或刪除操作假設滿足條件的行存在,執(zhí)行更新操作;否那么執(zhí)行插入操作:防止多次反復執(zhí)行插入和刪除操作提高效率而且運用方便在數(shù)據(jù)倉庫運用中經(jīng)常運用.合并語句的語法可以運用merge語句,根據(jù)指定的條件進展插入或更新操作MERGEINTOtable_nametable_aliasUSING(table|view|sub_query)aliasON(joincondition)WHENMATCHEDTHENUPDATESETcol1=col_val1,col2=col2_valWHENNOTMATCHEDTHENINSERT(column_list)VALUES(column_values);.MERGEINTOcopy_empcUSINGemployeeseON(c.employee_id=e.employee_id)WHENMATCHEDTHENUPDATESETc.first_name=e.first_name,c.last_name=e.last_name,...c.department_id=e.department_idWHENNOTMATCHEDTHENINSERTVALUES(e.employee_id,e.first_name,e.last_name,e.,e.phone_number,e.hire_date,e.job_id,e.salary,emission_pct,e.manager_id,e.department_id);合并語句舉例在對表COPY_EMP運用merge語句,根據(jù)指定的條件從表EMPLOYEES中插入或更新數(shù)據(jù)。.數(shù)據(jù)庫事務Oracle數(shù)據(jù)庫基于事務處置確保數(shù)據(jù)的一致性。要么全部完成,要么全部廢棄的操作集合。數(shù)據(jù)庫事務可以由下面的語句組成:?對數(shù)據(jù)做出一致性修正的DML語句?一個DDL語句?一個DCL語句.事務的開場與終了開場于第一個被執(zhí)行的DML語句遇到下面事件之一終了:COMMIT或ROLLBACK語句被運轉(zhuǎn)DDL或DCL語句被執(zhí)行(自動提交)用戶正常退出〔自動提交〕用戶非正常退出〔自動回滾〕系統(tǒng)異常終止〔自動回滾〕.COMMIT和ROLLBACK語句COMMIT--提交,簡單來說就是終了當前事務,把所做的修正保管到數(shù)據(jù)庫ROLLBACL--回滾,終了當前事務,丟棄一切未決的數(shù)據(jù)改動用COMMIT和ROLLBACK語句,他可以:確保數(shù)據(jù)的一致性在數(shù)據(jù)永久改動之前進展預覽分組邏輯相關(guān)的操作.控制事務運用COMMIT、SAVEPOINT和ROLLBACK語句控制事務邏輯。SAVEPOINTname 在當前事務中標志保管點

ROLLBACKTOSAVEPOINTname 回滾當前事務到指定的保管點,從而丟棄保管點創(chuàng)建后的任何改動。假設忽略了TOSAVEPOINT子句,ROLLBACK語句回滾整個事務。由于保管點是邏輯的,因此,沒有方法列出曾經(jīng)創(chuàng)建的保管點。.舉個例子用SAVEPOINT語句在當前事務中創(chuàng)建一個標志用ROLLBACKTOSAVEPOINT語句回退到該標志UPDATE...SAVEPOINTupdate_done;savepointcreated.INSERT...ROLLBACKTOupdate_done;Rollbackcomplete..隱式事務處置在下面的情況下,一個自動提交發(fā)生:–DDL語句被發(fā)送–DCL語句被發(fā)送–正常退出iSQL*Plus,沒有明確地發(fā)送COMMIT或ROLLBACK語句當iSQL*Plus非正常退出時,或者發(fā)生系統(tǒng)缺點時,一個自動回退發(fā)生.COMMIT或ROLLBACK之前數(shù)據(jù)的形狀以前的數(shù)據(jù)形狀可以被恢復當前用戶能用SELECT語句查看DML操作的結(jié)果其他用戶不能察看當前用戶DML語句的結(jié)果受影響的行被鎖定,其他用戶不能改動受影響的行中數(shù)據(jù).COMMIT之后數(shù)據(jù)的形狀數(shù)據(jù)在數(shù)據(jù)庫中被永久地改動數(shù)據(jù)的以前形狀被永久地喪失一切用戶都能察看該結(jié)果受影響行的鎖定被釋放,其它用戶可以支配那些行一切保管點被擦除.ROLLBACK之后的數(shù)據(jù)形狀用ROLLBACK語句丟棄一切未決的改動:數(shù)據(jù)的改動被吊銷數(shù)據(jù)的以前形狀被恢復受影響行的鎖定被釋放.讀一致性讀一致性確保在恣意時間點,數(shù)據(jù)庫都能提供數(shù)據(jù)的一致性視圖讀一致性要求對于同一份數(shù)據(jù):查詢不需求等待修正修正不需求等待查詢修正需求等待修正.視圖視圖是基于表或另一個視圖的邏輯表,一個視圖并不包含它本人的數(shù)據(jù),它象一個窗口,經(jīng)過該窗口可以查看或改變表中的數(shù)據(jù)。視圖基于其上的表稱為基表。視圖在數(shù)據(jù)字典中作為一個SELECT語句存儲。視圖的作用:?限制數(shù)據(jù)訪問?使得復雜的查詢?nèi)菀?提供數(shù)據(jù)的獨立性?表現(xiàn)一樣數(shù)據(jù)的不同察看.簡單視圖和復雜視圖下面是簡單視圖:數(shù)據(jù)僅來自一個表不包含函數(shù)或數(shù)據(jù)分組能經(jīng)過視圖執(zhí)行DML操作下面是復雜視圖:數(shù)據(jù)來自多個表包含函數(shù)或數(shù)據(jù)分組不總是允許經(jīng)過視圖進展DML操作.Top-N分析?Top-N查詢尋覓一列的n個最大或最小值,例如:–銷售最好的前10位產(chǎn)品是什么?–銷售最差的前10位產(chǎn)品是什么??最大值和最小值在Top-N查詢中設置?Top-N查詢在需求基于一個條件,從表中顯示最前面的n條記錄或最后面的n條記錄時是有用的。.執(zhí)行Top-N分析Top-N分析查詢的高級構(gòu)造是:SELECT[column_list],ROWNUMFROM(SELECT[column_list]FROMtableORDERBYTop-N_column)WHEREROWNUM<=N;Top-N分析的例子為了從EMPLOYEES表中顯示掙錢最多的3個人的名字及其薪水:SELECTROWNUMasRANK,last_name,salaryFROM(SELECTlast_name,salaryFROMemployeesORDERBYsalaryDESC)WHEREROWNUM<=3;.序列是自動產(chǎn)生的獨一的數(shù),可被多個用戶共享以產(chǎn)生獨一的整數(shù)典型的用途是創(chuàng)建一個主鍵值可以替代運用程序編號,是一個節(jié)省時間的對象序列號獨立于表被存儲和產(chǎn)生,因此,一樣的序列可以被多個表運用當運用高速緩存存儲器時,訪問序列值的效率提高。.CREATESEQUENCE語法定義一個序列來自動產(chǎn)生有順序的數(shù):CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|

溫馨提示

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

評論

0/150

提交評論