




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023國家能源投資集團(tuán)有限責(zé)任公司第一批社會(huì)招聘筆試備考試題及完整答案詳解一套
- 2025年黑龍江省五常市輔警招聘考試試題題庫完整答案詳解
- 2025年Z世代消費(fèi)趨勢(shì)預(yù)測(cè):新消費(fèi)品牌發(fā)展前景深度報(bào)告
- 2025年K2學(xué)校STEM課程實(shí)施效果評(píng)估與教育評(píng)價(jià)體系創(chuàng)新實(shí)踐報(bào)告
- 慢性阻塞性肺疾病診治指南變遷2025
- 《模擬導(dǎo)游教程》中職旅游管理專業(yè)全套教學(xué)課件
- 憲法學(xué)試題及參考答案
- 廣東省清遠(yuǎn)市佛岡縣高中聯(lián)考2024-2025學(xué)年高一下學(xué)期6月月考英語試卷
- 2025年重慶市西南大學(xué)附屬中學(xué)中考三模道德與法治試卷(含答案)
- 2024-2025福建省廈門市集美中學(xué)高一下6月英語月考英語試卷
- 施工項(xiàng)目資料管理試題及答案
- 2025年安全知識(shí)競(jìng)賽題庫及答案(共150題)
- 第六單元 年、月、日 單元測(cè)試(含答案)2024-2025學(xué)年三年級(jí)下冊(cè)數(shù)學(xué)人教版
- 國家開放大學(xué)2025年《機(jī)電控制工程基礎(chǔ)》形考任務(wù)1-4答案
- 合資公司的組織結(jié)構(gòu)與運(yùn)營規(guī)范
- 成都設(shè)計(jì)咨詢集團(tuán)有限公司2025年社會(huì)公開招聘(19人)筆試參考題庫附帶答案詳解
- 基層醫(yī)療衛(wèi)生機(jī)構(gòu)信息化建設(shè)中的醫(yī)療信息化服務(wù)創(chuàng)新與產(chǎn)業(yè)鏈協(xié)同發(fā)展路徑報(bào)告
- 海南省歷年中考作文題與審題指導(dǎo)(2003-2023)
- 幼兒照護(hù)知到課后答案智慧樹章節(jié)測(cè)試答案2025年春鐵門關(guān)職業(yè)技術(shù)學(xué)院
- 2025衢州輔警考試題庫
- 出差工作總結(jié)模版
評(píng)論
0/150
提交評(píng)論