Oracle數(shù)據(jù)庫學(xué)習(xí)資料課件_第1頁
Oracle數(shù)據(jù)庫學(xué)習(xí)資料課件_第2頁
Oracle數(shù)據(jù)庫學(xué)習(xí)資料課件_第3頁
Oracle數(shù)據(jù)庫學(xué)習(xí)資料課件_第4頁
Oracle數(shù)據(jù)庫學(xué)習(xí)資料課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Oracle數(shù)據(jù)庫學(xué)習(xí)資料課件

?Oracle公司(甲骨文)創(chuàng)始人:LarryEllison32歲,公司提供數(shù)據(jù)庫服務(wù).

?公司成立于1977年,83年公司更名為Oracle,原名為“軟件開發(fā)實(shí)驗(yàn)室”.

?Oracle數(shù)據(jù)庫適用于大型企業(yè)

,競(jìng)爭(zhēng)對(duì)手

-微軟的SQLServer

-IBM的DB2

?目前的版本

-2.0-7.0,8.0,8i,9i,10g

Oracle的服務(wù):

我的電腦右鍵選擇治理一服務(wù)和應(yīng)用程序一服務(wù)

Orac1eServer<ORACLE_SID>數(shù)據(jù)庫服務(wù),進(jìn)程為ORACLE.exe

Oracle<HOME?NAME>TNSListener監(jiān)聽器服務(wù),進(jìn)程TNSLSNR.exe默認(rèn)端口1521、1526

Orac1eDBConsole<ORACLE_SID>對(duì)應(yīng)用于OEM

Oracle<HOME_NAME>iSQL*Plus關(guān)于于iSQL*Plus

<ORACLE_SID>——是數(shù)據(jù)庫或例程的系統(tǒng)標(biāo)識(shí)符

<H0ME_NAME>是Oracle主名目名稱

這幾個(gè)服務(wù)之間的關(guān)系:

啟動(dòng)順序:1、Oracle<HOME_NAME〉TNSListener必須啟動(dòng)

2、OracleServer<ORACLE_SID>必須啟動(dòng)

3,OracleDBConsole<ORACLESID>啟動(dòng)依靠于OracleServerVORACLESID>

SqIPIus

SqlPlus是Oracle任何版本都自帶的數(shù)據(jù)庫操作工具,使用它能夠完成大部分的數(shù)據(jù)庫

操作。

SqlPlus能夠''開始-程序玲Oracle"啟動(dòng),也能夠命令行啟動(dòng)(互動(dòng))

1.命令行啟動(dòng)sqlPlus

sqlplus用戶名/密碼@orcl

sqlplus用戶名@orcl

假如用戶是治理員要在sqlplus用戶名/密碼@主機(jī)字符串a(chǎn)ssysdba

是用戶名和密碼分隔符號(hào)

、'@"是密碼和數(shù)據(jù)庫的分隔符號(hào)

、'orcl"是數(shù)據(jù)庫的名稱,在安裝時(shí)指定

爰OracleSQL*Plus目回區(qū)|

文件魚)編輯豆)搜索⑤)選項(xiàng)幫助但)

A

SQL*Plus:Release10.2.0.1.0-Productionon星期一5月1110:06:252009

Copyright(c)1982?2005,Oracle.Allrightsreserved.

連接到:

OracleDatabase1OgEnterpriseEditionRelease10.2.0.1.0-Production

WiththePartitioning,OLAPandDataMiningoptions

SQL>showuser;

USER為"SVS"

SQL>disc

從OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production

WiththePartitioning,OLAPandDataMiningoptions斷開

SQL>showuser

USER為

SQL>connscott/tiger@oracle

已連接。

SQL>showuser;

USER為-SCOTT"

SQL>V

<

常用命令(互動(dòng))

connect切換用戶

showuser顯示當(dāng)前用戶

setlinesize1000設(shè)置行顯示長度

setpagesize1000設(shè)置分頁長度

descdept查看表結(jié)構(gòu)

selecttable_namefromuser_tables

查詢當(dāng)前用戶的表

/運(yùn)行上一條SQL語句

clearscreen清除屏幕

edit編輯

spoold:/a儲(chǔ)存輸出結(jié)果到某個(gè)位置

spooloff儲(chǔ)存終止

quit退出

list查看最后一條語句

@文件名.sql運(yùn)行外部文件中的SQL語句

Sql*plus的常用命令

是一個(gè)oracle提供的工具,使用此工具能夠完成數(shù)據(jù)庫的操作和治理。

SQL*Plus有兩種工作方式:

1、基于圖形界面的sqlplusw

2、基于命令行的sqlplus

Sql*plus中能夠執(zhí)行3種類型的命令:

1、SQL語句

SELECT*FROMtab;

2、PL/SQL語句

CREATETABLEtest(xnumber,infovarchar(20));

Commit;

編寫一個(gè)儲(chǔ)備過程,向test表中插入20條記錄。

DECLARE

xnumber:=10;

BEGIN

FORIIN1..20LOOP

INSERTINTOtestVALUES(x,'測(cè)試數(shù)據(jù)’);

x=x+i;

ENDLOOP;

END;

3、SQL*Plus內(nèi)部命令

這些命令用于設(shè)置SQL*Plus的環(huán)境或格式化輸出結(jié)果。

例如:改變EMP表里SAL列的輸出格式

COLUMNSALFORMAT$99,99HEADING'薪水';

使用SQL*Plus能夠執(zhí)行操作系統(tǒng)本身的命令:

例如:在windows下的記事本notepad,exe

HOSTnotepad.exe;

退出SQL*Plus返回操作系統(tǒng):

EXIT(QUIT)

關(guān)心提示:

HELPSET;

HELP@;

HELPED;

清除屏幕:

CLEARSRC;

SQL*PIus編輯命令

命令縮寫作用

APPENDtextAtext將text加到當(dāng)前行末端

CHANGE/old/newC/old/new將當(dāng)前行中的old改為new

CHANGE/textC/text從當(dāng)前行中刪除text

CLEARBUFFERCLBUFF清除全部行

DEL刪除當(dāng)前行

INPUTI加入一行或多行

INPUTtextItext加入由text組成的行

LISTL列出緩沖區(qū)中的全部行

LISTnLn或n列出n行

LISTlastLlast列出最后一行

LISTmnLmn列出m到n行

運(yùn)行緩沖區(qū)的命令:

RUN或/

儲(chǔ)存緩沖區(qū)中的內(nèi)容為.sql文件:

SAVEf:test;

編輯或者讀取命令文件.sql:

EDIT文件名;

在SQL文件中的注釋有3種方法:

使用SQL*Plus的REMARK命令;

使用SQL注釋分界符/**/

使用ANSI/SQL的、'一"型注釋

讀取命令文件在SQL*PLUS中:

GETf:\test.sql;

運(yùn)行.sql文件中的指令:

5丁人用或@,@使用更多

建議:盡量使用記事本編寫代碼,如此有利于修改

所需要的表

在所有的講解中所要使用到的表全部差不多上scott用戶下的表,因此必須了解在此用戶下有

那幾張表,以及每張表的作用是什么。

土OracleSQL?Plus□0B

文件9編輯?搜索⑤)選項(xiàng)(Q)幫助Of)

OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-ProductA

WiththePartitioning,OLAPandDataMiningoptions

SQL>showuser

USER為"SCOTT"

SQL>select*fromtab;

TNAMETABTVPECLUSTERID

DEPTTABLE

EMPTABLE

BONUSTABLE

SALGRADETABLE

SQL>descdept;

名稱是否為空?類型

DEPTNONOTNULLNUMBER(2)

DNAMEUARCHAR2(14)

LOCUARCHAR2(13)

SQL>V

<

幸免顯現(xiàn)漢字,因?yàn)閷?shí)際開發(fā)中容易顯現(xiàn)亂碼問題。

雇員表[empJ

F

*OracleSQL*PlusIki回兇

文件g編輯⑥搜索⑤)選項(xiàng)Q)幫助國)

SQL>descemp;人

名稱是否為空?類型

EMPNONOTNULLNUMBER(4)

ENAMEUARCHAR2(10)

JOBUARCHAR2(9)

MGRNUMBER(4)

HIREDATEDATE

SALNUMBER(7,2)

COMMNUMBER(7,2)

DEPTNONUMBER(2)

SQL>V

<j圖.

雇員表中記錄的是一個(gè)個(gè)的雇員的差不多信息。

雇員表(EMP)

No.字段類型描述

1EMPNONUMBER(4)表示雇員編號(hào),是唯獨(dú)編號(hào)

2ENAMEVARCHAR2(10)表不雇員姓名

3JOBVARCHAR2(9)表示工作職位

4MGRNUMBER(4)表示一個(gè)雇員的領(lǐng)導(dǎo)編號(hào)

5HIREDATEDATE表示雇傭日期

6SALNUMBER。,2)表示月薪,工資

7COMMNUMBER(7,2)表示獎(jiǎng)金,或者稱為傭金

8DEPTNONUMBER(2)部門編號(hào)

部門表〔dept〕

r

±OracleSQL*PlustJ回兇

文件g編輯?搜索⑤)選項(xiàng)Q)幫助的

SQL>descdept;A

名稱是否為空?類型

DEPTNONOTNULLNUMBER(2)

DNAMEUARCHAR2(14)

LOCUARCHAR2(13)

SQL>descemp;V

<j>

表示一個(gè)個(gè)具體的部門信息部門表(dept)

No.字段類型描述

IDEPTNONUMBER(2)部門編號(hào),是唯獨(dú)編號(hào)

2DNAMEVARCHAR2(l4)部門名稱

3LOCVARCHAR2(l3)部門位置

工資等級(jí)表〔SALGRADE〕

土OracleSQL?Plus

文件電)編輯更)搜索⑤)選項(xiàng)?)幫助國)

SQL>descsalgrade;

名稱是否為空?類型

GRADENUMBER

LOSALNUMBER

HISALNUMBER

SQL>select*fromsalgrade;v

<Ml>£

一個(gè)公司工資是有等級(jí)制度,那么用此表表示一個(gè)工資的等級(jí)

工資等級(jí)表(SALGRADE)

No.字段類型描述

1GRADENUMBER等級(jí)名稱

2LOSALNUMBER此等級(jí)的最低工資

3HISALNUMBER此等級(jí)的被高工資

獎(jiǎng)金表〔BONUS〕

AOracleSQL*PlustJ回區(qū)

文件g編輯②搜索⑤)選項(xiàng)?)幫助㈤

SQL>descbonus;A

名稱是否為空?類型

ENAMEUARCHAR2(10)

JOBUARCHAR2(9)

SALNUMBER

COMMNUMBER

SQL>|

V

<>

表示的是一個(gè)雇員的工資及獎(jiǎng)金

獎(jiǎng)金表〔BONUS)

No.字段類型描述

IENAMEVARCHAR2(lO)雇員姓名

2JOBVARCHAR2(9)雇職員作

3SALNUMBER雇職員資

4COMMNUMBER雇員獎(jiǎng)金(傭金)

范例:查詢每月能夠得到獎(jiǎng)金的雇員信息

,獎(jiǎng)金是comm字段

?只要字段中存在內(nèi)容,那么表示此內(nèi)容不為空[null),假如存在內(nèi)容,那么會(huì)顯示具

體的值。

?不為空的表示:字段ISNOTNULL

SELECT*FROMempWHEREcommISNOTNULL;

范例:查詢沒有獎(jiǎng)金的雇員

?沒有獎(jiǎng)金那么comm字段的內(nèi)容確信是null,格式:字段ISNULL

SELECT*FROMenipWHEREcommISNULL;

范例:要求查詢出,差不多工資大于1500,同時(shí)能夠領(lǐng)取獎(jiǎng)金的雇員信息。

?現(xiàn)在應(yīng)該是兩個(gè)條件,而且兩個(gè)條件必須同時(shí)滿足

?既然要求兩個(gè)條件全部滿足,那么必須使用AND操作符進(jìn)行條件的連接。

SELECT*FROMempWHEREsal>1500ANDcommISNOTNULL;

同時(shí)指定了兩個(gè)條件,兩個(gè)條件必須同時(shí)滿足才能夠查詢出結(jié)果。

范例:要求查詢出,差不多工資大于1500,或者能夠領(lǐng)取獎(jiǎng)金的雇員信息。

?假如要表現(xiàn)出或者的概念使用OR進(jìn)行連接,表示兩個(gè)條件有一個(gè)滿足即可。

SELECT*FROMempWHEREsal>1500ORcommISNOTNULL;

之前使用NOT能夠取反,把確實(shí)條件變?yōu)榧俚?,假的變?yōu)榇_實(shí)。

范例:要求查詢出,差不多工資不大于1500,同時(shí)不能夠領(lǐng)取獎(jiǎng)金的雇員信息。

?現(xiàn)在相當(dāng)因此整體的條件取反。

SELECT*FROMempWHERENOT(sal>1500ORcommISNOTNULL);

等價(jià)于

SELECT*FROMempWHEREsal<=1500andcommisnull;

從程序中能夠發(fā)覺,通過括號(hào)表示一組的條件。

范例:查詢差不多工資大于1500,然而小于3000的全部雇員信息。

?滿足兩個(gè):sal>1500,sal<3000

SELECT*FROMempWHEREsal>1500ANDsal<3000;

在SQL語法中,提供了一個(gè)專門的指定范疇查詢的過濾語句:BETWEEN…AND…

語法格式:

字段BETWEEN最小值A(chǔ)ND最大值

例:使用BETWEEN…AND修改之前的操作

SELECT*FROMempWHEREsalBETWEEN1500AND3000;

實(shí)際上BETWEEN...AND操作等價(jià):sal>=1500ANDsal<=3000,包含了等于的功能。

范例:查詢出在1981年雇傭的全部雇員信息

?1981年1月1日~1981年12月31日之間雇傭的雇員

?日期表示的時(shí)候要加

SELECT*FROMemp

WHEREhiredateBETWEEN'IT月-81'AND'31T2月-81';

結(jié)論:BETWEEN…AND查詢除了能夠支持?jǐn)?shù)字之外,也能夠支持日期的查詢

?隨著深入的學(xué)習(xí)會(huì)發(fā)覺,日期實(shí)際上也是以數(shù)字的形式表示出來。

范例:要求查詢出姓名是smith的雇員信息

,現(xiàn)在告訴了要查詢的名字,條件:ename='smith'

SELECT*FROMempWHEREename='smith,;

執(zhí)行以上的查詢語句之后,并可不能返回查詢結(jié)果,再次查詢數(shù)據(jù)庫表的信息,發(fā)覺smith

是采納大寫的形式表示的,在Oracle中是對(duì)大小寫敏銳的,因此現(xiàn)在在查詢的時(shí)候必須以大

寫的形式進(jìn)行條件的編寫。代碼修改如下:

SELECT*FROMempWHEREename='SMITH,;

范例:要求查詢出雇員編號(hào)是7369、7499、7521的雇員的具體信息

?假如現(xiàn)在按照之前的做法,那么設(shè)置條件要使用OR連接:

cmpno=7369ORcmpno=7499ORempno=752l

SELECT*FROMemp

WHEREcmpno=7369ORempno=7499ORcmpno=7521;

實(shí)際上,現(xiàn)在是指定了查詢的范疇,那么既然有范疇了在SQL語法中就能夠使用IN操作符完

成。

語法格式:

字段IN(值1,值2,值n)

假如現(xiàn)在要求查詢的內(nèi)容不在此范疇之中,那么能夠使用NOTIN,語法如下:

字段NOTIN(值1,值2,..值n)

范例:使用以上的格式進(jìn)行修改

SELECT*FROMemp

WHEREempnoIN(7369,7499,7521);

范例:要求查詢出雇員編號(hào)不是7369、7499、7521的雇員的具體信息一

SELECT*FROMemp

WHEREempnoNOTIN(7369,7499,7521);

另外,需要說明的是,使用IN操作符不光能夠用在數(shù)字上,也能夠用在字符串的信息上。

范例:要求查詢出姓名是SMITH、ALLEN、KING的雇員信息

SELECT*FROMemp

WHEREenameIN('SMITH'.'ALLEN'/KING');

提示:

假如在指定的查詢范疇中指定了額外的內(nèi)容,那么不阻礙程序運(yùn)行。

SELECT*FROMemp

WHEREenameIN('SMITH','ALLEN','KING','$#VC');

在一樣的日常見到的站點(diǎn)中經(jīng)常發(fā)覺有模糊查找功能,即:輸入一個(gè)指定的關(guān)鍵字,把符合

的內(nèi)容全部查詢出來,在SQL中使用LIKE語句完成。

在使用LIKE語句的時(shí)候要注意通配符的問題,在LIKE語句中要緊使用以下兩種通配符:

?、、%":能夠匹配任意長度的內(nèi)容

?:能夠匹配一個(gè)長度的內(nèi)容

范例:查詢出所有雇員姓名中第二個(gè)字母包含"M"的雇員信息

SELECT*FROMemp

WHEREenameLIKE'_M%';

范例:查詢出雇員姓名中包含字母M的雇員信直

?現(xiàn)在,表示能夠在任意的位置上顯現(xiàn)字母M

SELECT*FROMempWHEREenameLIKE'%M%';

然而,要提醒大伙兒的是:''假如在使用LIKE的時(shí)候沒有指定查詢的關(guān)鍵字,那么表示查

詢?nèi)?

SELECT*FROMemp

WHEREenameLIKE'%%';

使用LIKE還能夠方便的進(jìn)行日期的查找功能。

范例:要求查詢出在1981年雇傭的雇員信息

SELECT*FROMemp

WHEREhiredateLIKE'%81%';

范例:查詢工資中包含6的雇員信息

SELECT*FROMemp

WHEREsalLIKE'%6%';

在操作條件中還能夠使用:>、>=、=、<、<=等運(yùn)算符號(hào)

不等于符號(hào):在SQL中假如要想使用不等于符號(hào),能夠有兩種形式:、'<>''、"!="

范例:查詢雇員編號(hào)不是7369的雇員信息

?使用'、<>”完成

SELECT*FROMempWHEREempno<>7369;

?使用''!=〃竟最一

SELECT*FROMempWHEREcmpno!=7369;

對(duì)結(jié)果進(jìn)行排序(ORDERBY子句)(重點(diǎn))

在SQL中能夠使用ORDERBY子句對(duì)查詢的結(jié)果進(jìn)行排序,例如,現(xiàn)在使用查詢?nèi)康恼Z句:

SELECT*FROMemp;

現(xiàn)在,從查詢結(jié)果能夠發(fā)覺,是按照雇員的編號(hào)進(jìn)行排序的,那么現(xiàn)在假如要對(duì)使用指定的

列進(jìn)行排序,那么就必須使用ORDERBY語句,語法格式如下:

SELECT(DISTINCT)*|具體的列別名

FROM表名稱

{WHERE條件(s)}

{ORDERBY排序的字段1,排序的字段2ASC|DESC}

ASC表示升序、DESC表示降序

范例:要求按照工資由低到高排序

SELECT*FROMempORDERBYsal;

之前是按照由低到高的順序完成,是采納的升序的形式,現(xiàn)在要求使用降序的形式完成。實(shí)

際上假如在排序的時(shí)候沒有指定排序規(guī)那么,那么默認(rèn)的排序規(guī)那么是升序排列。

SELECT*FROMempORDERBYsalASC;

要想使用降序的方式完成,那么使用DESC即可「

SELECT*FROMempORDERBYsalDESC;

r

±OracleSQL*Plus(kJ回兇

文件9蝙輯?搜索⑤選項(xiàng)⑥)幫助國)

SQL>select*FromempA

2orderbysaldesc;

EMPNOENAMEJOBMGRHIREDATESAL

7839KINGPRESIDENT17-11月-815000

7902FORDANALYST756603-12月-813000

7788SCOTTANALYST756619-4月-873000

7566JONESMANAGER7839G2-4月-812975

7698BLAKEMANAGER7839G1-5月-812850

7782CLARKMANAGER7839@9-6月-812450

7499ALLENSALESMAN769820-2月-811600

7844TURNERSALESMAN769808-9月-811500

7934MILLERCLERK778223-1月-821300

7521WARDSALESMAN769822-2月-811250

7654MARTINSALESMAN769828-9月-811250

7876ADAMSCLERK778823-5月-871100

7900JAMESCLERK7698@3-12月-81950

7369SMITHCLERK790217-12月-80800

已選擇1哧。

V

<

范例:要求查詢出10部門的所有雇員信息,查詢的信息按照工資由高到低排序,假如工資相

等,那么按照雇傭日期由早到晚排序。

?現(xiàn)在存在兩個(gè)排序條件,第一個(gè)是降序,第二個(gè)升序

SELECT*FROMemp

WHEREdcptno=10ORDERBYsalDESC.hircdatcASC;

排序的操作確信是放在整個(gè)SQL語句的最后執(zhí)行。

單行函數(shù)(重點(diǎn))

數(shù)據(jù)庫系統(tǒng)中,每個(gè)數(shù)據(jù)庫之間唯獨(dú)不同的最大區(qū)別點(diǎn)就在與函數(shù)的支持上,使用函數(shù)能夠

完成一系列的操作功能。

單行函數(shù)語法:

function_namc(column|cxprcssion,[arg1,arg2,...])

參數(shù)說明:

?function_namc:函數(shù)名稱

?column:數(shù)據(jù)庫列名

,expression:字符串或運(yùn)算表達(dá)式

?argl,arg2:在函數(shù)中使用參數(shù)

單行函數(shù)分類:

?字符函數(shù):同意字符輸入同時(shí)返回字符或數(shù)值

?數(shù)值函數(shù):同意數(shù)值輸入并返回?cái)?shù)值

?日期函數(shù):對(duì)日期型數(shù)據(jù)進(jìn)行操作

?轉(zhuǎn)換函數(shù):從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型

?通用函數(shù):NVL函數(shù)、DECODE函數(shù)

字符函數(shù)

Oracle中的dual表

Dual是Oracle中的一個(gè)實(shí)際存在的表,任何用戶均可讀取,常用在沒有目標(biāo)表的Select

語句塊中,用來構(gòu)成select的語法規(guī)那么,oracle保證dual里面永久只有一條記錄。這是因

為ORACLE對(duì)DUAL表的操作做了一些內(nèi)部處理,盡量保證DUAL表中只返回一條記錄.因此這寫

內(nèi)部操作是不可見的.

以下是dual的一些使用方法:

1、查看當(dāng)前用戶,能夠在SQLPlus中執(zhí)行下面語句

selectuserfromdual;

2、用來調(diào)用系統(tǒng)函數(shù)

selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss*)fromdual;--獲得當(dāng)前系統(tǒng)時(shí)刻

selectSYS_CONTEXT('USERENV','TERMINAL')fromdual;--獲得主機(jī)名

selectSYS-CONTEXTCUSERENVManguage')fromdual;--獲得當(dāng)前l(fā)ocale

selectdbms_random.randomfromdual;--獲得一個(gè)隨機(jī)數(shù)

3、能夠用做運(yùn)算器

select7*9fromdual;

1.AClI(x)返回字符x的ASCII碼

selectascii('a')fromdual;

2.求ACSII(H),ASCIICA"),ASCn(t0)),ASCII('XYZ)'的值

3.CHR(X)返回ASCII碼為X的字符

4.CONCAT(x,y)字符串拼接函數(shù)

selectconcat(concat(ename,'isa'),job)fromemp;

5.INITCAP(x)首字母大寫

selectinitcap(ename)fromemp;

6.INSTR(x,y[,n][,m])確定y在x中的位置。n是起始查找的位置,m第幾次顯現(xiàn)的位置。

selectinstr('HelloWorld2)fromdual;

selectinstr('HelloWorld!,,,l,,2,3)fromdual;

7.LENGTH(x)字符串長度

selectename,length(ename)fromempwhereempno=7698;

8.LOWER(x)轉(zhuǎn)換小寫

selectlower(ename)fromcmp;

9.UPPER(x)轉(zhuǎn)換大寫

10.LPAD(x,n[,y])在字符串x的左邊補(bǔ)充字符串y,得到總長為n個(gè)字符的字符串??蛇x參

數(shù)y用于指定在x左邊補(bǔ)充的字符串;省略參數(shù)y,默認(rèn)值為空串。

selectlpad(ename,15,'$#(§)')fromemp:

11.RPAD(x,n[,y])

selectrpad(ename,15,'@#$')fromemp;

12.LTRIM(x[,y])從字符串x的左邊截去包含在字符串y中的字符。假如不指定參數(shù)y,那

么默認(rèn)截去空格。

selectItrimCabcdab'/a1)fromdual;

13.RTIME(x[,y])

14.trim(x)去除左右空格

15.SUNSTR(x,n[,m])返回字符串x中的一個(gè)子串,那個(gè)子串從字符串x的第n字符開始,

截取參數(shù)m個(gè)字符。

selectsubstr('abcsdfsdwf^',3,4)fromdual;

16.replace(x,y,z)將字符串x中所具有的子串y用子串z替換

selectreplace('jackandjue'J\'br)fromdual;

19.TRANSLATE(string,if,then)依照"if"中字符的位置,并檢查"then"的相同位置,然

后用該位置的字符替換"string”中的字符。

selecttranslate(enamc,'AE','121)fromcmp;

是專門處理字符的,例如,能夠?qū)⒋髮懽址優(yōu)樾?,還能求出字符的長度。

范例:將小寫字母變?yōu)榇髮懽帜?/p>

SELECTUPPER('smith')FROMDUAL;

范例:一樣用戶在查詢一個(gè)人姓名的時(shí)候有可能考慮到那個(gè)人的姓名是大寫字母存的依舊小

寫字母儲(chǔ)存的呢?

?那么現(xiàn)在,為了方便用戶的使用就能夠使用upper函數(shù)完成。

SELECT*FROMempWHEREename=UPPER('Smith,);

還能夠使用lower。函數(shù)將一個(gè)字符串變?yōu)樾懽帜副硎尽?/p>

SELECTLOWER('HELLOWORLD')FROMdual;

還能夠使用initcap。函數(shù)將單詞的第一個(gè)字母大寫

SELECT1NITCAPCHELLOWORLD')FROMdual;

范例;使用此函數(shù)將雇員表中的雇員姓名變?yōu)殚_頭字母大寫

SELECTINITCAP(ename)FROMemp;

字符串除了能夠使用'、『連接之外,還能夠使用CONCATO函數(shù)進(jìn)行連接操作.

SELECTCONCAT('hello'world')FROMDUAL;

現(xiàn)在差不多完成了連接,然而此種方式確信不如'、『'好使。

在字符函數(shù)中能夠進(jìn)行字符串的截取、求出字符串的長度、進(jìn)行指定內(nèi)容的替換

-字符串截?。簊ubstr()

,字符串長度:length。

?內(nèi)容替換:replace。

SELECTsubstrChello',1,3)一截取字符串,

lengthChello')-字符串長度,

replace('hello',T,'x')--字符串替換

FROMDUAL;

然而在substr()函數(shù)的時(shí)候有一點(diǎn)需要提醒大伙兒注意,跟面試有關(guān):

?Oracle中substr()函數(shù)的截取點(diǎn)是從0依舊從1開始。

I-從0或從1開始成效是一樣的,因?yàn)镺racle比較智能。

范例:要求顯示所有雇員的姓名及姓名的后三個(gè)字符

?因?yàn)楣蛦T姓名的字符串長度不一樣,因此只能求出整個(gè)的長度再減去2,如此進(jìn)行截取操

作。

SELECTename,SUBSTR(enamc,LENGTH(ename)-2)FROMcmp;

現(xiàn)在,功能差不多實(shí)現(xiàn)了,然而操作比較苦惱。實(shí)際上在substr()函數(shù)中提供了一種專門方

便的機(jī)制,能夠采納倒著截取的方式,只要輸入的位置是負(fù)數(shù)就表示倒著進(jìn)行。

SELECTename,SUBSTR(ename,-3,3)FROMemp;

數(shù)值函數(shù)

數(shù)值函數(shù)只要是包含以下幾種:

?四舍五入:ROUND0

?截?cái)嘈?shù)位:TRUNC。

?取余(取模):MOD

范例:執(zhí)行四舍五入操作

SELECTROUND(789.536)FROMdual;

因此,在ROUND。函數(shù)中也能夠指定四舍五入的位數(shù)

范例:保留兩位小數(shù)

SELECTROUND(789.536,2)FROMdual;

在使用ROUND。函數(shù)中還有一點(diǎn)專門有意思,能夠直截了當(dāng)對(duì)整數(shù)進(jìn)行四舍五入的進(jìn)位。

SELECTROUND(789.536,-2)FROMdual;

TRUNC()與ROUND。不同的是,在TRUNC()操作中,可不能保留任何的小數(shù),而且小數(shù)點(diǎn)

也可不能執(zhí)行四舍五入的操作。

范例:驗(yàn)證TRUNCO函數(shù)

SELECTTRUNC(789.536)FROMDUAL;

范例:通過TRUNC()也能夠指定小數(shù)點(diǎn)的保留反藪-

SELECTTRUNC(789.536,2)FROMDUAL;

范例:使用負(fù)數(shù)表示位數(shù)

SELECTTRUNC(789.536,-2)FROMDUAL;

范例:使用MOD()函數(shù)能夠進(jìn)行取余的操作

SELECTMOD(10,3)FROMDUAL;

日期函數(shù)

函數(shù)功能

Add_months(x,n)返回日期X加上n個(gè)月所對(duì)應(yīng)的日期。N為正數(shù),那么返回值表示x

之后的日期:n為負(fù)數(shù),那么返回值表示x之前的日期。

current_date返回當(dāng)前會(huì)話時(shí)區(qū)所對(duì)應(yīng)的日期時(shí)刻

curren_timestamp[(x)]返回當(dāng)前會(huì)話時(shí)區(qū)所對(duì)應(yīng)的日期時(shí)刻,可選參數(shù)x表示精度,假如

不指定參數(shù)x,那么默認(rèn)精度值為6

dbtimezone返回?cái)?shù)據(jù)庫所在的時(shí)區(qū)

extract(yearmonth|dayfromx)從日期X中摘取所需要的年或月或日數(shù)據(jù)

last_day(x)返回日期X所在月份的最后一天的日期

localtimestampE(x)]返回當(dāng)前會(huì)話時(shí)區(qū)所對(duì)應(yīng)的日期時(shí)刻,可選參數(shù)X表示精度,假如

不指定參數(shù)X,那么默認(rèn)精度值為6

months_between(x,y)返回日期x和日期y兩個(gè)日期之間相差的月數(shù)

next_day(x,week)返回日期X后的由week指定的星期幾所對(duì)應(yīng)的日期

round(x,[fmt])返回日期x的四舍五入結(jié)果。Fmt能夠

取‘YEAR'MONTH','DAY'三者之一

sysdate返回當(dāng)前系統(tǒng)的日期時(shí)刻

systimestamp返回當(dāng)前系統(tǒng)的日期時(shí)刻

trunk(x,[fmt])返回截?cái)嗳掌赬時(shí)刻數(shù)據(jù)。Fmt能夠取'YEAR'MONTH'DAY'

三者之一

1.SYSDATE返回當(dāng)前的日期和時(shí)刻

SQL>selectsysdatefromdual;

2.add_months(x,y)在x上力口上y個(gè)月

SQL>selecthiredate,add_months(hiredate,l)fromemp

2whereename=,SMITH,;

3.1ast_day(時(shí)刻)返回當(dāng)前時(shí)刻所在月的最后一天

SQL>selectsysdate,last_day(sysdate)fromdual;

4.months_between(d1,d2)返回日期dl和d2之間的月份數(shù)。假如dl晚于d2,結(jié)果為正,否

那么返回負(fù)數(shù)

SQL>selectmonths_between(sysdate,hiredate)fromemp;

5.next_date(x,week)返回x后由week指定的第一個(gè)工作日

SQL>selectsysdate,next_day(sysdate,‘星期三')fromdual;

SQL>selectsysdate,next_day(sysdate,3)fromdual

6.extract(year|month|dayfromx)抓取日期的指定部分

SQL>selectextract(yearfromsysdate)fromdual;

SQL>selectextract(monthfromsysdate)fromdual;

SQL>selectextract(dayfromto_date(,23-03-2010,/dd-mm-yy,))fromdual;

7.round(x[,fmt])日期的四舍五入

SQL>selectround(to_date(,16-3月?08'),year)fromdual;

SQL>selectround(to_date(,16-3月?08'),'month')fromdual;

SQL>selectround(to_date(116-3月-081)/day')fromdual;

格式符說明舉例

yyyy年份2020

mm月份02

month

mon

dd天28

day星期幾星期五

am/pm上午/下午

hh/hhl2/hh24小時(shí)2:30

mi分鐘30

ss秒

rr能夠把yy替換成rr有不同的成效

fm去掉數(shù)字前面的零

,觀看結(jié)果

selectto_char(sysdate,'yyyy-mm-ddhh:mi:sspm')fromdual;

selectto_char(sysdate,'yyyy-mon-ddhh24:mi:sspm')fromdual;

selectto_char(sysdate,'yyyy-month-dddayhh24:mi:ss')fromdual;

selectto_char(sysdate,"'公元"yyyy"年"-month-dd"日"dayhh24:mi:ss')fromdual;

selectto_char(sysdate,'fmyyyy-mm-ddhh:mi:sspm')fromdual;

selectto_char(to_date('98-02-23','rr-mm-dd'),'yyyy-mm-dd')fromdual;

在Oracle中提供了專門多與日期操作相關(guān)的函數(shù),包括加減日期等等。然而在日期進(jìn)行加或

減結(jié)果的時(shí)候有一些規(guī)律:

?日期-數(shù)字=日期

?日期+數(shù)字=日期

?日期-日期=數(shù)字(天數(shù))

范例:顯示10部門雇員進(jìn)入公司的星期數(shù)

?假如要想完成此操作,那么第一必須明白當(dāng)前的日期,在Oracle中能夠通過以下的操作

求出當(dāng)前日期,使用sysdate表示。

SELECTSYSDATEFROMDUAL;

?求出星期數(shù):當(dāng)前日期-雇傭日期=天數(shù)/7=星期數(shù)-

SELECTempno,ename,ROUND((SYSDATE-hiredate)/7)FROMemp;

在Oracle中提供了以下的日期函數(shù)支持:

?MONTHS_BETWEEN():求出給定日期范疇的月數(shù)

?ADD_MONTHS():在指定日期上加上指定的月數(shù),求出之后的日期

?NEXT_DAY():下一個(gè)的今天是那一個(gè)日期

?LAST_DAY():求出給定日期的最后一天日期

范例:驗(yàn)證MONTHSBETWEEN。

SELECTempno,ename,MONTHS_BETWEEN(sysdate,hiredate)FROMemp;

程序查詢時(shí)包含了小數(shù)點(diǎn),能夠使用ROUND。進(jìn)行四舍五入的操作。

范例:驗(yàn)證ADDMONTHS()函數(shù)

SELECTADD_MONTHS(SYSDATE,4)FROMDUAL;

范例:驗(yàn)證NEXTDAY()函數(shù)一

?此函數(shù)求出下一次給定日期數(shù)

SELECTNEXT_DAY(SYSDATE:星期一)FROMDUAL;

范例:驗(yàn)證LASTDAY()函數(shù)一

?求出一個(gè)日期的最后一天

SELECTLAST_DAY(SYSDATE)FROMDUAL;

轉(zhuǎn)換函數(shù)

轉(zhuǎn)換函數(shù)要緊有以下幾種:

?TO_CHAR():轉(zhuǎn)換成字符串

?TO_NUMBER():轉(zhuǎn)換成數(shù)字

?TO_DATE():轉(zhuǎn)換成日期

范例:查詢所有雇員的雇員編號(hào)、姓名、雇傭日期

SELECTcnipno,enamc.hircdatcFROMemp;

然而現(xiàn)在要求能夠?qū)⒛辍⒃?、日進(jìn)行分開,現(xiàn)在就能夠使用TO_CHAR()函數(shù)進(jìn)行拆分,拆

分的時(shí)候必須指定拆分的通配符:

,年:y,年是四位的數(shù)字,因此使用yyyy表示

?月:m,月是二位的數(shù)字,因此使用mm表示

?日:d,日是二位的數(shù)字,因此使用dd表示

還能夠使用to_char()函數(shù)進(jìn)行日期顯示的轉(zhuǎn)換功能。

?Oracle中默認(rèn)的日期格式:19-4月-87

?中國的喜愛格式:1987-04-19

從運(yùn)行結(jié)果中能夠發(fā)覺,假如是5月,那么會(huì)使用05表示。那么那個(gè)0稱為前導(dǎo)0,假如不期

望顯示前導(dǎo)0的話,那么能夠使用fm去掉這些0。

to_char()函數(shù)除了能夠用在日期上,也能夠用在數(shù)字上。

雙引號(hào)("):在Oracle中單雙引號(hào)含義區(qū)別

雙引號(hào)被用來將包含特定或者空格列別名括起來

SELECTempno'',ename,salas''工資〃FROMemp;

雙引號(hào)還被用來將文本放入日期格式

SELECTTO_CHAR(sysdate,‘fmyyyy“年“mm“月“dd“日“')

FROMDUAL;

例如:要查詢?nèi)康墓蛦T編號(hào)、姓名、工資

SELECTempno,ename,salFROMemp;

最好在數(shù)字中加入一些符號(hào),以分割太長的數(shù)字,一樣中國使用,因此,現(xiàn)在,能夠

使用to_char()函數(shù)進(jìn)行格式化:

?9:表示一位數(shù)字

SELECTempno,ename,TO_CHAR(sal,*99,999')FROMemp;

假如,現(xiàn)在,期望數(shù)字能夠明確的表示出區(qū)域,能夠使用以下兩種符號(hào):

,$:表示美元

SELECTempno,ename,TO_CHAR(saI,'$99,9991)

FROMemp;

?L:表示Local的縮寫,以本地的語言進(jìn)行金額的顯示

SELECTempno,ename,TO_CHAR(sal,,199,999')

FROMemp;

TO_NUMBER是能夠?qū)⒆址優(yōu)閿?shù)字的一種函數(shù)。

SELECTTO_NUMBER('123')+TO_NUMBER('123')FROMDUAL;

以上就表示把字符串變?yōu)閿?shù)字,之后進(jìn)行數(shù)字的加法操作。

TO_DATE()函數(shù)能夠?qū)⒁粋€(gè)字符串變?yōu)镈ATE型的數(shù)據(jù)。

?例如:有2009-2-16是一個(gè)字符串,現(xiàn)在要變?yōu)镈ATE類型。

SELECTTO_DATE('2009-02-16','yyyy-mm-dd')

FROMDUAL;

SELECTTO_CHAR(TO_DATE(,2009-02-16','yyyy-mm-dd'),'yyyy"年"mm"月"dd"H"')

FROMDUAL

通用函數(shù)

范例:要求求出每個(gè)雇員的年薪

,求出年薪的時(shí)候應(yīng)該加上獎(jiǎng)金的,格

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論