版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.:.;Oracle的歷史Oracle 公司( 甲骨文 ) 開創(chuàng)人 : Larry Ellison 32歲,公司提供數(shù)據(jù)庫效力.公司成立于 1977 年, 83 年公司更名為 Oracle ,原名為軟件開發(fā)實(shí)驗(yàn)室.Oracle 數(shù)據(jù)庫適用于大型企業(yè)競(jìng)爭(zhēng)對(duì)手微軟的SQLServerIBM 的DB2目前的版本2.07.0 , 8.0 , 8i , 9i , 10gOracle的效力:我的電腦右鍵選擇管理-效力和運(yùn)用程序效力OracleServer數(shù)據(jù)庫效力,進(jìn)程為ORACLE.exeOracleTNSListener監(jiān)聽器效力,進(jìn)程TNSLSNR.exe默許端口1521、1526OracleDBC
2、onsole對(duì)運(yùn)用于OEMOracleiSQL*Plus對(duì)于于iSQL*Plus是數(shù)據(jù)庫或例程的系統(tǒng)標(biāo)識(shí)符是Oracle主目錄稱號(hào)這幾個(gè)效力之間的關(guān)系:?jiǎn)?dòng)順序:1、OracleTNSListener必需啟動(dòng) 2、OracleServer必需啟動(dòng) 3、OracleDBConsole啟動(dòng)依賴于OracleServerSqlPlusSqlPlus是Oracle任何版本都自帶的數(shù)據(jù)庫操作工具,運(yùn)用它可以完成大部分的數(shù)據(jù)庫操作。SqlPlus可以“開場(chǎng)程序Oracle啟動(dòng),也可以命令行啟動(dòng)互動(dòng)1.命令行啟動(dòng)sqlPlussqlplus 用戶名/密碼orcl或sqlplus 用戶名orcl假設(shè)用戶是管理
3、員要在sqlplus 用戶名/密碼主機(jī)字符串 as sysdba“/是用戶名和密碼分隔符號(hào)“是密碼和數(shù)據(jù)庫的分隔符號(hào)“orcl是數(shù)據(jù)庫的稱號(hào),在安裝時(shí)指定常用命令互動(dòng)connect 切換用戶show user 顯示當(dāng)前用戶set linesize 1000 設(shè)置行顯示長度set pagesize 1000 設(shè)置分頁長度desc dept 查看表構(gòu)造 select table_name from user_tables查詢當(dāng)前用戶的表/ 運(yùn)轉(zhuǎn)上一條SQL語句 clear screen 去除屏幕edit 編輯spool d:/a 保管輸出結(jié)果到某個(gè)位置spool off 保管終了quit 退出li
4、st 查看最后一條語句 文件名.sql 運(yùn)轉(zhuǎn)外部文件中的SQL語句Sql*plus的常用命令是一個(gè)oracle提供的工具,運(yùn)用此工具可以完成數(shù)據(jù)庫的操作和管理。SQL*Plus有兩種任務(wù)方式:基于圖形界面的sqlplusw基于命令行的sqlplusSql*plus 中可以執(zhí)行3種類型的命令:SQL語句SELECT * FROM tab;PL/SQL語句CREATE TABLE test(x number,info varchar(20);Commit;編寫一個(gè)存儲(chǔ)過程,向test表中插入20條記錄。DECLAREx number :=10;BEGINFOR I IN 1.20 LOOPINSE
5、RT INTO test VALUES (x,測(cè)試數(shù)據(jù));x=x+i;END LOOP;END;SQL*Plus內(nèi)部命令這些命令用于設(shè)置SQL*Plus的環(huán)境或格式化輸出結(jié)果。例如:改動(dòng)EMP表里SAL列的輸出格式COLUMN SAL FORMAT $99,99 HEADING 薪水;運(yùn)用SQL*Plus可以執(zhí)行操作系統(tǒng)本身的命令:例如:在下的記事本notepad.exeHOST notepad.exe; 退出SQL*Plus前往操作系統(tǒng):EXIT (QUIT) 協(xié)助 提示:HELP SET;HELP ;HELP ED;去除屏幕:CLEAR SRC;SQL*Plus編輯命令命令縮寫作用APPE
6、ND texttext將text加到當(dāng)前行末端CHANGE /old/newC /old/new將當(dāng)前行中的old改為newCHANGE /textC /text從當(dāng)前行中刪除textCLEAR BUFFERCL BUFF去除全部行DEL刪除當(dāng)前行INPUT I參與一行或多行INPUT textI text參與由text組成的行LISTL列出緩沖區(qū)中的全部行LIST nL n或 n列出n行LIST lastL last列出最后一行LIST m nL m n列出m到n行運(yùn)轉(zhuǎn)緩沖區(qū)的命令:RUN 或/保管緩沖區(qū)中的內(nèi)容為.sql文件:SAVE f:test;編輯或者讀取命令文件.sql:EDIT
7、文件名;在SQL文件中的注釋有3種方法:運(yùn)用SQL*Plus的REMARK命令;運(yùn)用SQL注釋分界符/*/運(yùn)用ANSI/SQL的“-型注釋讀取命令文件在SQL*PLUS中:GET f:test.sql;運(yùn)轉(zhuǎn).sql文件中的指令:START或,運(yùn)用更多建議:盡量運(yùn)用記事本編寫代碼,這樣有利于修正。所需求的表在一切的講解中所要運(yùn)用到的表全部都是scott用戶下的表,所以必需了解在此用戶下有那幾張表,以及每張表的作用是什么。防止出現(xiàn)漢字,由于實(shí)踐開發(fā)中容易出現(xiàn)亂碼問題。雇員表emp 雇員表中記錄的是一個(gè)個(gè)的雇員的根本信息。雇員表EMP No. 字段類型 描畫 1 EMPNO NUMBER(4) 表示
8、雇員編號(hào),是獨(dú)一編號(hào)2 ENAME VARCHAR2(10) 表示雇員姓名3 JOB VARCHAR2(9) 表示任務(wù)職位4 MGR NUMBER(4) 表示一個(gè)雇員的指點(diǎn)編號(hào)5 HIREDATE DATE 表示雇傭日期6 SAL NUMBER(7,2) 表示月薪,工資7 COMM NUMBER(7,2) 表示獎(jiǎng)金,或者稱為傭金8 DEPTNO NUMBER(2) 部門編號(hào)部門表dept 表示一個(gè)個(gè)詳細(xì)的部門信息 部門表dept No. 字段類型 描畫 1 DEPTNO NUMBER(2) 部門編號(hào),是獨(dú)一編號(hào)2 DNAME VARCHAR2(14) 部門稱號(hào)3 LOC VARCHAR2(13
9、) 部門位置工資等級(jí)表SALGRADE一個(gè)公司工資是有等級(jí)制度,那么用此表表示一個(gè)工資的等級(jí) 工資等級(jí)表SALGRADE No. 字段類型 描畫 1 GRADE NUMBER 等級(jí)稱號(hào)2 LOSAL NUMBER 此等級(jí)的最低工資3 HISAL NUMBER 此等級(jí)的最高工資獎(jiǎng)金表BONUS 表示的是一個(gè)雇員的工資及獎(jiǎng)金獎(jiǎng)金表BONUS No. 字段類型 描畫 1 ENAME VARCHAR2(10) 雇員姓名2 JOB VARCHAR2(9) 雇員任務(wù)3 SAL NUMBER 雇員工資4 COMM NUMBER 雇員獎(jiǎng)金傭金 范例:查詢每月可以得到獎(jiǎng)金的雇員信息 獎(jiǎng)金是comm字段 只需字段
10、中存在內(nèi)容,那么表示此內(nèi)容不為空null,假設(shè)存在內(nèi)容,那么會(huì)顯示詳細(xì)的值。 不為空的表示:字段 IS NOT NULLSELECT * FROM emp WHERE comm IS NOT NULL ; 范例:查詢沒有獎(jiǎng)金的雇員 沒有獎(jiǎng)金那么comm字段的內(nèi)容一定是null,格式:字段 IS NULLSELECT * FROM emp WHERE comm IS NULL ; 范例:要求查詢出,根本工資大于1500,同時(shí)可以領(lǐng)取獎(jiǎng)金的雇員信息。 此時(shí)應(yīng)該是兩個(gè)條件,而且兩個(gè)條件必需同時(shí)滿足 既然要求兩個(gè)條件全部滿足,那么必需運(yùn)用AND操作符進(jìn)展條件的銜接。SELECT * FROM emp
11、WHERE sal1500 AND comm IS NOT NULL ; 同時(shí)指定了兩個(gè)條件,兩個(gè)條件必需同時(shí)滿足才可以查詢出結(jié)果。 范例:要求查詢出,根本工資大于1500,或者可以領(lǐng)取獎(jiǎng)金的雇員信息。 假設(shè)要表現(xiàn)出或者的概念運(yùn)用OR進(jìn)展銜接,表示兩個(gè)條件有一個(gè)滿足即可。SELECT * FROM emp WHERE sal1500 OR comm IS NOT NULL ; 之前運(yùn)用NOT可以取反,把真的條件變?yōu)榧俚模俚淖優(yōu)檎娴?。范例:要求查詢出,根本工資不大于1500,同時(shí)不可以領(lǐng)取獎(jiǎng)金的雇員信息。 此時(shí)相當(dāng)于是整體的條件取反。SELECT * FROM emp WHERE NOT (s
12、al1500 OR comm IS NOT NULL); 等價(jià)于SELECT * FROM emp WHERE sal 1500 ,sal 1500 AND sal=1500 AND sal、=、=、=等計(jì)算符號(hào)不等于符號(hào):在SQL中假設(shè)要想運(yùn)用不等于符號(hào),可以有兩種方式:“、“!= 范例:查詢雇員編號(hào)不是7369的雇員信息 運(yùn)用“完成SELECT * FROM emp WHERE empno7369 ; 運(yùn)用“!=完成SELECT * FROM emp WHERE empno!=7369 ; 對(duì)結(jié)果進(jìn)展排序ORDER BY子句重點(diǎn)在SQL中可以運(yùn)用ORDER BY子句對(duì)查詢的結(jié)果進(jìn)展排序,例
13、如,如今運(yùn)用查詢?nèi)康恼Z句:SELECT * FROM emp ; 此時(shí),從查詢結(jié)果可以發(fā)現(xiàn),是按照雇員的編號(hào)進(jìn)展排序的,那么此時(shí)假設(shè)要對(duì)運(yùn)用指定的列進(jìn)展排序,那么就必需運(yùn)用ORDER BY語句,語法格式如下:SELECT DISTINCT * | 詳細(xì)的列別名 FROM 表稱號(hào)WHERE 條件(s) ORDER BY 排序的字段1,排序的字段2 ASC|DESC ASC表示升序、DESC表示降序范例:要求按照工資由低到高排序SELECT * FROM emp ORDER BY sal ; 之前是按照由低到高的順序完成,是采用的升序的方式,如今要求運(yùn)用降序的方式完成。實(shí)踐上假設(shè)在排序的時(shí)候沒有
14、指定排序規(guī)那么,那么默許的排序規(guī)那么是升序陳列。SELECT * FROM emp ORDER BY sal ASC ; 要想運(yùn)用降序的方式完成,那么運(yùn)用DESC即可。SELECT * FROM emp ORDER BY sal DESC ; 范例:要求查詢出10部門的一切雇員信息,查詢的信息按照工資由高到低排序,假設(shè)工資相等,那么按照雇傭日期由早到晚排序。 此時(shí)存在兩個(gè)排序條件,第一個(gè)是降序,第二個(gè)升序SELECT * FROM emp WHERE deptno=10 ORDER BY sal DESC,hiredate ASC ; 排序的操作一定是放在整個(gè)SQL語句的最后執(zhí)行。單行函數(shù)重點(diǎn)
15、數(shù)據(jù)庫系統(tǒng)中,每個(gè)數(shù)據(jù)庫之間獨(dú)一不同的最大區(qū)別點(diǎn)就在與函數(shù)的支持上,運(yùn)用函數(shù)可以完成一系列的操作功能。單行函數(shù)語法:function_name(column|expression,arg1,arg2,) 參數(shù)闡明: function_name:函數(shù)稱號(hào) column:數(shù)據(jù)庫列名 expression:字符串或計(jì)算表達(dá)式 arg1,arg2:在函數(shù)中運(yùn)用參數(shù)單行函數(shù)分類: 字符函數(shù):接受字符輸入并且前往字符或數(shù)值 數(shù)值函數(shù):接受數(shù)值輸入并前往數(shù)值 日期函數(shù):對(duì)日期型數(shù)據(jù)進(jìn)展操作 轉(zhuǎn)換函數(shù):從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型 通用函數(shù):NVL函數(shù)、DECODE函數(shù)字符函數(shù) HYPERLINK cn
16、blogs/Madream/articles/1261013.html Oracle中的dual表 Dual 是 Oracle中的一個(gè)實(shí)踐存在的表,任何用戶均可讀取,常用在沒有目的表的Select語句塊中,用來構(gòu)成select的語法規(guī)那么,oracle保證dual里面永遠(yuǎn)只需一條記錄。這是由于ORACLE對(duì)DUAL表的操作做了一些內(nèi)部處置,盡量保證DUAL表中只前往一條記錄.當(dāng)然這寫內(nèi)部操作是不可見的 .以下是dual的一些運(yùn)用方法:1、查看當(dāng)前用戶,可以在 SQL Plus中執(zhí)行下面語句select user from dual;2、用來調(diào)用系統(tǒng)函數(shù)select to_char(sysdat
17、e,yyyy-mm-dd hh24:mi:ss) from dual;-獲得當(dāng)前系統(tǒng)時(shí)間select SYS_CONTEXT(USERENV,TERMINAL) from dual;-獲得主機(jī)名select SYS_CONTEXT(USERENV,language) from dual;-獲得當(dāng)前l(fā)ocaleselect dbms_random.random from dual;-獲得一個(gè)隨機(jī)數(shù)3、可以用做計(jì)算器select 7*9 from dual;ACII(x)前往字符x的ASCII碼select ascii(a) from dual;求ACSII(a),ASCII(A),ASCII(0
18、),ASCIIXYZ的值CHRX前往ASCII碼為X的字符CONCAT(x,y)字符串拼接函數(shù)select concat(concat(ename, is a),job) from emp;INITCAP(x)首字母大寫select initcap(ename) from emp;INSTRx,y,n,m確定y在x中的位置。n是起始查找的位置,m第幾次出現(xiàn)的位置。select instr(HelloWorld!,l,2) from dual;select instr(HelloWorld!,l,2,3) from dual;LENGTH(x)字符串長度select ename,length(e
19、name) from emp where empno=7698;LOWER(x)轉(zhuǎn)換小寫select lower(ename) from emp;UPPER(x)轉(zhuǎn)換大寫LPAD(x,n,y)在字符串x的左邊補(bǔ)充字符串y,得到總長為n個(gè)字符的字符串??蛇x參數(shù)y用于指定在x左邊補(bǔ)充的字符串;省略參數(shù)y,默許值為空串。select lpad(ename,15,$#) from emp;RPAD(x,n,y)select rpad(ename,15,#$) from emp;LTRIM(x,y)從字符串x的左邊截去包含在字符串y中的字符。假設(shè)不指定參數(shù)y,那么默許截去空格。select ltrim(
20、abcdab,a) from dual;RTIME(x,y)trim(x)去除左右空格SUNSTR(x,n,m)前往字符串x中的一個(gè)子串,這個(gè)子串從字符串x的第n字符開場(chǎng),截取參數(shù)m個(gè)字符。select substr(abcsdfsdwfg,3,4) from dual;replacex,y,z將字符串x中所具有的子串y用子串z交換select replace(jack and jue,j,bl) from dual;19. TRANSLATE(string,if,then) 根據(jù)“if中字符的位置,并檢查“then的一樣位置,然后用該位置的字符交換“string中的字符。select tra
21、nslate(ename,AE,12) from emp;是專門處置字符的,例如,可以將大寫字符變?yōu)樾?,還能求出字符的長度。范例:將小寫字母變?yōu)榇髮懽帜窼ELECT UPPER(smith) FROM DUAL ; 范例:普通用戶在查詢一個(gè)人姓名的時(shí)候有能夠思索到這個(gè)人的姓名是大寫字母存的還是小寫字母保管的呢? 那么此時(shí),為了方便用戶的運(yùn)用就可以運(yùn)用upper函數(shù)完成。SELECT * FROM emp WHERE ename=UPPER(Smith) ; 還可以運(yùn)用lower()函數(shù)將一個(gè)字符串變?yōu)樾懽帜副硎尽ELECT LOWER(HELLO WORLD) FROM dual ; 還
22、可以運(yùn)用initcap()函數(shù)將單詞的第一個(gè)字母大寫SELECT INITCAP(HELLO WORLD) FROM dual ; 范例;運(yùn)用此函數(shù)將雇員表中的雇員姓名變?yōu)殚_頭字母大寫SELECT INITCAP(ename) FROM emp ; 字符串除了可以運(yùn)用“|銜接之外,還可以運(yùn)用CONCAT()函數(shù)進(jìn)展銜接操作。SELECT CONCAT(hello ,world) FROM DUAL ; 此時(shí)曾經(jīng)完成了銜接,但是此種方式一定不如“|好使。在字符函數(shù)中可以進(jìn)展字符串的截取、求出字符串的長度、進(jìn)展指定內(nèi)容的交換 字符串截?。簊ubstr() 字符串長度:length() 內(nèi)容交換:r
23、eplace()SELECT substr(hello,1,3) -截取字符串 , length(hello) -字符串長度 , replace(hello,l,x) -字符串交換FROM DUAL ; 但是在substr()函數(shù)的時(shí)候有一點(diǎn)需求提示大家留意,跟面試有關(guān): Oracle中substr()函數(shù)的截取點(diǎn)是從0還是從1開場(chǎng)。 |- 從0或從1開場(chǎng)效果是一樣的,由于Oracle比較智能。范例:要求顯示一切雇員的姓名及姓名的后三個(gè)字符 由于雇員姓名的字符串長度不一樣,所以只能求出整個(gè)的長度再減去2,這樣進(jìn)展截取操作。SELECT ename,SUBSTR(ename,LENGTH(ena
24、me)-2) FROM emp ; 此時(shí),功能曾經(jīng)實(shí)現(xiàn)了,但是操作比較費(fèi)事。實(shí)踐上在substr()函數(shù)中提供了一種非常方便的機(jī)制,可以采用倒著截取的方式,只需輸入的位置是負(fù)數(shù)就表示倒著進(jìn)展。SELECT ename,SUBSTR(ename,-3,3) FROM emp ; 數(shù)值函數(shù)數(shù)值函數(shù)只需是包含以下幾種: 四舍五入:ROUND() 截?cái)嘈?shù)位:TRUNC() 取余取模:MOD 范例:執(zhí)行四舍五入操作SELECT ROUND(789.536) FROM dual ; 當(dāng)然,在ROUND()函數(shù)中也可以指定四舍五入的位數(shù)范例:保管兩位小數(shù)SELECT ROUND(789.536,2) FR
25、OM dual ; 在運(yùn)用ROUND()函數(shù)中還有一點(diǎn)非常有意思,可以直接對(duì)整數(shù)進(jìn)展四舍五入的進(jìn)位。SELECT ROUND(789.536,-2) FROM dual ; TRUNC()與ROUND()不同的是,在TRUNC()操作中,不會(huì)保管任何的小數(shù),而且小數(shù)點(diǎn)也不會(huì)執(zhí)行四舍五入的操作。范例:驗(yàn)證TRUNC()函數(shù)SELECT TRUNC(789.536) FROM DUAL ; 范例:經(jīng)過TRUNC()也可以指定小數(shù)點(diǎn)的保管位數(shù)SELECT TRUNC(789.536,2) FROM DUAL ; 范例:運(yùn)用負(fù)數(shù)表示位數(shù)SELECT TRUNC(789.536,-2) FROM DUA
26、L ; 范例:運(yùn)用MOD()函數(shù)可以進(jìn)展取余的操作SELECT MOD(10,3) FROM DUAL ; 日期函數(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è)不指定參數(shù)x,那么默許精度值為6dbtimezone前往數(shù)據(jù)庫所在的時(shí)區(qū)extract(year|month|day from x)從日期x中摘取所需求的年或月或日數(shù)據(jù)last_day
27、(x)前往日期x所在月份的最后一天的日期localtimestamp(x)前往當(dāng)前會(huì)話時(shí)區(qū)所對(duì)應(yīng)的日期時(shí)間,可選參數(shù)x表示精度,假設(shè)不指定參數(shù)x,那么默許精度值為6months_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三者之一
28、1.SYSDATE 前往當(dāng)前的日期和時(shí)間SQL select sysdate from dual;2.add_months(x,y) 在x上加上y個(gè)月SQL select hiredate,add_months(hiredate,1) from emp 2 where ename=SMITH;3.last_day(時(shí)間) 前往當(dāng)前時(shí)間所在月的最后一天SQL select sysdate,last_day(sysdate) from dual;4.months_between(d1,d2) 前往日期d1和d2之間的月份數(shù)。假設(shè)d1晚于d2,結(jié)果為正,否那么前往負(fù)數(shù)SQL select month
29、s_between(sysdate,hiredate) from emp;5.next_date(x,week) 前往x后由week指定的第一個(gè)任務(wù)日SQL select sysdate,next_day(sysdate,星期三) from dual;SQL select sysdate,next_day(sysdate,3) from dual6.extract(year|month|day from x) 抓取日期的指定部分SQL select extract(year from sysdate) from dual;SQL select extract(month from sysdat
30、e) from dual;SQL select extract(day from to_date(23-03-2021,dd-mm-yy) from dual;7.round(x,fmt)日期的四舍五入SQL select round(to_date(16-3月-08),year) from dual;SQL select round(to_date(16-3月-08),month) from dual;SQL select round(to_date(16-3月-08),day) from dual;格式符闡明舉例yyyy年份2021mmmonthmon月份02dd天28day星期幾星期五a
31、m/pm上午/下午hh/hh12/hh24小時(shí)2:30mi分鐘30ss秒rr 可以把yy交換成rr有不同的效果fm 去掉數(shù)字前面的零察看結(jié)果select to_char(sysdate,yyyy-mm-dd hh:mi:ss pm) from dual;select to_char(sysdate,yyyy-mon-dd hh24:mi:ss pm) from dual;select to_char(sysdate,yyyy-month-dd day hh24:mi:ss ) from dual;select to_char(sysdate,公元yyyy年-month-dd日 day hh24
32、:mi:ss ) from dual;select to_char(sysdate,fm yyyy-mm-dd hh:mi:ss pm) from dual;select to_char(to_date(98-02-23,rr-mm-dd),yyyy-mm-dd) from dual;在Oracle中提供了很多與日期操作相關(guān)的函數(shù),包括加減日期等等。但是在日期進(jìn)展加或減結(jié)果的時(shí)候有一些規(guī)律: 日期 數(shù)字 = 日期 日期 + 數(shù)字 = 日期 日期 日期 = 數(shù)字天數(shù) 范例:顯示10部門雇員進(jìn)入公司的星期數(shù) 假設(shè)要想完成此操作,那么首先必需知道當(dāng)前的日期,在Oracle中可以經(jīng)過以下的操作求出當(dāng)前
33、日期,運(yùn)用sysdate表示。SELECT SYSDATE FROM DUAL ; 求出星期數(shù):當(dāng)前日期 雇傭日期 = 天數(shù) / 7 = 星期數(shù)SELECT empno,ename,ROUND(SYSDATE-hiredate)/7) FROM emp ; 在Oracle中提供了以下的日期函數(shù)支持: MONTHS_BETWEEN():求出給定日期范圍的月數(shù) ADD_MONTHS():在指定日期上加上指定的月數(shù),求出之后的日期 NEXT_DAY():下一個(gè)的今天是那一個(gè)日期 LAST_DAY():求出給定日期的最后一天日期范例:驗(yàn)證MONTHS_BETWEEN()SELECT empno,ena
34、me,MONTHS_BETWEEN(sysdate,hiredate) FROM emp ; 程序查詢時(shí)包含了小數(shù)點(diǎn),可以運(yùn)用ROUND()進(jìn)展四舍五入的操作。范例:驗(yàn)證ADD_MONTHS()函數(shù)SELECT ADD_MONTHS(SYSDATE,4) FROM DUAL ; 范例:驗(yàn)證NEXT_DAY()函數(shù) 此函數(shù)求出下一次給定日期數(shù)SELECT NEXT_DAY(SYSDATE,星期一) FROM DUAL ; 范例:驗(yàn)證LAST_DAY()函數(shù) 求出一個(gè)日期的最后一天SELECT LAST_DAY(SYSDATE) FROM DUAL ; 轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù)主要有以下幾種: TO_CH
35、AR():轉(zhuǎn)換成字符串 TO_NUMBER():轉(zhuǎn)換成數(shù)字 TO_DATE():轉(zhuǎn)換成日期范例:查詢一切雇員的雇員編號(hào)、姓名、雇傭日期SELECT empno,ename,hiredate FROM emp ; 但是如今要求可以將年、月、日進(jìn)展分開,此時(shí)就可以運(yùn)用TO_CHAR()函數(shù)進(jìn)展拆分,拆分的時(shí)候必需指定拆分的通配符: 年:y,年是四位的數(shù)字,所以運(yùn)用yyyy表示 月:m,月是二位的數(shù)字,所以運(yùn)用mm表示 日:d,日是二位的數(shù)字,所以運(yùn)用dd表示還可以運(yùn)用to_char()函數(shù)進(jìn)展日期顯示的轉(zhuǎn)換功能。 Oracle中默許的日期格式:19-4月 -87 中國的喜歡格式:1987-04-1
36、9從運(yùn)轉(zhuǎn)結(jié)果中可以發(fā)現(xiàn),假設(shè)是5月,那么會(huì)運(yùn)用05表示。那么這個(gè)0稱為前導(dǎo)0,假設(shè)不希望顯示前導(dǎo)0的話,那么可以運(yùn)用fm去掉這些0。 to_char()函數(shù)除了可以用在日期上,也可以用在數(shù)字上。雙引號(hào)():在Oracle中單雙引號(hào)含義區(qū)別雙引號(hào)被用來將包含特定或者空格列別名括起來SELECT empno “ ,ename,sal as “工資 FROM emp ;雙引號(hào)還被用來將文本放入日期格式SELECT TO_CHAR(sysdate,fmyyyy年mm月dd日)FROM DUAL;例如:要查詢?nèi)康墓蛦T編號(hào)、姓名、工資SELECT empno,ename,sal FROM emp ; 最
37、好在數(shù)字中參與一些符號(hào),以分割太長的數(shù)字,普通中國運(yùn)用“,,所以,此時(shí),可以運(yùn)用to_char()函數(shù)進(jìn)展格式化: 9:表示一位數(shù)字SELECT empno,ename,TO_CHAR(sal,99,999) FROM emp ; 假設(shè),此時(shí),希望數(shù)字可以明確的表示出區(qū)域,可以運(yùn)用以下兩種符號(hào): $:表示美圓SELECT empno,ename,TO_CHAR(sal,$99,999) FROM emp ; L:表示Local的縮寫,以本地的言語進(jìn)展金額的顯示SELECT empno,ename,TO_CHAR(sal,l99,999) FROM emp ; TO_NUMBER是可以將字符串變
38、為數(shù)字的一種函數(shù)。SELECT TO_NUMBER(123) + TO_NUMBER(123) FROM DUAL ; 以上就表示把字符串變?yōu)閿?shù)字,之后進(jìn)展數(shù)字的加法操作。TO_DATE()函數(shù)可以將一個(gè)字符串變?yōu)镈ATE型的數(shù)據(jù)。 例如:有2021-2-16是一個(gè)字符串,如今要變?yōu)镈ATE類型。SELECT TO_DATE(2021-02-16,yyyy-mm-dd) FROM DUAL ; SELECT TO_CHAR(TO_DATE(2021-02-16,yyyy-mm-dd),yyyy年mm月dd日)FROM DUAL通用函數(shù)范例:要求求出每個(gè)雇員的年薪 求出年薪的時(shí)候應(yīng)該加上獎(jiǎng)金的,
39、格式sal+comm*12SELECT empno,ename,(sal+comm)*12 FROM emp ; 之所以呵斥這樣的結(jié)果,是由于有些雇員的獎(jiǎng)金是NULL,NULL值計(jì)算之后結(jié)果還是NULL。所以,面對(duì)這樣的情況,就可以運(yùn)用NVL函數(shù),可以將一個(gè)指定的null值變?yōu)橹付ǖ膬?nèi)容。SELECT empno,ename,NVL(comm,0), (sal+NVL(comm,0)*12 income FROM emp ; 假設(shè)需求進(jìn)展計(jì)算的時(shí)候,對(duì)于null必需運(yùn)用NVL()函數(shù)進(jìn)展一個(gè)轉(zhuǎn)換操作。NVLx,y假設(shè)x為null,那么前往y值;否那么前往x的值。select ename,sal
40、+nvl(comm,0) from emp;NVL2x,y,z假設(shè)x不為空前往y的值,否那么前往z的值select ename,nvl2(comm,獎(jiǎng)金:|comm,無獎(jiǎng)金) from emp DECODE()函數(shù),此函數(shù)是在面試最有能夠問到的問題。DECODE()類似于IFELSEIFELSE語句。語法:DECODE(col/expression,search1,result1,search2,result2,.,default) 闡明:col/expression:為列名或表達(dá)式search1、search2searchi:為用于比較的條件result1、result2resulti為前往
41、值假設(shè)col/expression和searchi相比較,結(jié)果一樣的話,那么前往resulti,假設(shè)沒有與col/expression相匹配的結(jié)果,那么前往默許枝default。 范例:驗(yàn)證DECODE()函數(shù)SELECT DECODE(1,1,內(nèi)容是1,2,內(nèi)容是2,3,內(nèi)容是3) FROM DUAL ; 從運(yùn)轉(zhuǎn)結(jié)果上看,程序?qū)?nèi)容進(jìn)展更改,顯示的結(jié)果變了。 可以直接在emp表上運(yùn)用此函數(shù),例如,如今有如下的要求: 雇員的任務(wù): |- CLERK:業(yè)務(wù)員 |- SALESMAN:銷售人員 |- MANAGER:經(jīng)理 |- ANALYST:分析員 |- PRESIDENT:總裁范例:要求查詢出
42、雇員的編號(hào),姓名,雇傭日期及任務(wù),將任務(wù)交換成以上的信息SELECT empno 雇員編號(hào) ,ename 雇員姓名 ,hiredate 雇傭日期 , DECODE(job,CLERK,業(yè)務(wù)員,SALESMAN, 銷售人員,MANAGER,經(jīng)理, ANALYST,分析員,PRESIDENT,總裁) 職位FROM emp ; 從運(yùn)轉(zhuǎn)結(jié)果上發(fā)現(xiàn),運(yùn)用DECODE函數(shù)曾經(jīng)讓輸出的職位信息有所更改??偨Y(jié) 1、 Oracle的主要用戶: 超級(jí)管理員:sys/change_on_install 普通管理員:system/manager 普通用戶:scott/tiger 2、 sqlplusw的一些常用命令
43、設(shè)置行顯示數(shù)量:set linesize 長度 設(shè)置頁顯示數(shù)量:set pagesize 長度 ed及指令 銜接:conn 用戶名 / 密碼 AS SYSDBA 3、 SQL根底語法的格式 4、單行函數(shù),這些函數(shù)應(yīng)該隨著開發(fā)的增長逐漸掌握,DECODE()函數(shù)最重要。補(bǔ)充oracle運(yùn)算符運(yùn)用用于where比較條件有:等于:=、=、包含:in、not in exists、not exists范圍:between.and、not betweenand匹配測(cè)試:like、not likeNull測(cè)試:is null、is not null布爾鏈接:and、or、notoracle通配符:在查詢數(shù)據(jù)
44、時(shí),會(huì)出現(xiàn)這樣一種情況數(shù)據(jù)本身含有% 或者 “_符號(hào),假設(shè)此時(shí)我們查詢含有“%的數(shù)據(jù),我們要把%進(jìn)展本義,讓他失去原先的通配符的含義,而僅僅表現(xiàn)字面的意思。在Oracle中沒有本義符號(hào)“這個(gè)字符,需求我們用ESCAPE進(jìn)展定義,比如“ESCAPE #這時(shí)#符號(hào)就是本義字符了,對(duì)于本義字符我們最好選用一些不常用的字符。任何字符前出現(xiàn)#符號(hào),那么這個(gè)字符將被本義,比如A#%第一個(gè)%被本義代表字面意義的“%而第二個(gè)是通配符。在where子句中通配符可和like條件起運(yùn)用在Oracle中:%(百分號(hào)): 用來表示恣意數(shù)量或者能夠根本沒有_(下劃線): 表示確切未知?(問號(hào)): 用來表示確切未知#(井號(hào)
45、): 用來表示確切阿拉伯?dāng)?shù)字0到9a-d(方括號(hào)):用來表示范圍在這里是從a到d單引號(hào)():在Oracle中應(yīng)該只運(yùn)用單引號(hào)將文本和和日期括起來,不能運(yùn)用引號(hào)(包括單雙引號(hào))將數(shù)字括起來雙引號(hào)():在Oracle中單雙引號(hào)含義區(qū)別雙引號(hào)被用來將包含特定或者空格列別名括起來雙引號(hào)還被用來將文本放入日期格式雙豎線(|):Oracle運(yùn)用雙豎線表示串銜接星號(hào)(*):select *意味著選擇一切列count(*)意味著計(jì)算一切行表示通配符時(shí)表示0個(gè)或恣意多個(gè)正斜杠(/):在Oracle中用來終止SQL語句更準(zhǔn)確說是表示了“運(yùn)轉(zhuǎn)如今位于緩沖區(qū)SQL代碼正斜杠也用作分隔項(xiàng)多行注釋:/*/不等于:有多種表
46、達(dá)方式:!=、=、not xxx=yyy、not(xxx=yyy)多表查詢的根本語法重、難點(diǎn) 之前的查詢都是在一張表里進(jìn)展的,假設(shè)如今運(yùn)用一張以上的表,就稱為多表查詢。多表查詢語法如下: SELECT DISTINCT * |查詢列1 別名1,查詢列2 別名2,F(xiàn)ROM 表稱號(hào)1 別名1,表稱號(hào)2,別名2,WHERE 條件(s )ORDER BY 排序字段1 ASC|DESC ,排序字段2 ASC|DESC范例:下面運(yùn)用多表查詢,同時(shí)查詢emp和dept表SELECT * FROM emp,dept; 以上的查詢運(yùn)用了兩個(gè)表。從查詢結(jié)果上發(fā)現(xiàn)前往的數(shù)據(jù)是56行,但是emp是14行。范例:查詢e
47、mp 表中的記錄數(shù)SELECT COUNT(*) FROM emp; 從查詢結(jié)果上看emp中有14條范例:查詢dept 表中的記錄數(shù)SELECT COUNT(*) FROM dept; 從查詢結(jié)果上看dept中有4條56條記錄=emp表的14條dept表的4條運(yùn)用多表查詢會(huì)產(chǎn)生笛卡爾積。假設(shè)表的數(shù)據(jù)越多,那么笛卡爾積就會(huì)越大,假設(shè)如今假設(shè)有5張表,每張表有100000條記錄,1000005所以多表查詢?cè)谑遣唤ㄗh掛在開發(fā)中過多運(yùn)用的。要想去掉笛卡爾積那么必需運(yùn)用字段進(jìn)展關(guān)聯(lián)的操作。在emp中表存在一個(gè)deptno的字段, 在dept表里也存在一個(gè)deptno的字段,而且emp表中的deptno中
48、的字段是與dept表中的deptno關(guān)聯(lián)的,所以deptno 屬于關(guān)聯(lián)字段。在多表查詢中要用WHERE 子句來消除笛卡爾積。范例:修正前面的查詢SELECT * FROM emp,deptWHERE emp.deptno=dept.deptno; 查詢結(jié)果是14行,此時(shí)消除了笛卡爾積,但是假設(shè)如今表稱號(hào)過長時(shí)過長時(shí)不是很好用,一邊會(huì)對(duì)表起個(gè)別名。SELECT * FROM emp e,dept dWHERE e.deptno=d.deptno; 結(jié)果是一樣的,所以普通在開發(fā)中運(yùn)用多表查詢,最好指定表的別名范例:要求查詢出雇員的編號(hào)、雇員的姓名、部門的編號(hào)、部門稱號(hào)及部門位置SELECT e.e
49、mpno,e.ename,d.deptno,d.dname,d.locFROM emp e,dept dWHERE emp.deptno=dept.deptno; 范例:要求查詢出每個(gè)雇員姓名、任務(wù)、雇員的直接上級(jí)指點(diǎn)的姓名在emp表中mgr字段表示一個(gè)雇員的上級(jí)指點(diǎn)的編號(hào),假設(shè)要查詢一個(gè)雇員的上級(jí)指點(diǎn)的姓名,那么一定要將emp和emp本人和本人進(jìn)展關(guān)聯(lián),這種叫自相關(guān)。SELECT e.ename,e.job,m.enameFROM emp e,emp mWHERE e.mgr=m.empno; 范例:要求進(jìn)一步擴(kuò)展,將雇員所在的部門稱號(hào)同時(shí)列出部門稱號(hào)在dept表中SELECT e.enam
50、e,e.job,m.ename,d.dnameFROM emp e,emp m, dept dWHERE e.mgr=m.empno AND e.deptno=d.deptno; 思索題:要求查詢出每個(gè)雇員的姓名、工資、部門稱號(hào)、工資在公司的等級(jí)salgrade,及其指點(diǎn)的姓名及工資所在公司的等級(jí)。思緒分析:首先查詢每個(gè)雇員的姓名、工資、部門稱號(hào)、工資在公司的等級(jí),涉及到的表有emp表、salgrade表、dept表SELECT e.ename,e.sal,d.dname,s.gradeFROM emp e, dept d ,salgrade sWHERE e.deptno=d.deptno
51、AND e.sal BETWEEN s.losal AND s.hisal; 然后思索指點(diǎn)的姓名和工資等級(jí)SELECT e.ename,e.sal,d.dname,s.grade,m.ename,m.sal,ms.gradeFROM emp e, dept d ,salgrade s,emp m,salgrade msWHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisalAND e.mgr=m.empno AND m.sal BETWEEN ms.losal AND ms.hisal; 進(jìn)一步思索要求將工資等級(jí)按以下款式輸出:
52、1:五級(jí)工資2:四級(jí)工資3:三級(jí)工資4:二級(jí)工資5:一級(jí)工資這需求運(yùn)用DECODE()函數(shù)SELECT e.ename,e.sal,d.dname,DECODE(s.grade,1,五級(jí)工資,2,四級(jí)工資,3,三級(jí)工資,4,二級(jí)工資,5,一級(jí)工資),m.ename,m.sal, DECODE(ms.grade,1,五級(jí)工資,2,四級(jí)工資,3,三級(jí)工資,4,二級(jí)工資,5,一級(jí)工資)FROM emp e, dept d ,salgrade s,emp m,salgrade msWHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal
53、AND e.mgr=m.empno AND m.sal BETWEEN ms.losal AND ms.hisal; 左銜接、右銜接重點(diǎn) 在dept表中存在4條記錄如今將emp表和dept表關(guān)聯(lián)查詢,查詢一下指定的字段。SELECT e.empno,e.ename,d.deptno,d.dnameFROM emp e,dept dWHERE e.deptno=d.deptno;此時(shí)發(fā)如今查詢結(jié)果中,deptno字段里沒有出現(xiàn)40的記錄,我們查看在dept表中的的部門編號(hào)有40,這是為什么?由于在雇員表中沒有是40部門的雇員SELECT e.empno,e.ename,d.deptno,d.dn
54、ameFROM emp e,dept dWHERE e.deptno(+)=d.deptno; 假設(shè)想要40部門顯示出來在WHERE子句中+寫在等號(hào)的左邊,發(fā)現(xiàn)40部門出現(xiàn)。這個(gè)時(shí)候是右銜接。因此,+在=右邊是左銜接銜接的時(shí)候以左邊為準(zhǔn)+在=左邊是右銜接銜接的時(shí)候以右邊為準(zhǔn)留意:在開發(fā)中左、右銜接運(yùn)用較多,特別要了解實(shí)踐上在之間的查詢中查找雇員姓名及每一位雇員的指點(diǎn)的時(shí)候就應(yīng)該運(yùn)用左、右銜接了。SELECT e.empno,e.ename,m.empno,m.enameFROM emp e,emp mWHERE e.mgr=m.empno;一共13行數(shù)據(jù),但是emp表中有14條記錄SELECT
55、 e.empno,e.ename,m.empno,m.enameFROM emp e,emp mWHERE e.mgr=m.empno(+);以上運(yùn)用了左銜接,顯示了14條信息,多出來了 7839 KING應(yīng)為7839 KING是最高指點(diǎn),mgr字段為nullSELECT e.empno,e.ename,m.empno,m.enameFROM emp e,emp mWHERE e.mgr(+)=m.empno;假設(shè)我們用了右銜接,發(fā)現(xiàn)記錄有21條規(guī)范SQL語法知道SELECT table1.column,table2.columnFROM table1 CROSS JOIN table2 |N
56、ATURAL JOIN table2 | JOIN table2 USING(column_name) |JOIN table2 ON(table1.colunm_name =table2.column_name) |LEFT |RIGHT |FULL OUTER JOIN table2 ON(table1.column_name=table2.column_name);交叉銜接CROSS JOIN table2 產(chǎn)生笛卡爾積SELECT * FROM emp CROSS JOIN dept;產(chǎn)生了56條記錄,效果和以下查詢一樣SELECT * FROM emp,dept;自然銜接CROSS
57、JOIN table2 自動(dòng)進(jìn)展關(guān)聯(lián)字段的匹配SELECT * FROM emp NATURAL JOIN dept;查詢的結(jié)果是條記錄,自動(dòng)的進(jìn)展了字段的關(guān)聯(lián)匹配,不用寫WHERE子句的關(guān)聯(lián)條件,效果和以下的查詢一樣SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;JOIN table2 USING(column_name) 直接指定關(guān)聯(lián)的操作列SELECT * FROM emp JOIN dept USING(deptno);效果和上面的一樣,可以自行指定關(guān)聯(lián)的字段JOIN table2 ON(table1.colunm_name =t
58、able2.column_name) 用戶本人編寫銜接的條件SELECT * FROM emp JOIN dept ON(emp.deptno=dept.deptno);效果和上面的一樣LEFT OUTER JOIN table2 ON(table1.column_name=table2.column_name) 左外銜接RIGHT OUTER JOIN table2 ON(table1.column_name=table2.column_name)右外銜接SELECT * FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno =d.deptno);效
59、果和我們上面的右銜接是一樣的SELECT * FROM emp e,dept dWHERE e.deptno(+)=d.deptno;以上的的語法應(yīng)該作為了解,看到要求認(rèn)識(shí)。組函數(shù)和分組統(tǒng)計(jì)組函數(shù)也稱為聚合函數(shù)。例如:我們把學(xué)生可以分為男生和女生兩個(gè)組,假設(shè)想求每組的人數(shù),平均身高,平均年齡等,就需求用到分組函數(shù)了。在SQL中常用的組函數(shù)有以下幾個(gè):COUNT():求出全部的記錄數(shù)MAX():求出一組中的最大值MIN():求出一組中的最小值A(chǔ)VG():求出一組中的平均值SUM():求和范例:COUNT()函數(shù)SELECT COUNT(empno) FROM emp;我們常用COUNT(*),最
60、好可以用字段替代*范例:MAX()、MIN()函數(shù),求最大最小值,普通是針對(duì)于數(shù)值的字段的,求出一切員工的的最高工資,和最底工資和平均工資。SELECT MAX(sal) 最高工資,MIN(sal) 最底工資,AVG(sal) 平均工資FROM emp;范例:求出部門的一切員工工資的總合SELECT SUM(sal) 工資綜合 FROM emp WHERE deptno=10;假設(shè)如下查詢輸出部門編號(hào)和其部門一切員工的工資總和,會(huì)產(chǎn)生錯(cuò)誤。SELECT deptno ,SUM(sal) 工資綜合 FROM emp WHERE deptno=10;發(fā)生以上的錯(cuò)誤信息,是由于這樣的查詢需求進(jìn)展分組
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度財(cái)務(wù)信息系統(tǒng)集成合同3篇
- 2024石子深加工技術(shù)研發(fā)與應(yīng)用合同3篇
- 2024玩具樂園設(shè)備采購及租賃服務(wù)合同3篇
- 2024版影視作品版權(quán)轉(zhuǎn)讓與授權(quán)播放合同
- 2025年松樹造林項(xiàng)目采購合同3篇
- 二零二五版船舶光租及船舶安全管理體系合同3篇
- 二零二五年度安置房項(xiàng)目公共設(shè)施維護(hù)合同3篇
- 2025年度淋浴房綠色環(huán)保材料采購與安裝服務(wù)合同4篇
- 2025年度鋁材貿(mào)易結(jié)算與風(fēng)險(xiǎn)管理合同4篇
- 二零二五年度跨境電商進(jìn)口采購合同3篇
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 發(fā)生用藥錯(cuò)誤應(yīng)急預(yù)案
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報(bào)告
- 綠色貸款培訓(xùn)課件
- 大學(xué)生預(yù)征對(duì)象登記表(樣表)
- 主管部門審核意見三篇
- 初中數(shù)學(xué)校本教材(完整版)
- 父母教育方式對(duì)幼兒社會(huì)性發(fā)展影響的研究
- 新課標(biāo)人教版數(shù)學(xué)三年級(jí)上冊(cè)第八單元《分?jǐn)?shù)的初步認(rèn)識(shí)》教材解讀
- (人教版2019)數(shù)學(xué)必修第一冊(cè) 第三章 函數(shù)的概念與性質(zhì) 復(fù)習(xí)課件
- 重慶市銅梁區(qū)2024屆數(shù)學(xué)八上期末檢測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論