Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料_第1頁(yè)
Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料_第2頁(yè)
Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料_第3頁(yè)
Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料_第4頁(yè)
Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料_第5頁(yè)
已閱讀5頁(yè),還剩198頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

SQL語(yǔ)言基礎(chǔ)Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第1頁(yè)。主要內(nèi)容基本的SELECT語(yǔ)句約束和排序數(shù)據(jù)單行函數(shù)多表顯示數(shù)據(jù)、組函數(shù)合計(jì)數(shù)據(jù)創(chuàng)建和管理表子查詢&操縱數(shù)據(jù)內(nèi)置約束創(chuàng)建視圖其他數(shù)據(jù)庫(kù)對(duì)象Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第2頁(yè)。基本的select語(yǔ)句

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第3頁(yè)。目標(biāo)完成本課后,您應(yīng)當(dāng)能夠:?列出SQLSELECT語(yǔ)句的功能?執(zhí)行基本的SELECT語(yǔ)句Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第4頁(yè)。SQLSELECT語(yǔ)句的功能列選擇:你能夠使用SELECT語(yǔ)句的列選擇功能選擇表中的列,這些列是你想要用查詢返回的。當(dāng)你查詢時(shí),你能夠選擇你查詢的表中指定的列。行選擇:你能夠使用SELECT語(yǔ)句的行選擇功能選擇表中的行,這些行是你想要用查詢返回的。你能夠使用不同的標(biāo)準(zhǔn)限制你看見(jiàn)的行。連接:你能夠使用SELECT語(yǔ)句的連接功能來(lái)集合數(shù)據(jù),這些數(shù)據(jù)被存儲(chǔ)在不同的表中,在它們之間可以創(chuàng)建連接。在后面的課程中你將學(xué)到更多關(guān)于連接的內(nèi)容。

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第5頁(yè)?;維ELECT語(yǔ)句SELECT*|{[DISTINCT]

column|expression[alias],...}FROMtable;

?SELECT確定哪些列?FROM確定哪張表Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第6頁(yè)。選擇所有列與指定列SELECT*FROMdepartments;

用跟在SELECT關(guān)鍵字后面的星號(hào)(*),你能夠顯示表中數(shù)據(jù)的所有列。

SELECTdepartment_id,location_idFROMdepartments;

你能夠用SELECT語(yǔ)句來(lái)顯示表的指定列,指定列名之間用逗號(hào)分隔。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第7頁(yè)。寫(xiě)SQL語(yǔ)句?SQL語(yǔ)句對(duì)大小寫(xiě)不敏感?SQL語(yǔ)句可以寫(xiě)成一行或多行?關(guān)鍵字不能簡(jiǎn)寫(xiě)或分開(kāi)折行?子句通常放在不同的行?縮進(jìn)用于增強(qiáng)可讀性O(shè)racle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第8頁(yè)。算術(shù)表達(dá)式

用算術(shù)運(yùn)算符創(chuàng)建數(shù)字和日期數(shù)據(jù)的表達(dá)式操作說(shuō)明

+加

-減*乘

/除

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第9頁(yè)。使用算術(shù)運(yùn)算符SELECTlast_name,salary,salary+300FROMemployees;

優(yōu)先級(jí):?乘法和除法比加法和減法的優(yōu)先級(jí)高

?相同優(yōu)先級(jí)的運(yùn)算符從左到右計(jì)算

?圓括號(hào)用于強(qiáng)制優(yōu)先計(jì)算,并且使語(yǔ)句更清晰

SELECTlast_name,salary,12*salary+100FROMemployees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第10頁(yè)??罩?/p>

?null是一個(gè)未分配的、未知的,或不適用的值

?null不是0,也不是空格

?包含空值的算術(shù)表達(dá)式計(jì)算結(jié)果為空

SELECTlast_name,job_id,salary,commission_pctFROMemployees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第11頁(yè)。定義列別名

列別名:

?改變列標(biāo)題的名字

?可用于計(jì)算結(jié)果

?緊跟在列名后面–在列名和別名之間可以有選項(xiàng)AS關(guān)鍵字

?如果別名中包含有空格、或者特殊字符、或者大小寫(xiě)敏感,要求用雙引號(hào)

SELECTlast_nameASname,commission_pctcommFROMemployees;

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第12頁(yè)。連字運(yùn)算符連字運(yùn)算符:

?連接列或者字符串到其它的列

?用兩個(gè)豎線表示(||)?構(gòu)造一個(gè)字符表達(dá)式的合成列

SELECTfirst_name||last_nameASEmployeesFROMemployees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第13頁(yè)。文字字符串?文字字符串是包含在SELECT列表中的一個(gè)字符串,一個(gè)數(shù)字或者一個(gè)日期

?日期和字符的文字字符串值必須用單引號(hào)括起來(lái)

?每個(gè)文字字符串在每行輸出一次

SELECTlast_name||'isa'||job_idAS"EmployeeDetails”FROMemployees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第14頁(yè)。約束和排序數(shù)據(jù)Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第15頁(yè)。目標(biāo)完成本課后,您應(yīng)當(dāng)能夠執(zhí)行下列操作:?用一個(gè)查詢限制返回的行?用一個(gè)查詢分類返回的行Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第16頁(yè)。限制選擇的行

用WHERE子句限制返回的行

SELECT*|{[DISTINCT]

column|expression[alias],...}FROMtable[WHEREcondition(s)];

WHERE子句跟著FROM子句

WHERE限制查詢滿足條件的行

condition由列名、表達(dá)式、常數(shù)和比較操作組成

WHERE子句能夠比較列值、文字值、算術(shù)表達(dá)式或者函數(shù),WHERE子句由三個(gè)元素組成:列名,比較條件,列名、常量或值列表。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第17頁(yè)。使用WHERE子句

SELECTemployee_id,last_name,job_id,department_id]FROMemployeesWHEREdepartment_id=90;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第18頁(yè)。字符串和日期?字符串和日期的值放在單引號(hào)中?字符值區(qū)分大小寫(xiě),日期值是格式敏感的?日期的默認(rèn)格式是DD-MON-RR.SELECTlast_name,job_id,department_idFROMemployeesWHERElast_name='Whalen';

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第19頁(yè)。比較條件

運(yùn)算含義

=等于

>大于

>=大于等于

<小于

<=小于等于

<>不等于比較條件被用于一個(gè)表達(dá)式與一個(gè)值或與另一個(gè)表達(dá)式的比較。...WHEREhire_date='01-JAN-95'...WHEREsalary>=6000...WHERElast_name='Smith'Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第20頁(yè)。其它比較條件操作含義

BETWEEN...AND...在兩個(gè)值之間(包含)IN(set)匹配一個(gè)任意值列表

LIKE匹配一個(gè)字符模板

ISNULL是一個(gè)空值使用BETWEEN條件:

SELECTlast_name,salaryFROMemployeesWHEREsalaryBETWEEN2500AND3500;使用IN條件

SELECTemployee_id,last_name,salary,manager_idFROMemployeesWHEREmanager_idIN(100,101,201);Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第21頁(yè)。其它比較條件使用LIKE條件?使用LIKE條件執(zhí)行有效搜索串值的通配符搜索?搜索條件既可以包含文字也可以包含數(shù)字:

–%表示任意順序的零個(gè)或多個(gè)字符

–_表示一個(gè)字符

SELECTfirst_nameFROMemployeesWHEREfirst_nameLIKE'S%';

使用NULL條件?用ISNULL操作來(lái)測(cè)試空值

SELECTlast_name,manager_idFROMemployeesWHEREmanager_idISNULL;

NULL條件,包括ISNULL條件和ISNOTNULL條件。

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第22頁(yè)。邏輯條件

運(yùn)算含義

AND如果兩個(gè)組成部分的條件都為真,返回TRUEOR如果兩個(gè)組成部分中的任一個(gè)條件為真,返回TRUENOT如果跟隨的條件為假,返回TRUE可以在WHERE子句中用AND和OR運(yùn)算符使用多個(gè)條件。使用AND操作:AND要求兩個(gè)條件同時(shí)為真

SELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary>=10000ANDjob_idLIKE'%MAN%';

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第23頁(yè)。邏輯條件使用OR操作:OR操作要求兩者之一為真即可

SELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary>=10000ORjob_idLIKE'%MAN%';使用NOT操作

SELECTlast_name,job_idFROMemployeesWHEREjob_idNOTIN('IT_PROG','ST_CLERK','SA_REP');

注:NOT運(yùn)算符也可以用于另一個(gè)SQL運(yùn)算符,例如,BETWEEN、LIKE、和NULL。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第24頁(yè)。優(yōu)先規(guī)則

求值順序

1算術(shù)運(yùn)算

2連字操作

3比較操作

4IS[NOT]NULL,LIKE,[NOT]IN5[NOT]BETWEEN6NOT邏輯條件

7AND邏輯條件

8OR邏輯條件使用圓括號(hào)改變優(yōu)先規(guī)則

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第25頁(yè)。ORDERBY子句?用ORDERBY子句排序行

–ASC:升序排序,默認(rèn)

–DESC:降序排序?ORDERBY子句在SELECT語(yǔ)句的最后

SELECTlast_name,job_dateFROMemployeesORDERBYhire_date;語(yǔ)法:SELECTexprFROMtable[WHEREcondition(s)][ORDERBY{column,expr}[ASC|DESC]];Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第26頁(yè)。單行函數(shù)Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第27頁(yè)。目標(biāo)完成本課后,您應(yīng)當(dāng)能夠執(zhí)行下列操作:?描述在SQL中可用的函數(shù)的變量類型?在SELECT語(yǔ)句中使用字符,數(shù)字和日期函數(shù)?描述轉(zhuǎn)換函數(shù)的使用Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第28頁(yè)。SQL函數(shù)函數(shù)是SQL的一個(gè)非常強(qiáng)有力的特性,函數(shù)能夠用于下面的目的:執(zhí)行數(shù)據(jù)計(jì)算修改單個(gè)數(shù)據(jù)項(xiàng)操縱輸出進(jìn)行行分組格式化顯示的日期和數(shù)字轉(zhuǎn)換列數(shù)據(jù)類型SQL函數(shù)有輸入?yún)?shù),并且總有一個(gè)返回值。注:在本課中講述的大多數(shù)函數(shù)是針對(duì)SQL的Oracle版的。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第29頁(yè)。SQL函數(shù)(續(xù))有兩種截然不同的函數(shù):?jiǎn)涡泻瘮?shù)多行函數(shù)單行函數(shù)這些函數(shù)僅對(duì)單個(gè)行進(jìn)行運(yùn)算,并且每行返回一個(gè)結(jié)果。有不同類型的單行函數(shù),本課下面的函數(shù)類型:字符數(shù)字日期轉(zhuǎn)換多行函數(shù)這些函數(shù)能夠操縱成組的行,每個(gè)行組給出一個(gè)結(jié)果,這些函數(shù)也被稱為組函數(shù)。多行函數(shù)在后面的課程中介紹。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第30頁(yè)。單行函數(shù)單行函數(shù):?操縱數(shù)據(jù)項(xiàng)?接受多個(gè)參數(shù)并返回一個(gè)值?作用于每一個(gè)返回行?每行返回一個(gè)結(jié)果?可以修改數(shù)據(jù)類型?可以嵌套?接受多個(gè)參數(shù),參數(shù)可以是一個(gè)列或者一個(gè)表達(dá)式Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第31頁(yè)。單行函數(shù)(續(xù))單行函數(shù)的特性包括:作用于查詢中返回的每一行每行返回一個(gè)結(jié)果可能返回一個(gè)與參數(shù)不同類型的數(shù)據(jù)值可能需要一個(gè)或多個(gè)參數(shù)能夠用在SELECT、WHERE和ORDERBY子句中,可以嵌套。function_name[(arg1,arg2,...)]function_name是函數(shù)的名字。arg1,arg2是由函數(shù)使用的任意參數(shù),可以由一個(gè)列名或者一個(gè)表達(dá)式提供。

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第32頁(yè)。單行函數(shù)(續(xù))本課包括下面的單行函數(shù):字符函數(shù):接受字符輸入,可以返回字符或者數(shù)字值數(shù)字函數(shù):接受數(shù)字輸入,返回?cái)?shù)字值日期函數(shù):對(duì)DATE數(shù)據(jù)類型的值進(jìn)行運(yùn)算(除了MONTHS_BETWEEN函數(shù)返回一個(gè)數(shù)字,所有日期函數(shù)都返回一個(gè)DATE數(shù)據(jù)類型的值。)轉(zhuǎn)換函數(shù):從一個(gè)數(shù)據(jù)類型到另一個(gè)數(shù)據(jù)類型轉(zhuǎn)換一個(gè)值通用函數(shù):

NVL、NVL2、NULLIF、COALSECE、CASE、DECODEOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第33頁(yè)。字符函數(shù)單行字符函數(shù)接受字符數(shù)據(jù)作為輸入,既可以返回字符值也可以返回?cái)?shù)字值。字符函數(shù)可以被分為下面兩種:

大小寫(xiě)處理函數(shù)字符處理函數(shù)大小寫(xiě)處理函數(shù)如下:LOWER(column|expression) 轉(zhuǎn)換字符值為小寫(xiě) UPPER(column|expression) 轉(zhuǎn)換字符值為大寫(xiě) INITCAP(column|expression)轉(zhuǎn)換每個(gè)單詞的首字母值為大寫(xiě),所有其它值為小寫(xiě)字符處理函數(shù)如下:

CONCAT(column1|expression1,column2|expression2)

連接第一個(gè)字符值到第二個(gè)字符值;等價(jià)于連接運(yùn)算符(||) SUBSTR(column|expression,m[,n])

從字符值中返回指定的字符,開(kāi)始位置在m,n字符長(zhǎng)度(如果m是負(fù)數(shù),計(jì)數(shù)從字符值末尾開(kāi)始;如果n被忽略,返回到串結(jié)束的所有字符)。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第34頁(yè)。LENGTH(column|expression)返回表達(dá)式中的字符數(shù)INSTR(column|expression,‘string’,[,m],[n])

返回一個(gè)命名串的數(shù)字位置。隨意地,你可以提供一個(gè)位置m作為查找的開(kāi)始,在字符串中第n次發(fā)現(xiàn)的位置。m和n的默認(rèn)值是1,意味著在起始開(kāi)始查找,并且報(bào)告第一個(gè)發(fā)現(xiàn)的位置。 LPAD(column|expression,n,'string')RPAD(column|expression,n,'string')

填充字符值左、右調(diào)節(jié)到n字符位置的總寬度 TRIM(leading|trailing|both,trim_characterFROMtrim_source)

使你能夠從一個(gè)字符串修整頭或尾字符(或兩者)。如果trim_character或trim_source是字符文字,你必須放在單引號(hào)中。 REPLACE(text,search_string,replacement_string)

從字符串查找一個(gè)文本表達(dá)式,如果找到,用指定的值串代替它字符函數(shù)(續(xù))Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第35頁(yè)。大小寫(xiě)處理函數(shù)這些函數(shù)轉(zhuǎn)換字符串的大小寫(xiě)函數(shù)結(jié)果LOWER('SQLCourse')sqlcourseUPPER('SQLCourse')SQLCOURSEINITCAP('SQLCourse')SqlCourseLOWER:轉(zhuǎn)換大小寫(xiě)混合的字符串為小寫(xiě)字符串UPPER:轉(zhuǎn)換大小寫(xiě)混合的字符串為大寫(xiě)字符串INITCAP:將每個(gè)單詞的首字母轉(zhuǎn)換為大寫(xiě),其他字母為小寫(xiě)

SELECT‘Thejobidfor’||UPPER(last_name)||‘is’||LOWER(job_id)AS"EMPLOYEEDETAILS"FROMemployees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第36頁(yè)。字符處理函數(shù)

函數(shù)結(jié)果CONCAT('Hello','World')HelloWorldSUBSTR('HelloWorld',1,5)HelloLENGTH('HelloWorld')10INSTR('HelloWorld','W')6LPAD(salary,10,'*')*****24000RPAD(salary,10,'*')24000*****TRIM('H'FROM'HelloWorld')elloWorldOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第37頁(yè)。數(shù)字函數(shù)ROUND:四舍五入指定小數(shù)的值ROUND(45.926,2)45.93TRUNC(45.926,2)45.92MOD(1600,300)100

ROUND(column|expression,n)

四舍五入列、表達(dá)式或值為n位小數(shù)位,或者,如果n被忽略,無(wú)小數(shù)位。(如果n是負(fù)值,小數(shù)點(diǎn)左邊的數(shù)被四舍五入) TRUNC(column|expression,n)

截?cái)嗔?、表達(dá)式或值到n位小數(shù),或者,如果n被忽略,那么n默認(rèn)為0 MOD(m,n) 返回m除以n的余數(shù) Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第38頁(yè)。使用ROUND函數(shù)

SELECTROUND(45.923,2),ROUND(45.923,0),ROUND(45.923,-1)FROMDUAL;使用TRUNC函數(shù)

SELECTTRUNC(45.923,2),TRUNC(45.923),TRUNC(45.923,-2)FROMDUAL;使用MOD函數(shù)

SELECTlast_name,salary,MOD(salary,5000)FROMemployeesWHEREjob_id='SA_REP';注:MOD函數(shù)經(jīng)常用于確定一個(gè)值是奇數(shù)還是偶數(shù)

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第39頁(yè)。日期的使用?Oracle數(shù)據(jù)庫(kù)用內(nèi)部數(shù)字格式存儲(chǔ)日期:世紀(jì),年,月,日,小時(shí),分鐘和秒

?默認(rèn)日期顯示格式是DD-MON-RR.SELECTlast_name,hire_dateFROMemployeesWHERElast_namelike''G%';';SYSDATE函數(shù)返回:

?Date?TimeSYSDATE是一個(gè)日期函數(shù),它返回當(dāng)前數(shù)據(jù)庫(kù)服務(wù)器的日期和時(shí)間。

SELECTSYSDATEFROMDUAL;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第40頁(yè)。用日期計(jì)算?從日期加或者減一個(gè)數(shù),結(jié)果是一個(gè)日期值?兩個(gè)日期相減,得到兩個(gè)日期之間的天數(shù)?用小時(shí)數(shù)除以24,可以加小時(shí)到日期上既然數(shù)據(jù)庫(kù)以數(shù)字方式存儲(chǔ)日期,你就可以用算術(shù)運(yùn)算符進(jìn)行計(jì)算,例如,加或減。你可以加或減數(shù)字常數(shù)以及日期。你可以進(jìn)行下面的運(yùn)算:運(yùn)算 結(jié)果 說(shuō)明 date+number 日期加一個(gè)天數(shù)到一個(gè)日期上date-number 日期從一個(gè)日期上減一個(gè)天數(shù)date-date 天數(shù)用一個(gè)日期減另一個(gè)日期date+number/24日期加一個(gè)小時(shí)數(shù)到一個(gè)日期上Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第41頁(yè)。日期函數(shù)

函數(shù)說(shuō)明MONTHS_BETWEEN兩個(gè)日期之間的月數(shù)ADD_MONTHS加日歷月到日期NEXT_DAY下個(gè)星期幾是幾號(hào)LAST_DAY指定月的最后一天ROUND四舍五入日期TRUNC截?cái)嗳掌贠racle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第42頁(yè)。日期函數(shù)(續(xù))MONTHS_BETWEEN(date1,date2):計(jì)算date1和date2之間的月數(shù),其結(jié)果可以是正的也可以是負(fù)的。如果date1大于date2,結(jié)果是正的,反之,結(jié)果是負(fù)的。結(jié)果的小數(shù)部分表示月的一部分。

ADD_MONTHS(date,n):添加n個(gè)日歷月到date。n的值必須是整數(shù),但可以是負(fù)的。NEXT_DAY(date,‘char’):計(jì)算在date之后的下一個(gè)周(‘char’)指定天的日期。char的值可能是一個(gè)表示一天的數(shù)或者是一個(gè)字符串。LAST_DAY(date):計(jì)算包含date的月的最后一天的日期ROUND(date[,‘fmt’]):返回用格式化模式fmt四舍五入到指定單位的date,如果格式模式fmt被忽略,date被四舍五入到最近的天。TRUNC(date[,‘fmt’]):返回用格式化模式fmt截?cái)嗟街付▎挝坏膸斓臅r(shí)間部分的date,如果格式模式fmt被忽略,date被截?cái)嗟阶罱奶臁racle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第43頁(yè)。使用日期函數(shù)?MONTHS_BETWEEN(‘01-SEP-95’,‘11-JAN-94’)

19.6774194?ADD_MONTHS(‘11-JAN-94’,6)'11-JUL-94'?NEXT_DAY(‘01-SEP-95’,‘2’)下個(gè)星期五是幾號(hào)'08-SEP-95'?LAST_DAY('01-FEB-95')'28-FEB-95'Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第44頁(yè)。使用日期函數(shù)(續(xù))假定SYSDATE='25-JUL-95':?ROUND(SYSDATE,'MONTH')01-AUG-95?ROUND(SYSDATE,'YEAR')01-JAN-96?TRUNC(SYSDATE,'MONTH')01-JUL-95?TRUNC(SYSDATE,'YEAR')01-JAN-95?TRUNC(TO_DATE('25-JUL-95'),'YEAR')01-JAN-95Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第45頁(yè)。轉(zhuǎn)換函數(shù)數(shù)據(jù)類型轉(zhuǎn)換?隱式數(shù)據(jù)類型轉(zhuǎn)換?顯式數(shù)據(jù)類型轉(zhuǎn)換對(duì)于直接賦值,Oracle服務(wù)器能夠自動(dòng)地進(jìn)行下面的轉(zhuǎn)換:從到VARCHAR2orCHARNUMBERVARCHAR2orCHARDATENUMBERVARCHAR2DATEVARCHAR2對(duì)于表達(dá)式賦值,Oracle服務(wù)器能自動(dòng)地進(jìn)行下面的轉(zhuǎn)換:從VARCHAR2orCHAR到DATE從VARCHAR2orCHAR到NUMBEROracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第46頁(yè)。轉(zhuǎn)換函數(shù)(續(xù))顯式數(shù)據(jù)類型轉(zhuǎn)換SQL提供三種函數(shù)來(lái)從一種數(shù)據(jù)類型轉(zhuǎn)換值到另一種:TO_CHAR(number|date,[fmt],[nlsparams]) 轉(zhuǎn)換一個(gè)數(shù)字或日期值為一個(gè)VARCHAR2字符串,帶格式化樣式fmt。數(shù)字轉(zhuǎn)換:nlsparams參數(shù)指定下面的字符,它由數(shù)字格式化元素返回:小數(shù)字符99999.99前導(dǎo)009999本地貨幣符號(hào)L9999國(guó)際貨幣符號(hào)$9999如果忽略nlsparams或其它參數(shù),該函數(shù)在會(huì)話中使用默認(rèn)參數(shù)值。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第47頁(yè)。TO_CHAR(number|date,[fmt],[nlsparams])指定返回的月和日名字及其縮寫(xiě)的語(yǔ)言。如果忽略該參數(shù),該函數(shù)在會(huì)話中使用默認(rèn)日期語(yǔ)言。TO_NUMBER(char,[fmt],[nlsparams])用由可選格式化樣式fmt指定的格式轉(zhuǎn)換包含數(shù)字的字符串為一個(gè)數(shù)字。Nlsparams參數(shù)在該函數(shù)中的目的與TO_CHAR函數(shù)用于數(shù)字轉(zhuǎn)換的目的相同。TO_DATE(char,[fmt],[nlsparams])按照f(shuō)mt指定的格式轉(zhuǎn)換表示日期的字符串為日期值。如果忽略fmt,格式是DD-MON-YY。Nlsparams參數(shù)的目的與TO_CHAR函數(shù)用于日期轉(zhuǎn)換時(shí)的目的相同。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第48頁(yè)。對(duì)日期使用TO_CHAR函數(shù)TO_CHAR(date,'format_model')格式模板?必須加單引號(hào),并且區(qū)分大小寫(xiě)?能夠包含任一有效的日期格式元素?有一個(gè)fm元素用來(lái)刪除填補(bǔ)的空,或者前導(dǎo)零?用一個(gè)逗號(hào)與日期值分開(kāi)

SELECTemployee_id,TO_CHAR(hire_date,'MM/YY')Month_HiredFROMemployeesWHERElast_name='Higgins';

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第49頁(yè)。日期格式模板的元素YYYY數(shù)字全寫(xiě)年YEAR年的拼寫(xiě)MM月的兩數(shù)字值MONTH月的全名DY周中天的三字母縮寫(xiě)DAY周中天的全名MON月的三字母縮寫(xiě)DD月的數(shù)字天Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第50頁(yè)。使用TO_NUMBER和TO_DATE函數(shù)?轉(zhuǎn)換字符串到數(shù)字,用TO_NUMBER函數(shù)格式化:TO_NUMBER(char[,'format_model'])?轉(zhuǎn)換字符串到日期,用TO_DATE函數(shù)格式化:TO_DATE(char[,'format_model'])Selectto_number(‘12345’)fromdual;Selectto_date(‘20000810’,’yyyy-mm-dd’fromdual;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第51頁(yè)。通用函數(shù)這些函數(shù)可用于任意數(shù)據(jù)類型,并且適用于空值?NVL(expr1,expr2)?NVL2(expr1,expr2,expr3)?NULLIF(expr1,expr2)?COALESCE(expr1,expr2,...,exprn)

NVL

轉(zhuǎn)換空值為一個(gè)實(shí)際值 NVL2

如果expr1非空,NVL2返回expr2;如果expr1為空

,NVL2返回expr3。參數(shù)expr1可以是任意數(shù)據(jù)類型NULLIF比較兩個(gè)表達(dá)式,如果相等返回空;如果不相等

,返回第一個(gè)表達(dá)式 COALESCE返回表達(dá)式列表中的第一個(gè)非空表達(dá)式Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第52頁(yè)。NVL函數(shù)轉(zhuǎn)換一個(gè)空值到一個(gè)實(shí)際的值?可用的數(shù)據(jù)類型可以是日期、字符和數(shù)字?數(shù)據(jù)類型必須匹配:–NVL(commission_pct,0)–NVL(hire_date,'01-JAN-97')–NVL(job_id,'NoJobYet')語(yǔ)法:NVL(expr1,expr2)

在語(yǔ)法中:expr1是包含空值的源值或者表達(dá)式expr2是用于轉(zhuǎn)換空值的目的值Selectnvl(‘1’,’notnull’fromdual;注:如果expr1為空則返回expr2r的值Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第53頁(yè)。使用NVL2函數(shù)NVL2函數(shù)檢查第一個(gè)表達(dá)式,如果第一個(gè)表達(dá)式不為空,那么NVL2函數(shù)返回第二個(gè)表達(dá)式;如果第一個(gè)表達(dá)式為空,那么第三個(gè)表達(dá)式被返回。expr2expr1非空時(shí)的返回值語(yǔ)法NVL2(expr1,expr2,expr3)在語(yǔ)法中:expr1是可能包含空的源值或表達(dá)式expr3expr1為空時(shí)的返回值SelectNVL2(‘1’,’notnull’,’null’)fromdual;SelectNVL2(‘1’,’notnull’,’null’)fromdual;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第54頁(yè)。使用NULLIF函數(shù)NULLIF函數(shù)比較兩個(gè)表達(dá)式,如果相等,函數(shù)返回空,如果不相等,函數(shù)返回第一個(gè)表達(dá)式。第一個(gè)表達(dá)式不能為NULL。語(yǔ)法NULLIF(expr1,expr2)在語(yǔ)法中:expr1是對(duì)于expr2的被比較原值expr2是對(duì)于expr1的被比較原值。(如果它不等于expr1,

expr1被返回)。

Selectnullif(‘a(chǎn)bc’,’abcd’)fromdual;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第55頁(yè)。使用COALESCE函數(shù)?COALESCE函數(shù)超過(guò)NVL函數(shù)的優(yōu)點(diǎn)是COALESCE函數(shù)能夠接受多個(gè)交替的值。?如果第一個(gè)表達(dá)式非空,它返回該表達(dá)式;否則,它做一個(gè)保留表達(dá)式的結(jié)合。COALESCE函數(shù)返回列表中的第一個(gè)非空表達(dá)式。

語(yǔ)法COALESCE(expr1,expr2,...exprn)在語(yǔ)法中:expr1如果它非空,返回該表達(dá)式expr2如果第一個(gè)表達(dá)式為空并且該表達(dá)式非空,返回該表達(dá)式exprn如果前面的表達(dá)式都為空,返回該表達(dá)式Selectcoalesce(‘',‘','bca')fromdual;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第56頁(yè)。條件表達(dá)式在SQL語(yǔ)句中提供IF-THEN-ELSE邏輯的使用。兩種用法:

–CASE表達(dá)式

–DECODE函數(shù)

CASE表達(dá)式

CASEexprWHENcomparison_expr1THENreturn_expr1

WHENcomparison_expr2THENreturn_expr2

WHENcomparison_exprnTHENreturn_exprn

ELSEelse_expr]ENDOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第57頁(yè)。DECODE函數(shù)DECODE(col|expression,search1,result1

[,search2,result2,...,][,default])DECODE函數(shù)在比較表達(dá)式(expression)和每個(gè)查找(search)值后解碼表達(dá)式,如果表達(dá)式與查找相同,返回結(jié)果。如果省略默認(rèn)值,當(dāng)沒(méi)有查找值與表達(dá)式相匹配時(shí)返回一個(gè)空值。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第58頁(yè)。多表顯示數(shù)據(jù)&組函數(shù)合計(jì)數(shù)據(jù)Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第59頁(yè)。目標(biāo)完成本課后,您應(yīng)當(dāng)能夠執(zhí)行下列操作:?寫(xiě)SELECT語(yǔ)句使用等值和非等值連接從多個(gè)表中訪問(wèn)數(shù)據(jù)?使用外連接查看不滿足連接條件的數(shù)據(jù)?識(shí)別可用的組函數(shù)?描述組函數(shù)的使用?用GROUPBY子句分組數(shù)據(jù)?用HAVING子句包含或排除分組的行

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第60頁(yè)。笛卡爾乘積?笛卡爾乘積的形成,當(dāng):

–一個(gè)連接條件被遺漏時(shí)

–一個(gè)連接條件不正確時(shí)

–在第一個(gè)表中的所有行被連接到第二個(gè)表的所有行時(shí)?為了避免笛卡爾乘積的形成,在WHERE子句中應(yīng)當(dāng)總是包含正確的連接條件。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第61頁(yè)。用Oracle語(yǔ)法連接表使用一個(gè)連接從多個(gè)表中查詢數(shù)據(jù)

SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column1=table2.column2;?在WHERE子句中寫(xiě)連接條件?當(dāng)多個(gè)表中有相同的列名時(shí),將表名作為列名的前綴定義連接?當(dāng)數(shù)據(jù)從多表中查詢時(shí),要使用連接(join)條件。一個(gè)表中的行按照存在于相應(yīng)列中的公值被連接到另一個(gè)表中的行,即,通常所說(shuō)的主鍵和外鍵列。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第62頁(yè)。什么是等值連接?EMPLOYEESDEPARTMENTSOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第63頁(yè)。用等值連接返回記錄SELECTemployees.employee_id,employees.last_name,employees.department_id,departments.department_id,departments.location_idFROMemployees,departmentsWHEREemployees.department_id=departments.department_id;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第64頁(yè)。使用表別名?使用表別名簡(jiǎn)化查詢?使用表別名改善性能

SELECTe.employee_id,e.last_name,e.department_id,d.department_id,d.location_idFROMemployeese,departmentsdWHEREe.department_id=d.department_id;原則表別名最多可以有30個(gè)字符,但短一些更好。如果在FROM子句中表別名被用于指定的表,那么在整個(gè)SELECT語(yǔ)句中都要使用表別名。表別名應(yīng)該是有意義的。表別名只對(duì)當(dāng)前的SELECT語(yǔ)句有效。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第65頁(yè)。多于兩個(gè)表的連接EMPLOYEESDEPARTMENTSLOCATIONSOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第66頁(yè)。非等值連接EMPLOYEESJOB_GRADESOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第67頁(yè)。用非等值連接返回記錄SELECTe.last_name,e.salary,j.grade_levelFROMemployeese,job_gradesjWHEREe.salaryBETWEENj.lowest_salANDj.highest_sal;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第68頁(yè)。外連接DEPARTMENTSEMPLOYEESOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第69頁(yè)。外連接語(yǔ)法?你可以用一個(gè)外連接查看那些不滿足連接條件的行?外連接運(yùn)算符是加號(hào)(+)SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column(+)=table2.column;SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column=table2.column(+);?用外連接返回不直接匹配的記錄?如果在連接條件中使用外連接操作,缺少的行就可以被返回。操作符是一個(gè)在圓括號(hào)中的加號(hào)(+),它被放置在連接的缺少信息的一側(cè)。為了使來(lái)自不完善表的一行或多行能夠被連接,該操作符有產(chǎn)生一個(gè)或多個(gè)空行的作用。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第70頁(yè)。使用外連接SELECTe.last_name,e.department_id,d.department_nameFROMemployeese,departmentsdWHEREe.department_id(+)=d.department_id;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第71頁(yè)。什么是組函數(shù)?組函數(shù)操作行集,給出每組的結(jié)果

EMPLOYEES在EMPLOYEES表中的最高薪水Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第72頁(yè)。組函數(shù)的類型?AVG平均值?COUNT計(jì)數(shù)?MAX最大值?MIN最小值?STDDEV標(biāo)準(zhǔn)差?SUM合計(jì)?VARIANCE方差Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第73頁(yè)。組函數(shù)(續(xù))每個(gè)函數(shù)接收一個(gè)參數(shù),下面的表確定你可以在語(yǔ)法中使用的選項(xiàng):函數(shù) 說(shuō)明 AVG([DISTINCT|ALL]n) n的平均值,忽略空值 COUNT({*|[DISTINCT|ALL]expr})用*計(jì)數(shù)所有行,包括重復(fù)和帶空值的行。expr求除了空計(jì)算 MAX([DISTINCT|ALL]expr) expr的最大值,忽略空值 MIN([DISTINCT|ALL]expr) expr的最小值,忽略空值 STDDEV([DISTINCT|ALL]x) n的標(biāo)準(zhǔn)差,忽略空值 SUM([DISTINCT|ALL]n) 合計(jì)n的值,忽略空值 VARIANCE([DISTINCT|ALL]x) n的方差,忽略空值

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第74頁(yè)。組函數(shù)的語(yǔ)法SELECT[column,]group_function(column),...FROMtable[WHEREcondition][GROUPBYcolumn][ORDERBYcolumn];使用組函數(shù)的原則DISTINCT使得函數(shù)只考慮不重復(fù)的值;ALL使得函數(shù)考慮每個(gè)值,包括重復(fù)值。默認(rèn)值是ALL,因此不需要指定。用于函數(shù)的參數(shù)的數(shù)據(jù)類型可以是CHAR、VARCHAR2、NUMBER或DATE。所有組函數(shù)忽略空值。為了用一個(gè)值代替空值,用NVL、NVL2或COALESCE函數(shù)。當(dāng)使用GROUPBY子句時(shí),Oracle服務(wù)器隱式以升序排序結(jié)果集。為了覆蓋該默認(rèn)順序,DESC可以被用于ORDERBY子句。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第75頁(yè)。使用AVG、SUM、MIN、MAX函數(shù)你可以使用AVG和SUM用于數(shù)字?jǐn)?shù)據(jù)SELECTAVG(salary),MAX(salary),MIN(salary),SUM(salary)FROMemployeesWHEREjob_idLIKE'%REP%';Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第76頁(yè)。使用COUNT函數(shù)COUNT(*)返回一個(gè)表中的行數(shù)COUNT函數(shù)有三中格式:COUNT(*)COUNT(expr)COUNT(DISTINCTexpr)COUNT(*)返回表中滿足SELECT語(yǔ)句標(biāo)準(zhǔn)的行數(shù),包括重復(fù)行,包括有空值列的行。如果WHERE子句包括在SELECT語(yǔ)句中,COUNT(*)返回滿足WHERE子句條件的行數(shù)。COUNT(expr)返回在列中的由expr指定的非空值的數(shù)。COUNT(DISTINCTexpr)返回在列中的由expr指定的唯一的非空值的數(shù)。注:expr為列名Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第77頁(yè)。組函數(shù)和Null值所有組函數(shù)忽略列中的空值。在幻燈片的例子中,平均值只基于表中的那些COMMISSION_PCT列的值有效的行的計(jì)算。平均值計(jì)算是用付給所有雇員的總傭金除以接受傭金的雇員數(shù)(4)。SELECTAVG(commission_pct)FROMemployees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第78頁(yè)。在組函數(shù)中使用NVL函數(shù)NVL函數(shù)強(qiáng)制組函數(shù)包括空值。在幻燈片的例子中,平均值被基于所有表中的行來(lái)計(jì)算,不管COMMISSION_PCT列是否為空。平均值的計(jì)算是用付給所有雇員的總傭金除以公司的雇員總數(shù)(20)。SELECTAVG(NVL(commission_pct,0))FROMemployees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第79頁(yè)。創(chuàng)建數(shù)據(jù)組:GROUPBY子句語(yǔ)法用GROUPBY子句劃分表中的行到較小的組中SELECTcolumn,group_function(column)FROMtable[WHEREcondition][GROUPBYgroup_by_expression][ORDERBYcolumn];在語(yǔ)法中,group_by_expression指定那些用于將行分組的列,這些列的值作為行分組的依據(jù)。使用WHERE子句,你可以在劃分行成組以前過(guò)濾行。在GROUPBY子句中必須包含列。在GROUPBY子句中你不能用列別名。默認(rèn)情況下,行以包含在GROUPBY列表中的字段的升序排序。你可以用ORDERBY子句覆蓋這個(gè)默認(rèn)值。如果在SELECT子句中包含了組函數(shù),就不能選擇單獨(dú)的結(jié)果,除非單獨(dú)的列出現(xiàn)在GROUPBY子句中。如果你未能在GROUPBY子句中包含一個(gè)字段列表,你會(huì)收到一個(gè)錯(cuò)誤信息。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第80頁(yè)。約束分組結(jié)果:HAVING子句用HAVING子句約束分組:1.行被分組2.應(yīng)用組函數(shù)3.匹配HAVING子句的組被顯示SELECTcolumn,group_functionFROMtable[WHEREcondition][GROUPBYgroup_by_expression][HAVINGgroup_condition][ORDERBYcolumn];Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第81頁(yè)。使用HAVING子句SELECTdepartment_id,MAX(salary)FROMemployeesGROUPBYdepartment_idHAVINGMAX(salary)>10000;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第82頁(yè)。嵌套組函數(shù)顯示最大平均薪水SELECTMAX(AVG(salary))FROMemployeesGROUPBYdepartment_id;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第83頁(yè)。創(chuàng)建和管理表Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第84頁(yè)。目標(biāo)完成本課后,您應(yīng)當(dāng)能夠執(zhí)行下列操作:?描述主要數(shù)據(jù)庫(kù)對(duì)象?創(chuàng)建表?描述列定義時(shí)可用的數(shù)據(jù)類型?改變表的定義?刪除、改名和截?cái)啾鞳racle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第85頁(yè)。數(shù)據(jù)庫(kù)對(duì)象表基本存儲(chǔ)單元,由行和列組成視圖邏輯地從一個(gè)或多個(gè)表中表示數(shù)據(jù)子集序列數(shù)字值發(fā)生器索引改善一些查詢的性能同義詞給對(duì)象可選擇的名字Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第86頁(yè)。命名規(guī)則表命名和列命名:?必須以字母開(kāi)始?必須是1–30個(gè)字符長(zhǎng)度?只能包含A–Z,a–z,0–9,_,$,和#?同一個(gè)用戶所擁有的對(duì)象之間不能重名?不能用Oracle服務(wù)器的保留字注:名字是大小寫(xiě)不敏感的,例如,EMPLOYEES與eMPloyees或eMpLOYEES作為同一個(gè)名字來(lái)處理。

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第87頁(yè)。CREATETABLE語(yǔ)句?用戶必須有:

–CREATETABLE權(quán)限

–一個(gè)存儲(chǔ)區(qū)域CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][,...]);?必須指定:

–表名

–列名、列數(shù)據(jù)類型和列的大小schema與所有者的名字一樣table表的名字DEFAULTexpr指定默認(rèn)值column列的名字datatype列的數(shù)據(jù)類型和長(zhǎng)度Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第88頁(yè)。引用另一個(gè)用戶的表?表屬于另一個(gè)用戶,不在該用戶的方案中?在那些表名字的前面使用所有者的名字作為前綴如果一個(gè)表不屬于本用戶,那么,其所有者的名字必須放在表名的前面SELECT*FROMuser_b.employees;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第89頁(yè)。創(chuàng)建表?創(chuàng)建表CREATETABLEdept(deptnoNUMBER(2),dnameVARCHAR2(14),locVARCHAR2(13));?確認(rèn)表的創(chuàng)建DESCRIBEdeptOracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第90頁(yè)。Oracle數(shù)據(jù)庫(kù)中的表?用戶表:

–由用戶創(chuàng)建和維護(hù)的表的集合

–包含用戶信息?數(shù)據(jù)字典:

–由Oracle服務(wù)器創(chuàng)建和維護(hù)的表的集合

–包含數(shù)據(jù)庫(kù)信息有四種數(shù)據(jù)字典視圖,每一種有一個(gè)特定的前綴來(lái)反映其不同的目的。USER_這些視圖包含關(guān)于用戶所擁有的對(duì)象的信息。 ALL_這些視圖包含所有用戶可訪問(wèn)的表(對(duì)象表和相關(guān)的表)的信息。DBA_這些視圖是受限制的視圖,它們只能被分配有DBA角色的用戶所訪問(wèn)。 V$ 這些視圖是動(dòng)態(tài)執(zhí)行的視圖,包含數(shù)據(jù)庫(kù)服務(wù)器的性能、存儲(chǔ)器和鎖的信息。

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第91頁(yè)。查詢數(shù)據(jù)字典?查看本用戶所擁有的表的名稱SELECTtable_nameFROMuser_tables;?查看本用戶所擁有的不同的對(duì)象類型SELECTDISTINCTobject_typeFROMuser_objects;?查看本用戶所擁有的表、視圖、同義詞和序列SELECT*FROMuser_catalog;Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第92頁(yè)。數(shù)據(jù)類型

數(shù)據(jù)類型說(shuō)明VARCHAR2(size)可變長(zhǎng)度的字符數(shù)據(jù)CHAR(size)固定長(zhǎng)度的字符數(shù)據(jù)NUMBER(p,s)可變長(zhǎng)度的數(shù)字?jǐn)?shù)據(jù)DATE日期和時(shí)間值LONG最大2G的可變長(zhǎng)度字符數(shù)據(jù)CLOB最大4G的字符數(shù)據(jù)RAWandLONGRAW原始二進(jìn)制數(shù)據(jù)BLOB最大4G的二進(jìn)制數(shù)據(jù)BFILE最大4G的,存儲(chǔ)在外部文件中的二進(jìn)制數(shù)據(jù)ROWID一個(gè)64進(jìn)制的數(shù)制系統(tǒng),表示表中一行的唯一地址

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第93頁(yè)。用子查詢創(chuàng)建表該方法既可以創(chuàng)建表還可以將從子查詢返回的行插入新創(chuàng)建的表中。CREATETABLEdept80ASSELECTemployee_id,last_name,salary*12ANNSAL,hire_dateFROMemployeesWHEREdepartment_id=80;原則被創(chuàng)建的表要帶指定的列名,并且由SELECT語(yǔ)句返回的行被插入到新表中。字段的定義只能包括列名和默認(rèn)值。如果給出了指定的列,列的數(shù)目必須等于子查詢的SELECT列表的列數(shù)目。如果沒(méi)有給出了指定的列,表的列名應(yīng)和子查詢中的列名是相同的。完整性規(guī)則不會(huì)被傳遞到新表中,僅列的數(shù)據(jù)類型被定義。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第94頁(yè)。ALTERTABLE語(yǔ)句用ALTERTABLE語(yǔ)句來(lái):?添加一個(gè)新列?修改一個(gè)已存在的列?為新列定義一個(gè)默認(rèn)值?刪除一個(gè)列添加列ALTERTABLEtableADD(columndatatype[DEFAULTexpr][,columndatatype]...);修改列ALTERTABLEtableMODIFY(columndatatype[DEFAULTexpr][,columndatatype]...);刪除列ALTERTABLEtableDROP(column);Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第95頁(yè)。添加新列?用ADD字句添加列ALTERTABLEdept80ADD(job_idVARCHAR2(9));添加新列的原則你可以添加或修改列。你不能指定新添加的列的位置,新列將成為最后一列。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第96頁(yè)。修改列?可以改變列的數(shù)據(jù)類型、大小和默認(rèn)值A(chǔ)LTERTABLEdept80MODIFY(last_nameVARCHAR2(30));?對(duì)默認(rèn)值的改變只影響后來(lái)插入表中的數(shù)據(jù)原則你可以增加寬度或一個(gè)數(shù)字列的精度。你可以增加數(shù)字列或字符列的寬度。你可以減少一個(gè)列的寬度,但僅在列中只包含空值或表中沒(méi)有行時(shí)。你可以改變數(shù)據(jù)類型,但僅在列中只包含空值時(shí)。你可以轉(zhuǎn)換一個(gè)CHAR列到VARCHAR2數(shù)據(jù)類型或轉(zhuǎn)換一個(gè)VARCHAR2列到CHAR數(shù)據(jù)類型僅當(dāng)列中只包含空值時(shí),或者你不改變列的大小時(shí)。對(duì)默認(rèn)值的改變僅影響以后插入的列。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第97頁(yè)。刪除列用DROPCOLUMN子句從表中刪除列ALTERTABLEdept80DROPCOLUMNjob_id;原則列可以有也可以沒(méi)有數(shù)據(jù)。用ALTERTABLE語(yǔ)句,一次只能有一列被刪除。表被修改后必須至少保留一列。一旦一列被刪除,它不能再恢復(fù)。Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第98頁(yè)。刪除表?在表中的所有數(shù)據(jù)和結(jié)構(gòu)都被刪除?任何未決的事務(wù)都被提交?所有的索引被刪除?你不能回退DROPTABLE語(yǔ)句DROPTABLEdept80;DROPTABLE語(yǔ)句刪除Oracle表定義,當(dāng)你刪除一個(gè)表時(shí),數(shù)據(jù)庫(kù)丟失表中所有的數(shù)據(jù),并且所有與其相關(guān)的索引也被刪除。

Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第99頁(yè)。改變一個(gè)對(duì)象的名字?執(zhí)行RENAME語(yǔ)句,改變一個(gè)表、視圖、序列或同義詞RENAMEdeptTOdetail_dept;注:你必須是對(duì)象的所有者Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第100頁(yè)。截?cái)啾?TRUNCATETABLE語(yǔ)句:

–刪除表中所有的行

–釋放該表所使用的存儲(chǔ)空間TRUNCATETABLEdetail_dept;?不能回退用TRUNCATE刪除的行?作為選擇,可以用DELETE語(yǔ)句刪除行Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第101頁(yè)。子查詢&操縱數(shù)據(jù)Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第102頁(yè)。目標(biāo)完成本課后,您應(yīng)當(dāng)能夠執(zhí)行下列操作:?描述子查詢能夠解決的問(wèn)題類型?定義子查詢?列出子查詢的類型?寫(xiě)單行和多行子查詢?描述每個(gè)DML語(yǔ)句?插入行到表中?更新表中的行?從表中刪除行?控制事務(wù)Oracle數(shù)據(jù)庫(kù)培訓(xùn)-SQL基礎(chǔ)篇資料全文共203頁(yè),當(dāng)前為第103頁(yè)。用子查詢解決問(wèn)題用子查詢解決問(wèn)題假想你想要寫(xiě)一個(gè)查詢來(lái)找出掙錢(qián)比Abel的薪水還多的人。為了解決這個(gè)問(wèn)題,你需要兩個(gè)查詢:一個(gè)找出Abel的收入,第二個(gè)查詢找出收入高于Abel的人

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論