




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2第7章 SQL語言基礎(chǔ)4本章要點:了解SQL語言的三大分類。掌握SELECT語句的語法結(jié)構(gòu)。熟練掌握SELECT語句中的各種子句。熟練掌握組合使用WHERE、GROUP BY、HAVING和ORDER BY子句。熟練掌握INSERT、UPDATE和DELETE語句。了解MERGE語句。掌握字符串函數(shù)、數(shù)字函數(shù)、日期時間函數(shù)和正則表達式函數(shù)。熟練掌握轉(zhuǎn)換函數(shù)。熟練掌握聚合函數(shù)。掌握數(shù)據(jù)庫事務(wù)操作。37.1 SQL語言概述41SQL語言的特點SQL語言作為應(yīng)用程序與數(shù)據(jù)庫進行交互操作的接口,具有自己的特點,如下:|SQL語言采用集合操作方式,對數(shù)據(jù)的處理是成組進行的,語言采用集合操作方式,對數(shù)據(jù)
2、的處理是成組進行的,而不是一條一條處理。通過使用集合操作方式,可以加快而不是一條一條處理。通過使用集合操作方式,可以加快數(shù)據(jù)的處理速度。數(shù)據(jù)的處理速度。|執(zhí)行執(zhí)行SQL語句時,每次只能發(fā)送并處理一條語句。如果要語句時,每次只能發(fā)送并處理一條語句。如果要降低語句發(fā)送和處理次數(shù),可以使用降低語句發(fā)送和處理次數(shù),可以使用PL/SQL。|執(zhí)行執(zhí)行SQL語句時,用戶只需要知道其邏輯含義,而不需要語句時,用戶只需要知道其邏輯含義,而不需要關(guān)心關(guān)心SQL語句的具體執(zhí)行步驟。語句的具體執(zhí)行步驟。Oracle會自動優(yōu)化會自動優(yōu)化SQL語語句,確定最佳訪問途徑,執(zhí)行句,確定最佳訪問途徑,執(zhí)行SQL語句,最終返回實
3、際數(shù)語句,最終返回實際數(shù)據(jù)。據(jù)。|使用使用SQL語句時,既可以采用交互方式執(zhí)行語句時,既可以采用交互方式執(zhí)行(例如例如SQL*Plus),也可以將,也可以將SQL語句嵌入到高級語言語句嵌入到高級語言(例如例如C+、Java)中執(zhí)行。中執(zhí)行。47.1 SQL語言概述42SQL語言分類(1)數(shù)據(jù)操縱語言(Data Manipulation Language,DML)(2)數(shù)據(jù)定義語言(Data Definition Language,DDL)(3)數(shù)據(jù)控制語言(Data Control Language,DCL)57.1 SQL語言概述43SQL語言規(guī)范為了養(yǎng)成良好的編程習慣,編寫SQL語句時需要
4、遵循一定的規(guī)則,這些規(guī)則如下:|SQL關(guān)鍵字、對象名和列名不區(qū)分大小寫,既可以使用大關(guān)鍵字、對象名和列名不區(qū)分大小寫,既可以使用大寫格式,也可以使用小寫格式,或者混用大小寫格式。寫格式,也可以使用小寫格式,或者混用大小寫格式。|字符值和日期值區(qū)分大小寫。當在字符值和日期值區(qū)分大小寫。當在SQL語句中引用字符值語句中引用字符值和日期值時,必須要給出正確的大小寫數(shù)據(jù),否則不能返和日期值時,必須要給出正確的大小寫數(shù)據(jù),否則不能返回正確信息。回正確信息。|在應(yīng)用程序中編寫在應(yīng)用程序中編寫SQL語句時,如果語句時,如果SQL語句文本很短,語句文本很短,可以將語句文本放在一行上;如果可以將語句文本放在一行
5、上;如果SQL語句文本很長,可語句文本很長,可以將語句文本分布到多行上,并且可以通過使用跳格和縮以將語句文本分布到多行上,并且可以通過使用跳格和縮進提高代碼的可讀性。進提高代碼的可讀性。|SQL*Plus中的中的SQL語句要以分號語句要以分號(;)結(jié)束。結(jié)束。67.2 使用SELECT語句檢索數(shù)據(jù)4SQL的主要功能之一是實現(xiàn)數(shù)據(jù)庫查詢,查詢就是用來取得滿足特定條件的信息。4查詢語句可以從一個或多個表中、根據(jù)指定的條件選取特定的行和列。77.2.1 SELECT語句的結(jié)構(gòu)4查詢是SQL語言的核心,用于表達SQL查詢的SELECT語句則是功能最強也是最為復(fù)雜的SQL語句。SELECT語句的完整語法
6、如下所示:SELECT ALL | DISTINCT * | expression | column1_name , column2_name , . FROM table1_name | ( subquery ) alias , table2_name | ( subquery ) alias , . WHERE condition CONNECT BY condition START WITH condition GROUP BY expression ,. HAVING condition ,. UNION | INTERSECT | MINUS ORDER BY expression
7、ASC | DESC , . FOR UPDATE OF schema. table_name | view column NOWAIT ;87.2.1 SELECT語句的結(jié)構(gòu)4【例例7.1】打開SQL*PLUS窗口后,使用system用戶身份連接到數(shù)據(jù)庫。然后使用SELECT語句,查詢scott用戶的emp表中的信息,如下:SELECT empno 雇員編號 , ename 雇員名稱 , hiredate 受雇日期 , deptno 部門編號 FROM scott.emp ; 雇員編號 雇員名稱 受雇日期部門編號- - - - 7369 SMITH 17-12月-80 20 7499 ALL
8、EN 20-2月 -81 30. 7902FORD 03-12月-81 20 7934MILLER 23-1月 -82 10已選擇14行。97.2.2 FROM子句4 在SELECT語句中,F(xiàn)ROM子句是必不可少的,該子句用來指定所要查詢的表或視圖的名稱列表。4 在FROM子句中,可以指定多個表或視圖,每個表或視圖都可以指定子查詢和別名。4 【例7.2】對scott用戶的emp表執(zhí)行查詢操作,在from字句中,為此表指定別名e,并用SELECT字句使用這個別名指定表中的列SELECT e.empno 雇員編號 , e.ename 雇員名稱 , e.hiredate 受雇日期 ,e. deptn
9、o 部門編號 FROM scott.emp e ; 雇員編號雇員名稱 受雇日期部門編號- - - - 7369 SMITH 17-12月-80 20 7499 ALLEN 20-2月 -81 30. 7902FORD 03-12月-81 20 7934MILLER 23-1月 -82 10已選擇14行。107.2.3 WHERE子句4 1WHERE子句中的操作符使用WHERE子句時,只需要在WHERE關(guān)鍵字后面指定檢索條件即可。在檢索條件中,可以使用多種操作符,這些操作符如表7-4所示。比較操作符說 明=等于、!=不等于=大于等于大于=7900;4 【例7.4】使用ANY操作符,檢索員工編號大
10、于7700、7800和7900中的任何一個。SELECT *FROM scott.emp WHERE e.empnoANY(7700,7800,7900);4【例7.5】使用ALL操作符,檢索員工編號大于7700、7800和79003個值得數(shù)據(jù)行。SELECT *FROM scott.emp WHERE e.empnoALL(7700,7800,7900);117.2.3 WHERE子句127.2.3 WHERE子句42BETWEEN操作符在WHERE子句中可以使用BETWEEN操作符,用來檢索列值包含在指定區(qū)間內(nèi)的數(shù)據(jù)行。這個區(qū)間是閉區(qū)間,這就意味著包含區(qū)間的兩個邊界值。【例7.6】使用BE
11、TWEEN操作符,從scott用戶的emp表中,檢索empno列值在7800和7900之間的記錄。SELECT*FROMscott.empWHEREempnoBETWEEN7800AND7900;43LIKE操作符在WHERE子句中可以使用LIKE操作符,用來查看某一列中的字符串是否匹配指定的模式。所匹配的模式可以使用普通字符和下面兩個通配符的組合指定。|下劃線字符下劃線字符(_):匹配指定位置的一個字符。:匹配指定位置的一個字符。|百分號字符百分號字符(%):匹配從指定位置開始的任意個字符。:匹配從指定位置開始的任意個字符。【例7.7】SELECT*FROMscott.empWHEREena
12、meLIKEB_A%;【例7.8】SELECT*FROMscott.empWHEREenameLIKE%ESCAPE;137.2.3 WHERE子句44IN操作符在WHERE子句中可以使用IN操作符,用來檢索某列的值在某個列表中的數(shù)據(jù)行。【例7.9】檢索empno在7788、7800或7900的記錄。SELECT*FROMscott.empWHEREempnoIN(7788,7800,7900);147.2.3 WHERE子句157.2.4 ORDER BY子句4在排序過程中,可以同時對多個列指定排序規(guī)則,多個列之間使用逗號(,)隔開。如果使用多個列進行排序,那么列之間的順序非常重要,系統(tǒng)首先
13、按照第一個列的值進行排序,當?shù)谝粋€列的值相同時,再按照第二個列的值進行排序,以此類推。4【例例7.10】在前面例7.3的SELECT FROM WHERE 語句中,添加ORDER BY子句,對查詢得到的結(jié)果首先按照hiredate列進行降序排列,然后再按照deptno列進行升序排列。具體如下:SELECT e.empno 雇員編號 , e.ename 雇員名稱 , e.hiredate 受雇日期 ,e. deptno 部門編號 FROM scott.emp e WHERE e.empno=7900ORDER BY e. hiredate DESC,e.deptno ASC;167.2.5 GR
14、OUP BY子句4使用GROUP BY子句,可以根據(jù)表中的某一列或某幾列對表中的數(shù)據(jù)行進行分組,多個列之間使用逗號(,)隔開。如果根據(jù)多個列進行分組,Oracle會首先根據(jù)第一列進行分組,然后在分出來的組中再按照第二列進行分組,以此類推。4對數(shù)據(jù)分組后,主要是使用一些聚合函數(shù)對分組后的數(shù)據(jù)進行統(tǒng)計。4在SELECT子句的后面,只能有兩種類型的表達式,一種是出現(xiàn)在GROUP BY子句后面的字段名或者是它的非統(tǒng)計函數(shù)表達式。另一種是其他非分組字段的統(tǒng)計函數(shù)表達式。【例7.11】查詢每個部門的員工人數(shù)SELECT deptno AS 部門編號,COUNT(*) AS 員工人數(shù) FROM scott.
15、empGROUP BY deptno; 【例7.12】檢索統(tǒng)計每個部門中每種工作的人數(shù)。SELECT deptno AS 部門編號,COUNT(*) AS 員工人數(shù),job AS 工作 FROM scott.empGROUP BY deptno; 【例7.12】檢索統(tǒng)計每個部門中每種工作的人數(shù)。SELECT deptno AS 部門編號,COUNT(*) AS 員工人數(shù),job AS 工作 FROM scott.empGROUP BY deptno,job; 177.2.6 HAVING子句4HAVING子句通常與GROUP BY子句一起使用,在完成對分組結(jié)果的統(tǒng)計后,可以使用HAVING子句
16、對分組的結(jié)果進行進一步的篩選。4一個HAVING子句最多可以包含40個表達式,HAVING子句的表達式之間使用關(guān)鍵字AND和OR分隔。4如果在SELECT語句中使用了GROUP BY子句,那么HAVING子句將應(yīng)用于GROUP BY子句創(chuàng)建的組;如果指定了WHERE子句,而沒有指定GROUP BY子句,那么HAVING子句將應(yīng)用于WHERE子句的輸出,并且這個輸出被看作是一個組;如果在SELECT語句中既沒有指定WHERE子句,也沒有指定GROUP BY子句,那么HAVING子句將應(yīng)用于FROM子句的輸出,并且將這個輸出看作是一個組。187.2.6 HAVING子句4【例例7.13】在前面例7
17、.11的語句中,添加HAVING子句,指定條件為員工人數(shù)大于3,如下:SQL SELECT deptno AS 部門編號 , COUNT(*) AS 員工人數(shù) 2 FROM scott.emp GROUP BY deptno 3 HAVING COUNT(*) 3 ; 部門編號 員工人數(shù)- 30 6 20 5197.2.7 DISTINCT關(guān)鍵字4DISTINCT關(guān)鍵字用來限定在檢索結(jié)果中顯示不重復(fù)的數(shù)據(jù),對于重復(fù)值,只顯示其中一個。該關(guān)鍵字是在SELECT子句中列的列表前面使用。如果不指定DISTINCT關(guān)鍵字,默認顯示所有的列,即默認使用ALL關(guān)鍵字。4【例例7.14】查詢scott用戶的
18、emp表,如果不使用DISTINCT關(guān)鍵字,那么查詢結(jié)果有14條記錄。使用DISTINCT,部門號相同的不再重復(fù)顯示。只有3條記錄:SQL SELECT DISTINCT deptno 2 FROM scott.emp;207.2.8 算術(shù)運算符4 在SELECT語句中,不但可以對表和視圖執(zhí)行查詢操作,還可以執(zhí)行數(shù)學(xué)運算(如+、-、*、/),也可以執(zhí)行日期運算,也可以執(zhí)行與列關(guān)聯(lián)的運算。4 在執(zhí)行數(shù)學(xué)和日期運算時,經(jīng)常使用系統(tǒng)提供的dual表。可以使用DESCRIBE命令查看該表的結(jié)構(gòu)。該表只包含了一個字段,數(shù)據(jù)類型是VARCHAR2(1),數(shù)據(jù)內(nèi)容可以為空。4 【例例7.15】使用SELEC
19、T語句,執(zhí)行數(shù)學(xué)運算,實現(xiàn)從1到9的四則運算,如下:SQL SELECT 1 + 2 + 3 + ( 4 * 5 / 6 7 ) + 8 + 9 2 FROM dual ;1+2+3+(4*5/6-7)+8+9- 19.3333333217.2.8 算術(shù)運算符4 【例例7.16】使用SELECT語句,執(zhí)行日期運算,實現(xiàn)在2009年8月21日的基礎(chǔ)上加上2天的運算。具體如下:SQL SELECT TO_DATE(21-8月-2009) + 2 2 FROM dual ;TO_DATE(21-8-23-8月 094 【例例7.17】使用SELECT語句,執(zhí)行與列關(guān)聯(lián)的運算。對scott.emp表中
20、的sal列和comm列執(zhí)行求和計算,將求和的結(jié)果顯示為money列的內(nèi)容。具體如下:SQL SELECT empno,ename,sal,comm,sal+comm AS money 2 FROM scott.emp 3 ORDER BY money ASC;227.4 使用其他DML語句4DML表示數(shù)據(jù)操縱語言,主要用于對數(shù)據(jù)庫表和視圖進行操作。4在一般的關(guān)系數(shù)據(jù)庫系統(tǒng)中,DML是指SELECT、INSERT、UPDATE以及DELETE語句。4而在Oracle Database 11g數(shù)據(jù)庫中,DML還包括CALL、LOCK TABLE以及MERGE語句等。在這一小節(jié)中,除了SELECT語
21、句外,將對其他一些常用的DML語句進行具體的介紹。237.4.1 INSERT語句4 INSERT語句的語法形式如下:INSERT INTO table_name ( column1_name , column2_name . ) VALUES ( value1 , value2 . ) | SELECT query . ;4 在使用INSERT語句向表中插入數(shù)據(jù)時,需要注意以下幾點: 如果在INSERT INTO后沒有指定列名,那么VALUES子句必須按照表結(jié)構(gòu)中定義的列的次序為每個列提供值。 如果在INSERT INTO子句中指定了列名,那么每一個指定的列只能有一個值,并且值的次序必須與表
22、中定義的次序相同。 如果在INSERT語句中使用SELECT語句,則INSERT INTO子句中指定的列名必須與SELECT子句中指定的列相匹配。 當某列的數(shù)據(jù)類型為字符串時,其值應(yīng)該使用單引號( )括起來。4【例7.18】INSERT INTO scott.emp ( empno,ename,job,mgr,hirdate,sal) VALUES ( 7935,candy,manager,8700,19-7-91,8000) ;或INSERT INTO scott.empVALUES ( 7935,candy,manager,8700,19-7-91,8000) ;247.4.2 UPDAT
23、E語句4一般情況下,UPDATE語句的語法如下:UPDATE table_name SET column1_name = expression , column2_name = expression . | ( column1_name ,column2_name . ) = ( SELECT query ) WHERE condition ;4語法說明如下。table_name:表示需要更新的表名。SET:用來設(shè)置需要更新的列以及列的新值。可以指定多個列,以便一次修改多個列的值。為需要更新的列分別指定一個表達式,表達式的值即為對應(yīng)列的值。SELECT query:與INSERT語句中的SEL
24、ECT子查詢句一樣,在UPDATE語句中也可以使用SELECT子語句獲取相應(yīng)的更新值。WHERE:限定只對滿足條件的行進行更新。257.4.2 UPDATE語句4【例例7.19】使用UPDATE語句,對scott.emp表執(zhí)行更新操作。在SET子句中使用表達式,將sal的值增加200,然后重新賦值給sal列。具體如下:SQL UPDATE scott.emp 2 SET sal = sal + 200 ;已更新 17 行。使用子查詢的更新語句SQL UPDATE scott.emp 2 SET sal = (SELECT AVG(sal) FROM scott.emp) 3 WHERE emp
25、no=7935 ;267.4.3 DELETE語句4DELETE語句用于將不需要的數(shù)據(jù)行刪除。該語句的一般使用語法如下:DELETE FROM schema. table_name WHERE condition ;4其中,DELETE FROM子句用來指定將要刪除的數(shù)據(jù)所在的表;WHERE子句用來指定將要刪除的數(shù)據(jù)所要滿足的條件,可以是表達式或子查詢。如果不指定WHERE子句,則將從指定的表中刪除所有的行。4【例7.20】刪除emp表中empno為7935的員工記錄。DELETE FROM scott.empWHERE empno=7935;277.4.4 MERGE語句4使用MERGE語句
26、,可以對指定的兩個表執(zhí)行合并操作,其語法如下:MEGER INTO table1_nameUSING table2_name ON join_conditionWHEN MATCHED THEN UPDATE SET .WHEN NOT MATCHED THEN INSERT . VALUES .4語法說明如下。table1_name:表示需要合并的目標表。table2_name:表示需要合并的源表。join_condition:表示合并條件。WHEN MATCHED THEN UPDATE:表示如果符合合并條件,則執(zhí)行更新操作。WHEN NOT MATCHED THEN INSERT:表示如
27、果不符合合并條件,則執(zhí)行插入操作。4對于合并操作來說,提供了兩層過濾條件,第一層合并,有MEGER語句中的ON子句指定,一層是UPDATE或INSERT子句中指定的WHERE條件。4【例7.21】person1與person2結(jié)構(gòu)相同,合并兩個表。MEGER INTO person p1USING newperson p2 ON (p1.personid=p2.personid)WHEN MATCHED THEN UPDATE SET p1.personname=p2.personnameWHEN NOT MATCHED THEN INSERT (personid,personname)VAL
28、UES (p2.personid,p2.personname)7.4.4 MERGE語句297.5 使 用 函 數(shù)4無論什么樣的計算機語言,都提供了大量的函數(shù)。使用這些函數(shù)可以大大提高計算機語言的運算和判斷功能。4在Oracle數(shù)據(jù)庫中,提供了字符串函數(shù)、數(shù)字函數(shù)、日期函數(shù)、轉(zhuǎn)換函數(shù)和正則表達式函數(shù),另外還有一些聚合函數(shù),例如SUM函數(shù)和AVG函數(shù)等,通過使用這些函數(shù),可以大大增強SELECT語句操作數(shù)據(jù)庫數(shù)據(jù)的功能。307.5.1 字符串函數(shù)4字符串函數(shù)是Oracle系統(tǒng)中比較常用的一種函數(shù)。在使用字符串函數(shù)時,可以接受字符參數(shù),這些字符可以是一個任意有效的表達式,也可以來自于表中的一列。然
29、后字符函數(shù)會按照某種方式處理輸入?yún)?shù),并返回一個結(jié)果。4在表7-5中列出了常用的一些字符串函數(shù)。參見教材P1564 CONCAT(s1,s2) 字符串連接,對字符串s1和字符串s2進行連接。返回連接后的字符串。如果s1是NULL,則返回s2;如果s2是NULL,則返回s1;如果s1、s2都是NULL,則返回NULL。如:select concat (micro,soft)from dual;4 LOWER(s) 變字母為小寫 4 UPPER(s)變字母為大寫4 REPLACE(s1,s2,s3) 字符串查找/替換,該函數(shù)在字符串s1中查找所有出現(xiàn)的s2串,并將找到的串用s3串替換。如:sele
30、ct replace(this is an apple ,apple,example) from dual;4 INSTR(s1,s2,n,m)該函數(shù)在s1串中查找s2串出現(xiàn)的位置,返回函數(shù)值。參數(shù)n指示從s1串的第n個位置開始找;參數(shù)m指示找出第幾次出現(xiàn)的那個s2串。如:select instr(this is not a good example,is it?,is,4,2) 284 SUBSTR(S,M,N)取子串函數(shù)。該函數(shù)從s串中第m個字符起,取長度為n的一個子串。select substr(this is an example,12,4) from dual; exam7.5.1
31、字符串函數(shù)4 LENGTH(s)返回字符串s的長度,如果s為CHAR型,則長度包括所有尾部空格。 如:select length(microsoft) from dual; 4 ASCII (c)返回字符串c中的第一個字符的ASCII 碼。4 CHR(n)返回與n相等的二進制數(shù)(ascii碼)所代表的字符。4 INITCAP(s)該函數(shù)是將包含若干單詞的字符串s中的每一個單詞的首字母大寫,其他字母小寫。4 TRANSLATE(s,from,to)該函數(shù)是將字符串s中出現(xiàn)的from字符列表中的字符替換成to字符列表中的相應(yīng)字符。 如:Select translate(this is an exa
32、mple,my is,*) from dual; th*an*exa*ple4 LPAD(s1,n,s2) 左填充函數(shù)。該函數(shù)是在字符串s1的左邊填充字符s2,使字符串總長度達到參數(shù)n所規(guī)定的長度。如果s1的長度比n長,那么不填充,并只輸出s1串的前一部分。S2省略,就填充空格。 如:select lpad(very good,30,ok) from dual; okokokokokokokokokokovery good 7.5.1 字符串函數(shù)4RPAD(s1,n,s2) 右填充函數(shù)。4LTRIM(c1,c2)該函數(shù)是刪除c1串中位于最左邊的、且出現(xiàn)在c2串中的字符。如果c2參數(shù)省略,要刪除
33、的字符就是空格字符。4RTRIM(c1,c2)該函數(shù)是刪除c1串中位于最右邊的、且出現(xiàn)在c2串中的字符。7.5.1 字符串函數(shù)347.5.2 數(shù)字函數(shù)4當檢索的數(shù)據(jù)為數(shù)字數(shù)據(jù)類型時,可以使用數(shù)字函數(shù)進行數(shù)學(xué)計算。Oracle系統(tǒng)所支持的數(shù)字函數(shù)如表7-6所示。參見教材P1584 ABS(n)返回n的絕對值4 如:Select abs(-3.2) from dual; 3.24 三角函數(shù),SIN(n),COS(n),TAN(n),ASIN(n),ACOS(n),4 ATAN(n)等4 CEIL(n)返回大于或等于n的最小整數(shù)4 如:select ceil(-3.2) from dual; -34
34、 FLOOR(n)返回小于或等于n的最大整數(shù)4 EXP(n)返回基于n自然對數(shù)的平方4 LN(n)返回以e為底的n的自然對數(shù) e(2.7182818)4 LOG(n1,n2)返回以n1為底的n2的對數(shù)4 MOD(m,n) 返回m除以n的余數(shù) 4 POWER(n1,n2)返回n1的n2次方4 ROUND(m,n)取小數(shù)點前后位置n四舍五入,n默認為0,n0,則四舍五入為n位小數(shù),n0返回1,n SELECT ABS(100) , ABS(-100) FROM dual ; ABS(100) ABS(-100)- - 100 1007.5.2 數(shù)字函數(shù)367.5.3 日期時間函數(shù)4 日期和時間類型
35、的數(shù)據(jù)也是在數(shù)據(jù)庫中使用比較多的一種數(shù)據(jù)。SQL語句主要通過日期函數(shù)操縱日期和時間數(shù)據(jù)。在Oracle系統(tǒng)中,默認的日期格式為DD-MON-YY。4 常用的日期時間函數(shù)如表7-7所示。4 【例7.26】求兩日期之間相隔的月數(shù)。 4 SELECT MONTHS_BETWEEN(SYSDATE,20-1月-2010)FROM DUAL; 函 數(shù)說 明SYSDATE()獲取系統(tǒng)當前的日期值CURRENT_TIMESTAMP()獲取當前的日期和時間值A(chǔ)DD_MONTHS(date, count)在指定的日期date上增加count個月LAST_DAY(date)返回日期date所在月的最后一天MONT
36、HS_BETWEEN(date1, date2)返回date1和date2間隔多少個月NEW_TIME(date, this, other)將時間從this時區(qū)轉(zhuǎn)變?yōu)閛ther時區(qū)NEXT_DAY(date, day)返回指定日期之后下一個星期幾的日期。這里的day表示星期幾GREATEST(date1, date2, .)從日期列表中選出最早的日期377.5.4 轉(zhuǎn)換函數(shù)4在執(zhí)行運算時,經(jīng)常需要將一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型,這種轉(zhuǎn)換可以是隱式轉(zhuǎn)換,也可以是顯式轉(zhuǎn)換。 隱式轉(zhuǎn)換是在運算的過程中,由系統(tǒng)自動完成的,不需要用戶考慮,例如字符串1(即1)可以被隱式轉(zhuǎn)換為數(shù)字1。顯式轉(zhuǎn)換則需要調(diào)
37、用相應(yīng)的轉(zhuǎn)換函數(shù)來實現(xiàn),例如,使用TO_DATE函數(shù),將字符串類型轉(zhuǎn)換成日期類型。4常用的轉(zhuǎn)換函數(shù)如表7-8所示。參見教材P1604 TO_CHAR:將日期型或數(shù)值型數(shù)據(jù)轉(zhuǎn)換成字符串。4 TO_CHAR(d,fmt)將d所表示的日期型數(shù)據(jù)轉(zhuǎn)換成fmt所指定的內(nèi)容及格式。 該函數(shù)值為VARCHAR2類型。4 TO_CHAR(n,fmt)將NUMBER類型的數(shù)據(jù)n按fmt格式轉(zhuǎn)換為VARCHAR2類型數(shù)據(jù)。4 TO_DATE(s,fmt)將CHAR或VARCHAR2類型的字符串數(shù)據(jù)s轉(zhuǎn)換成DATE類型的數(shù)據(jù)。參數(shù)fmt說明s串所表示的日期格式。4 TO_NUMBER(s,fmt)將CHAR或VAR
38、CHAR2類型的數(shù)據(jù)s轉(zhuǎn)換成對應(yīng)的數(shù)值型數(shù)據(jù)4 【例7.27】將系統(tǒng)日期轉(zhuǎn)換為字符串。SELECT TO_CHAR(SYSDATE, YYYY MONTH DD)FROM DUAL;7.5.4 轉(zhuǎn)換函數(shù)397.5.5 正則表達式函數(shù)4正則表達式(Regular Expressions)是符號和元素的集合,這個集合允許用戶匹配特定的文本模式。 4正則表達式中包含了大量的元字符(Meta Character),例如,需要獲得2000年到2009年之間的年份(包括2000年和2009年),就可以使用下面的正則表達式實現(xiàn)這個功能。2000-9$|其中,其中,、0-9和和$都是元字符,都是元字符,可以匹
39、配一個字可以匹配一個字符串的開頭;符串的開頭;0-9可以匹配可以匹配0-9之間的數(shù)字;之間的數(shù)字;$可可以匹配一個字符串的結(jié)尾。以匹配一個字符串的結(jié)尾。4在正則表達式中可以使用的元字符如表7-10所示。參見教材P162407.5.6 聚合函數(shù)4表7-12 常用的聚合函數(shù)4【例7.31】對emp表進行操作,根據(jù)deptno列分組,使用聚合函數(shù),對每組進行統(tǒng)計計算SELECT deptno COUNT(*),COUCOUNT(mgr),SUM(sal),AVG(sal),MAX(sal),MIN(sal)FROM scott.empGROUP BY deptno; 函 數(shù)說 明AVG(x)返回對一
40、個數(shù)字列或計算列求取的平均值SUM(x)返回一個對數(shù)字列或計算列的匯總和MAX(x)返回一個數(shù)字列或計算列中的最大值MIN(x)返回一個數(shù)字列或計算列中的最小值COUNT(x)返回記錄的統(tǒng)計數(shù)量MEDIA(x)返回x的中間值VARIANCE(x)返回x的方差STDDEV(x)返回x的標準差417.7 事 務(wù) 處 理4事務(wù)(Transaction)是由一系列相關(guān)的SQL語句組成的最小邏輯工作單元。4Oracle系統(tǒng)以事務(wù)為單位來處理數(shù)據(jù),用來保證數(shù)據(jù)的一致性。4數(shù)據(jù)庫中的事務(wù)是工作中的一個邏輯單元,由一個或多個SQL語句組成。 427.7.1 事務(wù)的概念和特性4一組SQL語句操作要成為事務(wù),數(shù)據(jù)庫管理系統(tǒng)必須保證這組操作符合事務(wù)的4個特性,如下。原子性(Atomicity):事務(wù)必須是不可分割的原子工作單元;對于事務(wù)中的數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。一致性(Consistency):事務(wù)在完成時,必須使所有的數(shù)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 哈爾濱面試題及答案
- SHE考試題及答案
- 教學(xué)琥珀的課件
- 唐山學(xué)院《影視動畫特效與合成》2023-2024學(xué)年第二學(xué)期期末試卷
- 景德鎮(zhèn)陶瓷職業(yè)技術(shù)學(xué)院《路橋試驗檢測技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧鐵道職業(yè)技術(shù)學(xué)院《思想政治教育學(xué)原理與方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 年產(chǎn)30萬噸磷精粉建設(shè)融資投資立項項目可行性研究報告(咨詢)
- 化工自動化控制儀表作業(yè)題庫復(fù)習測試卷含答案(一)
- 五一勞動節(jié)主題課件11
- 鐵路樞紐站建設(shè)監(jiān)理合同(2篇)
- 2025年重慶市中考數(shù)學(xué)試卷真題(含標準答案)
- 農(nóng)機耕地合同協(xié)議書范本
- 精裝分包勞務(wù)合同協(xié)議書
- T/CNESA 1203-2021壓縮空氣儲能系統(tǒng)性能測試規(guī)范
- 2025年四年級下冊美術(shù)期末測試題附答案
- 2024年深圳市中考歷史試卷真題(含答案解析)
- 公司內(nèi)部文件管理規(guī)定及辦法
- DB45∕T 2418-2021 水運工程交工檢測與竣工檢測規(guī)范
- 旋流風口、球型噴口選型參數(shù)表
- 雷士燈具檢測報告
- 電子商務(wù)概論試題庫及答案(共21頁)
評論
0/150
提交評論