毛片在线视频观看,一级日韩免费大片,在线网站黄色,澳门在线高清一级毛片

薈聚奇文、博采眾長、見賢思齊
當前位置:公文素材庫 > 計劃總結 > 工作總結 > oracle總結

oracle總結

網(wǎng)站:公文素材庫 | 時間:2019-05-29 15:09:39 | 移動端:oracle總結

oracle總結

1.oracle物理內(nèi)存最少256MB

2.Oracle10g數(shù)據(jù)庫不支持WindowsNT3.全局數(shù)據(jù)庫名默認為orcl

4.數(shù)據(jù)庫口令口令長度必須介于4-30個字符之間5.默認創(chuàng)建的Oracle數(shù)據(jù)庫實例ORACLE_SID

6.安裝完Oracle后,系統(tǒng)會創(chuàng)建一組Oracle服務,這些服務可以確保Oracle的正常運行

7.OracleDBConsoleorcl。Oracle數(shù)據(jù)庫控制臺服務

OracleOraDb10g_home1iSQL*Plus。iSQL*Plus應用服務OracleOraDb10g_home1TNSListener。監(jiān)聽器服務OracleServiceORCL。數(shù)據(jù)庫服務

8.通過命令行方式啟動OracleDBConsoleorcl服務emctlstartdbconsole

9.在$ORACLE_HOME/install/portlist.ini中找到需要的EM端口號(默認為1158)

iSQL*Plus端口號的默認值為5660

10.在“連接身份”框中有三個選項:Normal、SYSOPER、SYSDBA

11.在EM中,可以通過4個頁面對Oracle數(shù)據(jù)庫進行監(jiān)測和管理,分別是:主目錄、性能、管理和維護。

12.在OracleAdministrationAssistant中,可以查看、添加/刪除操作系統(tǒng)數(shù)據(jù)庫用戶信息。

13.用鼠標右鍵單擊數(shù)據(jù)庫實例,在彈出的菜單中可以啟動服務、停止服務、連接數(shù)據(jù)庫、斷開數(shù)據(jù)庫連接,設置啟動/關閉選項以及查看進程信息等。

14.OracleNet是OracleNetService的一個組件,它支持客戶端應用程序到Oracle數(shù)據(jù)庫服務器的網(wǎng)絡會話

15.OracleNetManager是配置和管理Oracle網(wǎng)絡環(huán)境的一種工具。使用它可以對下列OracleNet特性和組件進行配置和管理。

16.(1)指定的數(shù)據(jù)庫服務不存在或沒有啟動。(2)用于測試的用戶名不存在或口令錯誤。

(3)客戶端與服務器之間存在故障或通訊協(xié)議不匹配,不能實現(xiàn)正常通訊。(4)客戶機和服務器在不同的域中,互相訪問存在權限問題。

17.在網(wǎng)絡環(huán)境中,客戶端用戶需要通過網(wǎng)絡訪問oracle10g數(shù)據(jù)庫或其它服務。此時需要使用網(wǎng)絡配置助手來連接到遠端的數(shù)據(jù)庫服務器

18.SQLPLUS和SQLPLUSW的比較:字符模式的可執(zhí)行文件:sqlplus.exe

Windows模式的可執(zhí)行文件:sqlplusw.exe,它們存放在oracle系統(tǒng)主目錄下db_1\\bin下。19.V$DATABASE是Oracle系統(tǒng)視圖,用于顯示數(shù)據(jù)庫的基本信息。20.啟動一個數(shù)據(jù)庫的基本步驟如(1)啟動數(shù)據(jù)庫實例(2)裝載數(shù)據(jù)庫(3)打開數(shù)據(jù)庫

21.Oracle數(shù)據(jù)庫實例的狀態(tài)(1)打開(OPEN)。(2)關閉(CLOSE)。(3)已裝載(MOUNT)。

(4)已啟動(不裝載,NOMOUNT)。

22.1、正常關閉

SHUTDOWNNORMAL2、立即關閉

SHUTDOWNIMMEDIATE

系統(tǒng)不會等待所有用戶斷開連接,只要事物回滾完畢,立即關閉數(shù)據(jù)庫。3、事務處理關閉

SHUTDOWNTRANSACTIONAL4、中止關閉

SHUTDOWNABORT

23.用STARTUP命令啟動數(shù)據(jù)庫實例。1、啟動數(shù)據(jù)庫實例,裝載并打開數(shù)據(jù)庫STARTUP

2、啟動數(shù)據(jù)庫實例,不裝載數(shù)據(jù)庫STARTUPNOMOUNT

3、啟動數(shù)據(jù)庫實例并裝載數(shù)據(jù)庫,但不打開數(shù)據(jù)庫。STARTUPMOUNT

4、啟動后限制對數(shù)據(jù)庫實例的訪問。STARTUPRESTRICT5、強制實例啟動STARTUPFORCE

24.使用ALTERDATABASE語句改變數(shù)據(jù)庫的狀態(tài)。

25.二進制文件被稱為服務器參數(shù)文件(ServerParameterFile,SPFile),它始終存放在數(shù)據(jù)庫服務器上。

26.指定數(shù)據(jù)塊大小。DB_BLOCK_SIZE27.使用ALTERSYSTEM語句可以設置初始化參數(shù)28.Oracle數(shù)據(jù)庫用戶可以分為如下6種類型:

數(shù)據(jù)庫管理員,安全官員,網(wǎng)絡管理員,應用程序開發(fā)員,應用程序管理員,數(shù)據(jù)庫用戶29.SYS,默認密碼為CHANGE_ON_INSTALL30.

V$TABLESPACEDBA_TABLESPACES控制文件中保存的所有表空間的名稱和數(shù)量所有表空間的描述信息31可以使用CREATETABLESPACE語句來創(chuàng)建表空間

32.在CREATETABLESPACE語句中使用BIGFILE關鍵詞可以創(chuàng)建大文件表空間33.在CREATETABLESPACE語句中使用TEMPORARY關鍵詞可以創(chuàng)建臨時表空間。34.可以使用ALTERTABLESPACE語句修改表空間的屬性。

35.系統(tǒng)表空間、撤銷表空間、臨時表空間不能被設置為脫機狀態(tài)。36.ALTERTABLESPACE…OFFLINE語句設置表空間為脫機狀態(tài)

37.在ALTERDATABASE語句中使用ADDLOGFILEMEMBER關鍵字,可以向已存在的重做日志組中添加成員:

ALTERDATABASEADDLOGFILEMEMBER"log3a.odo"TOGROUP10;38.Oracle數(shù)據(jù)庫身份認證密碼長度最小4個字符39.可以使用ORAPWD命令創(chuàng)建密碼文件40.可以使用GRANT命令為用戶授予權限。

可以使用REVOKE命令撤銷用戶的授權41.視圖V$PWFILE_USERS中保存了密碼文件的信息42.使用CREATEUSER命令在數(shù)據(jù)庫中創(chuàng)建新用戶。43.使用PASSWORDEXPIRE關鍵詞設置密碼過期。44.使用ACCOUNTLOCK關鍵詞鎖定用戶。45.常見的數(shù)據(jù)對象權限包括以下4個選項:

SELECT、INSERT、UPDATE、DELEDE

46.使用REVOKE語句可以撤銷用戶的角色或權限:47.角色DBA擁有所有系統(tǒng)級管理權限

48.可以使用ALTERROLE語句修改角色。

49.SQL是結構化查詢語言(StructuredQueryLanguage)的縮寫。50.SQL語言是一種一體化的語言。按功能可分為3類:

數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)數(shù)據(jù)操縱語言(DataManipulation,DML)

數(shù)據(jù)控制語言(DataControlLanguage,DCL)51.創(chuàng)建表時加上NOTNULL約束。使該列不接受空值。52.修改列名。

格式:ALTERTABLE表名RENAMECOLUMN原列名TO新列名;53.將列設置為不可用。

格式:ALTERTABLE表名SETUNUSEDCOLUMN列名;

例將表Users中的列tmpcol_1設置為不可用:SQL>ALTERTABLEUsers

SETUNUSEDCOLUMNtmpcol_1;54.可以使用UPDATE命令修改表中的數(shù)據(jù)55.用WHERE子句可以指定查詢條件

56.可以在WHERE子句中使用LIKE關鍵字和通配符實現(xiàn)模糊查詢57.內(nèi)連接

SELECTFROMINNERJOINON

由于涉及兩個表的查詢,所以字段名前要加上表的別名。58.序列號是一個Oracle整數(shù),最多可有38個數(shù)字。

59.必須先啟用ARCHIVELOG(歸檔日志)模式,才能使數(shù)據(jù)庫在磁盤故障的情況下得到恢復。

60.RMAN是RecoveryManager的縮寫61.備份集是由若干個備份片組成

62.使用rman命令可以打開恢復管理器。

63.只有注冊的數(shù)據(jù)庫才能進行備份和恢復操作?梢允褂胷egisterdatabase命令對數(shù)據(jù)庫進行注冊

64.可以用run命令定義一組要執(zhí)行的語句。65.可以使用restore命令還原數(shù)據(jù)庫

66.db_recovery_file_dest表示閃回恢復區(qū)的位置,

db_recovery_file_dest_size表示閃回恢復區(qū)的大小,

67.使用DECLARE關鍵字標志著PL/SQL程序中聲明段的開始

68.標識符最大長度為30。

69.BLOB。二進制大對象,可以用來保存圖像和文檔等二進制數(shù)據(jù)。70.當條件表達式的值為真時,執(zhí)行EXIT語句,退出循環(huán)。71.用LOOP…EXIT…END語句求1到100之間偶數(shù)的和。SETServerOutputON;DECLARE

v_NumINTEGER:=2;v_SumINTEGER:=0;BEGINLOOP

v_Sum:=v_Sum+v_Num;IFv_Num=100THENEXIT;ENDIF;

v_Num:=v_Num+2;ENDLOOP;

dbms_output.put_line(v_Sum);END;

72.在程序最后加

dbms_output.put_line("");可以使數(shù)據(jù)豎著輸出

73.異常處理代碼在EXCEPTION塊中實現(xiàn)

74.CEIL函數(shù)返回大于或等于所給數(shù)字表達式的最小整數(shù)(向上取整)。75.UPPER函數(shù)返回將小寫字符數(shù)據(jù)轉換為大寫的字符表達式。76.SYSDATE。返回當前的系統(tǒng)日期。

77.游標聲明語句CURSOR、打開游標語句OPEN

78.Oracle游標有4個屬性:%ISOPEN、%FOUND、%NOTFOUND和%ROWCOUNT。79.PL/SQL有以下3種存儲過程。過程、函數(shù)、程序包80.可以使用CREATEFUNCTION語句來創(chuàng)建函數(shù)81.PL/SQL程序包是由包的說明部分和包體組成的第一章的

1.Oracle有4個版本

Oracle數(shù)據(jù)庫10g標準版1、Oracle數(shù)據(jù)庫10g標準版、Oracle數(shù)據(jù)庫10g標準版企業(yè)版、Oracle數(shù)據(jù)庫10g個人版2.10g中的g表示網(wǎng)絡計算

3.數(shù)據(jù)庫由表組成,表由數(shù)據(jù)段組成,數(shù)據(jù)段由數(shù)據(jù)區(qū)間組成,數(shù)據(jù)區(qū)間由數(shù)據(jù)塊組成。4.oracle數(shù)據(jù)庫存儲空間的最小存儲單元是數(shù)據(jù)塊5.oracle分配磁盤空間的最小單位是區(qū)間6.oracle表空間

臨時表空間、用戶表空間、撤銷表空間、大用戶表空間、系統(tǒng)表空間、輔助表空間7.oracle兩種內(nèi)存結構為SGA和PGA8.視圖是虛擬的表,它在物理上不存在。9.創(chuàng)建索引可以提高讀取數(shù)據(jù)效率。10.表的組合就是簇

11.每個數(shù)據(jù)庫都至少有一個表空間被稱為system表空間

12.每個oracle數(shù)據(jù)庫都由3種類型文件組成:數(shù)據(jù)、控制和日志。

擴展閱讀:Oracle總結

Oracle

一些概念

Linux中登錄oracle的命令:sqlplus用戶名/密碼

showuser顯示當前登錄的身份.setpauseon(網(wǎng)頁中分頁)

setpauseoff分頁顯示(SQL*plus中在網(wǎng)頁中是不分頁).oracle中默認日期和字符是左對齊,數(shù)字是右對齊tableorviewdoesnotexist;表或示圖不存在

edit命令用于自動打開vi修改剛修執(zhí)行過的sql的命令。

查看表的結構(包含的字段):descs_dept(控制臺);descdept(瀏覽器)查詢:selecttable_namefromuser_tables;(控制臺)

一、數(shù)據(jù)庫基本概念

1)數(shù)據(jù)庫管理系統(tǒng):一種操縱和管理數(shù)據(jù)庫的大型軟件,是用于建立、使用和維護數(shù)據(jù)庫,Oracle、DB2、Mysql、MSServer;

2)數(shù)據(jù)庫:按照數(shù)據(jù)結構來組織、存儲和管理數(shù)據(jù)的倉庫。3)數(shù)據(jù):

4)表(Table):數(shù)據(jù)庫中的表與我們?nèi)粘I钪惺褂玫谋砀耦愃,它也是由行(Row)和列(Column)組成的。

5)視圖:其實是一個虛擬的表,在數(shù)據(jù)庫中并不實際存在。視圖數(shù)據(jù)是由查詢數(shù)據(jù)庫表產(chǎn)生的,它限制了用戶能看到和修改的數(shù)據(jù)。

6)索引:索引是根據(jù)指定的數(shù)據(jù)庫表列建立起來的順序。它提供了快速訪問數(shù)據(jù)的途徑,并且可監(jiān)督表的數(shù)據(jù),使其索引所指向的列中的數(shù)據(jù)不重復。

7)存儲過程:存儲過程是為完成特定的功能而匯集在一起的一組SQL程序語句,經(jīng)編譯后存儲在數(shù)據(jù)庫中的SQL程序。

8)觸發(fā)器:觸發(fā)器是一個用戶定義的SQL事務命令的集合。當對一個表進行插入、更改、刪除時,這組命令就會自動執(zhí)行。9)ER圖:實體關系圖10)范式:

第一范式:數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項;第二范式:要求實體的屬性完全依賴于主關鍵字primarykey:SelectCourse表(學號,姓名,年齡,課程名稱,成績,學分)1、數(shù)據(jù)冗余2、更新異常3、插入異常4、刪除異常

第三范式:數(shù)據(jù)表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數(shù)依賴;

11)事務特性:原子性、一致性、隔離性、持久性

設置oracle事務隔離界別:

settransactionisolationlevelserializable;未提交讀:事務A可以讀取事務B未提交的數(shù)據(jù)。提交讀:事務A只能讀取事務B提交了的數(shù)據(jù)

可重復讀:在同一個事務A里,先后執(zhí)行同一個查詢語句,得到的結果是一樣的。

序列化讀:事務A在執(zhí)行的時候不允許其他事務的執(zhí)行,隔離級別最高。12)SQL:結構化查詢語言,是操作關系型數(shù)據(jù)庫中的對象。

二、SQL語句

SQLStatement(SQL語句)

1)DDLDataDefinationLanguage數(shù)據(jù)庫定義語言create,alter,drop,truncate

2)DMLDataManagementLanguage數(shù)據(jù)庫操縱語言insert,upate,delete

3)DCLDataControlLanguage數(shù)據(jù)庫控制語言grantrevoke

4)TCLTransactionControlLanguage)數(shù)據(jù)庫事務控制語言commit,rollback,savepoint5)Select數(shù)據(jù)庫查詢語句Select

三、數(shù)據(jù)庫查詢

1、查詢操作

1)投影操作只查詢表的某些字段如:selectname,birthdayfromstudent;2)關聯(lián)操作多個表操作

3)選擇操作根據(jù)條件篩選記錄,可認為是添加了where子句

2、查詢語句

select[dintinct]{*,column[alias],}fromtablename;1)投影操作

①selecttable_namefromuser_tables;查詢系統(tǒng)表②desc表名;查看表的結構③去重復數(shù)據(jù)distinct

例:selectdistinctdept_id,titlefroms_emp;

這樣寫的話,distinct會管到后面的所有字段,即對所有字段排序后,再排重。即排重的是dept_id和title的組合。

在select語句中可以使用數(shù)學表達式。

selectfirst_name,salary*12froms_emp;④別名,三種方法

1、selectfirst_namenamefroms_emp;2、selectfirst_nameasnamefroms_emp;

3、selectfirst_name"firstname"froms_emp;如果別名中有空格或大小寫敏感,要把雙引號括起來;父查詢可調(diào)用子查詢的別名,當前查詢調(diào)用當前別名需要看執(zhí)行順序;雙引號別名調(diào)用時仍需雙引號但是內(nèi)部字母區(qū)分大小寫;且識別空格,有多少是多少;多個空格在顯示時只有一個空格,無空格則不顯示,這是和使用相區(qū)別;只有雙引號中能添加空格;若別名中有空格則加上””⑤字符串拼接使用||符號

selectfirst_name||’’||last_namefroms_emp;(||’’||無論哪里出現(xiàn)空格都對拼接無障礙且無空格顯示)

⑥空值的處理---nvl(column,defaultvalue)函數(shù)

selectfirst_name,12*salary*(1+nvl(commission_pct/100,0))froms_emp;nvl函數(shù)是指當?shù)谝粋參數(shù)column如果為空(null值)的話,Oracle就會默認為第二個參數(shù)defaultvalue的值,如果第一個參數(shù)不為空的話,就選擇第一個參數(shù)本身的值。

內(nèi)容區(qū)分大小寫;

2)選擇操作:

①排序orderby字段|別名|字段位置升序(asc)|降序(desc)

selectfirst_name,salaryfroms_emporderbysalary;默認的是升序②排序字段的空值處理

降序時null值排在前,升序時null排在后

selectfirst_name,salaryfroms_emporderbyfirst_name,salarydesc;按first_name升序排序,如果first_name相同,再按salary排序能夠觸發(fā)排序的關鍵字:distinct、orderby、groupby

3、where子句

where子句使用在select...from...后面,用來選擇所需(符合條件的)的記錄where后面跟的是表達式也就是XXX=XXX,XXXbetweenXandX,XXXin(X,X,X),like"..."等

請注意selectcolumnsfromtablewhereclause

是先from表再where條件,最后select出你要的字段。非數(shù)字類單引號引用;

1)通配查詢

between...and...表示結果在這區(qū)間之間,betweenand是一個閉區(qū)間,也就相當于...=...。

!=,,^=,這三個都是指不等于,且=,=,這些運算符也可以使用。

in(va1,val2,...)表示判斷結果是否在這個枚舉中存在,即每一個值都去匹配

like表示字符串通配查詢,"%"表示任意多個字符,"_",表示任意一個字符。注意:轉義的用法:like‘S\\_%’escape‘\\’;

escape指定義什么是轉義符,可以是任意的特殊符號,包括數(shù)字和字符串,但數(shù)字和字符串要是定義為轉義符會不會對操作造成影響需要考慮考慮。

2)邏輯符

and表示只有兩個或多個條件同時滿足。or表示條件只要滿足其中只一就可以。all表示條件都滿足時。

not表示是可以與以上的條件產(chǎn)生反效果。

空值會對notin造成影響,也就是不等于任何值,但是空值例外,空值跟任何值比較都為空。notin不包含空值,null不被算在內(nèi)。不包含在里面的值可能是有空值但是空值會被notin排除在。isnull表示判斷值是否為空。

注意:Oracle中的字符串是嚴格區(qū)分大小寫的。這里所謂的字符串是指數(shù)據(jù)表中的數(shù)據(jù)(信息)。

select{*,column[s][alias],...}在這里實現(xiàn)投影操作fromtable_name

[whereclause]查詢條件注意:[]表示這部分內(nèi)容可有可無[orderbycolumns(asc|desc)]排序子句

注意:[]表示這部分內(nèi)容可有可無;(|)選擇其一

四、單行函數(shù)

1、字符函數(shù)

lower(字段名)表示轉小寫,其中的參數(shù)可以是一個字符串常量或是一個字段名upper(字段名)表示轉每個單詞首字母大寫;initcap(字段名)表示首字母大寫;

concat(字段1,字段2)表示字符串拼接;(||’‘||)

substr(字段名,起始位置,取字符個數(shù))表示截取字符子串,位置是從1開始length(字段名)表示該字段的字符長度,打出字符串長度

例:selectsubstr(first_name,-2,2)subfroms_emp;(取后兩個)selectsubstr(first_name,2,2)subfroms_emp;(取前兩個)使用"-"表示取后面的字符串,取的時候仍是從左往右取。

2、數(shù)值函數(shù)

round(數(shù)據(jù),保留小數(shù)點后幾位)表示四舍五入

可以用負數(shù)表示小數(shù)點前,0,表示小數(shù)點后第一位,也就是保留個位,-1表示個位(保留到十位);小數(shù)點后面的位數(shù)可以為負數(shù);從小數(shù)點處開始數(shù),向左為負,向右為正。

例:selectround(15.36,1)fromdual;

trunc(數(shù)據(jù),保留的位數(shù)(小數(shù)點后位數(shù)))表示截取數(shù)字函數(shù),截取個位之后補0;小數(shù)點后面的位數(shù)可以為負數(shù);從小數(shù)點處開始數(shù),向左為負,向右為正。在邊截取整數(shù)位數(shù)字后補零;

例:selecttrunc(123.456,1)fromdual;

3、日期函數(shù)

日期格式,全日期格式世紀信息,年月日,時分秒。缺省日期格式,日-月-年dd-mon-rr

修改當前會話的日期格式,會按照指定的格式輸出日期

altersessionsetnls_date_format="yyyymmddhh24:mi:ss";返回當前日期sysdate

例:selectsysdatefromdual;

selectsysdate+1fromdual;獲得明天的日期,加1,單位是天日期是格式敏感的日期內(nèi)置函數(shù):

months_between(sysdate,addmonth(sysdate,5))//兩個月有多少天。add_months(sysdate,-5)在系統(tǒng)時間基礎上延遲5月add_months(sysdate,-5*12)在系統(tǒng)時間基礎上延遲5年last_day(sysdate)一個月最后一天

next_day(sysdate,’Friday’)下個星期星期幾

round(sysdate,’day’)不是四除五入,是過了中午的留下,不過的略掉trunc(sysdate,’month’)不到一月的都省略例:

round("25-MAY-95","MONTH")01-JUN-95round("25-MAY-95","YEAR")01-JAN-95trunc("25-MAY-95","MONTH")01-MAY-95trunc("25-MAY-95","YEAR")01-JAN-95

4、不同數(shù)據(jù)類型間轉換函數(shù)

將字符轉換成數(shù)字to_number("...")

將數(shù)字轉字符to_char(number,"fmt")fmt是數(shù)字格式將字符串轉成日期to_date("...","日期格式")例:selectto_char(to_date("201*1103","yyyymmdd"),"dd-month-yy")fromdual;

selectto_char(3456.789,"9,999.999")fromdept;變成一個字符串的格式,9是一種顯示格式,運行結果3,456.789除了9之外還可以寫0,本位上有的話直接寫,沒有的話補0

selectto_char(3456.78,"000,000.000")fromdept;運行結果003,456.780selectto_char(3456.78,"fm$99,000.000")fromdept;去除前面的空格

selectto_number("123.4")+3fromdept;有默認的轉換即去掉to_number,不同類型的轉換可以強行也可以自動(不是所有的都可以)

格式是9時:9的整數(shù)個數(shù)不能小于數(shù)字的整數(shù)位數(shù),小數(shù)部分沒有的話會補00時:0的整數(shù)個數(shù)不能小于數(shù)字的整數(shù)位數(shù),前后沒有的都補0

改變NLS_LANG的值讓輸出結果的貨幣單位是¥或$,需修改環(huán)境變量,臨時的即可

setenvNLS_LANG"SIMPLIFIEDCHINESE_CHINA.ZHS16GBK"setenvNLS_LANG"AMERICAN_AMERICA.US7ASCII"

在XP系統(tǒng)的瀏覽器或Oracle的PLSQL中可使用下面指令修改語言環(huán)境,之后并且要輸入commit提交:

ALTERSESSIONSETNLS_LANGUAGE=american;

ALTERSESSIONSETNLS_LANGUAGE="SIMPLIFIEDCHINESE";5、關聯(lián)操作①等值查詢:表之間的連接是通過相等的字段值連接起來的查詢稱為等值連接查詢。

查詢員工的名稱,部門名稱,地區(qū)名稱

selecte.first_name,d.name,r.namefroms_empe,s_deptd,s_regionrwheree.dept_id=d.idandd.region_id=r.id;查詢ben在那個部門那個地區(qū)上班

selecte.first_name,d.name,r.namefroms_empe,s_deptd,s_regionrwheree.dept_id=d.idandd.region_id=r.idandlower(e.first_name)="ben";

②非等值連接:連接條件使用除等于運算符以外的其它比較運算符,比較被連接的列的列值。這些運算符包括>、>=、e,s_empmwheree.manager_id=m.id(+);有(+)表示本方會為對方補空值注意條件(+)跟在要全部選出的一方,即一方比一方多余的記錄要輸出的加(+),不能使用in和or;

fromt1,t2wheret1.c1=t2.c2(+)把t1表中匹配不上的記錄重新找回來

fromt1,t2wheret1.c1(+)=t2.c2把t2表中匹配不上的記錄重新找回來Selfjoin自連接Fromt1,t2

Wheret1。C1=t2。C2(innerjoin)Fromt1,t2

Wheret1。C1=t2。C2(+)(outerjoin)T1表中匹配不上的記錄找回來Wheret1。C1(+)=t2。C2T2表中匹配不上的記錄找回來Outerjoin=innerjoin+匹配不上來的;

五、組函數(shù)

1、groupby表示分組函數(shù),having表示對查詢結果進行過濾

where子句用來篩選from子句中指定的操作所產(chǎn)生的行,不能跟組函數(shù)groupby子句用來分組where子句的輸出having子句用來從分組的結果中篩選行2、組函數(shù)

a)avg查詢平均值

b)count查詢記錄條件,參數(shù)可以是任何類型,忽略空值;多少條記錄不包含空值;

c)max查詢最大值,字符串從左邊第一個開始比,第一相同就比第二個,第一個不相同大的徘前面;d)min查詢最小值

e)sum查詢數(shù)字的和,貌似只用于數(shù)字,反正字符串不能用;所有組函數(shù)的計算都會忽略空值avg、sum只能用于數(shù)值類型3、注意:groupby子句也會觸發(fā)排序操作,會按分組字段排序,即使用orderby查詢提成平均值

selectavg(nvl(commission_pct,0))froms_emp;查詢員工分布在幾個不同的部門

selectcount(distinctdept_id)froms_emp;查詢42部門的平均工資

selectavg(salary)salaryfroms_empwheredept_id="42";查詢不同部門的平均工資

selecte.dept_id,avg(salary)froms_empegroupbye.dept_id;查詢不同部門不同職位的平均工資

selecte.dept_id,e.title,avg(salary)froms_empegroupbye.dept_id,e.title;

注意:當使用groupby語句時,select后面的只能是組函數(shù)和groupby后面的字段,若不使用groupby語句時,select后面的可以是普通字段或者全部是組函數(shù)

查詢不同部門不同職位的平均工資(要求顯示部門名稱)

selectd.name,e.title,avg(salary)froms_empe,s_deptdwheree.dept_id=d.idgroupbyd.name,e.title;

查詢不同部門的平均工資(要求顯示部門名稱)根據(jù)部門編號和部門名稱分組selecte.dept_id,d.name,avg(salary)froms_empe,s_deptdwheree.dept_id=d.idgroupbye.dept_id,d.name;求42部門的平均工資

selecte.dept_id,max(d.name),avg(salary)froms_empe,s_deptdwheree.dept_id=d.idandd.id=42groupbye.dept_id

4、SQL結構

SELECT{*,COLUMN1[ALIAS1],...}FROMTABLE_NAME

[WHERECLAUSE]查詢條件GROUPBYHAVING

[ORDERBYCLAUSE]排序子句

5、子查詢:就是可以嵌在任何的sql語句中的select語句,把子查詢的結果當做范圍再區(qū)查詢一遍

在select語句中嵌套子查詢時,會先執(zhí)行子查詢。一般的會將子查詢放在運算符的右邊

注意:在使用子查詢時,要注意這個運算符是單行的(也就是只能是單值),還是多行運算符(范圍,多值,in)。配合使用子查詢返回的結果必須符合運算符的用法

查詢和smith做同樣工作的員工

selectlast_namefroms_empwheretitle=(selecttitlefroms_empwherelower(last_name)="smith")andlower(last_name)"smith";

selectlast_namefroms_empwheretitlein(selecttitlefroms_empwherelower(last_name)="smith")andlower(last_name)"smith";如果能保證子查詢結果為單值可以用=,如果不確定可以用in

查詢大于32部門平均工資部門的平均工資

selectdept_id,avg(salary)froms_empgroupbydept_idhavingavg(salary)>(selectavg(salary)froms_empwheredept_id=32);查詢哪些人不是領導

selectfirst_namefroms_empwhereidnotin(selectmanager_idfroms_empwheremanager_idisnotnull);哪些員工的工資和本部門的平均工資一樣

selectfirst_name,dept_id,salaryfroms_empwhere(dept_id,salary)in(selectdept_id,avg(salary)froms_empgroupbydept_id);

6、rownum實現(xiàn)分頁oracle查詢前十條語句select*from(

selectA.*,rowmunrnfrom(select*froms_emp)Awhererowmun=1;查詢10~20條記錄select*from(

selecta.*,rownumrnfrom(select*froms_emp)a)

wherernbetween10and20;

From,where后面可以跟子查詢:SELECTfirst_name,salary

FROMs_empt1,(SELECTdept_id,AVG(salary)avgsalaryFROMs_empgroupbydept_id)t2WHEREt1.dept_id=t2.dept_idANDt1.salary>t2.avgsalary;

rownum:對于一個查詢返回的每一行,rownum偽列返回一個數(shù)值代表的次序。rownum偽列特點:

1)要么等于1要么小于某個值,不能直接等于某個值,不能大于某個值2)常用于分頁顯示

返回的第一行的rownum值為1,第二行的rownum值為2,依此類推。通過使用rownum偽列,用戶可以限制查詢返回的行數(shù)

如:select*froms_empwhererownum引用完整性約束

2、FK(ForeignKey外鍵約束)至少存在兩張表

把外鍵所在的表稱子表,其引用的表稱為父表,外鍵的一些規(guī)范約束,是在子表中設置外鍵,一定是與父表的主鍵對應先建父表,后建子表先刪子表,再刪父表

3、UK(UniqueKey唯一約束)唯一可以為空4、notnull非空約束

所謂的約束是指在建表的時候對字段設置,當插入(insert)數(shù)據(jù)時會根據(jù)約束對插入的數(shù)據(jù)進行檢查,例如某一字段為notnull,若插入該字段的記錄(數(shù)據(jù))是一個null值,就會報擦插入數(shù)據(jù)錯誤。把ER圖關系模式轉化成表關系:

一對多多的那邊做外鍵

多對多用中間表把兩個表連起來,學生表---課程表是多對多關系,需要建立一個中間表,學生選課表,這個包含兩個表的主鍵做為它的自己的聯(lián)合主鍵一對一外鍵加個唯一約束范式

第一范式(1NF):在關系模式R中的每一種具體關系r中,如果每個屬性值都是不可再分的最小數(shù)據(jù)單位,則稱R是第一范式的關系。

第一范式簡單的說就是要求屬性具有原子性,不可以再分,第一范式面臨的問題?引出第二范式

第二范式(2NF):如果關系模式R(U,F)中的所有非主屬性都完全依賴于任意一個候選關鍵字(可以使組合式的主鍵),則稱關系R是屬于第二范式。

第二范式簡單的說,就是每個表都有個主鍵,其他字段完全依賴于該主鍵,第二范式的問題?引出第三范式。

第三范式(3NF):如果關系模式R(U,F)中的所有非主屬性對任何候選關鍵字(即主鍵)都不存在傳遞依賴,則稱關系R是屬于第三范式。數(shù)據(jù)庫定義語言

a)數(shù)據(jù)庫對象:TableViewIndexSequenceb)建表定義表的數(shù)據(jù)結構數(shù)據(jù)類型varchar(n)可變類型,按實際數(shù)據(jù)的長度存儲char(n)定長,按定義的長度存儲

number(m,n)數(shù)值類型,可以定義寬度,也可以不定義寬度,默認缺省為38date日期類型,一定不能定義寬度

char類型是一個固定長度的類型,會補空位;varchar和varchar2都是可變的,varchar是sql的標準,再別的數(shù)據(jù)庫中都有,varchar2是oracle自身的標準。char類型最多的字符是4000個!

建表的時候請注意字段與字段之間用“,”分割,最后一個字段不需要“,”標示,所謂字段如下的c1、c2等,數(shù)據(jù)是指數(shù)據(jù)表實際存在的信息,可通過insert、update等實現(xiàn)數(shù)據(jù)信息持久

createtablesunzw_test(-----------創(chuàng)建表c1varchar2(10),c2char(10),c3number(3),c4date);

insertintosunzw_testvalues("sunzw","123",200,to_date("201*11412:34:12","rrrrmmddhh24:mi:ss"));---要注意數(shù)據(jù)格式和精確度createtablesunzw_test(

c1varchar2(10)constraintssunzw_test_pk_c1primarykey,---把c1設為主鍵,列級約束c2char(10),c3number(3),c4date);

createtablesunzw_test(c1varchar2(10),c2char(10),c3number(3),c4date,

constraintssunzw_test_pk_c1primarykey(c1)---表級約束);

注意:定義聯(lián)合主鍵時,只能用表級約束createtablesunzw_test(c1varchar2(10),c2char(10),c3number(3),c4date,

constraintssunzw_test_pk_c1(約束名可有可無)primarykey(c1,c2));

約束

NOTNULL約束(這個字段不允許為空)

createtablesunzw_test(c1numbernotnull,c2number);---為c1定義了非空約束

NOTNULL約束只能定義為列級約束

UNIQUE唯一約束

createtablesunzw_test(c1numberprimarykey,c2numberunique);---為c2定義唯一約束

唯一約束可以為空,唯一約束不考慮空值聯(lián)合主鍵約束,這時只能用表級約束createtablesunzw_test(c1number,c2number,

unique(c1,c2)---c1和c2聯(lián)合唯一);

PRIMARYKEY(主鍵約束)非空且唯一的定義

createtablesunzw_test(c1numberprimarykey,c2number);

createtablesunzw_test(c1numbernotnull,c2number,unique(c1));createtablesunzw_test(c1numberuniquenotnull,c2number);

父表:

createtablesunzw_parent(C1numberprimarykey,C2number);子表:

createtablesunzw_child(C1numberprimarykey,

C2numberreferencessunzw_parent(c1)---C2是parent表的外鍵);

先建父表,再建子表

錯誤

insertintosunzw_childvalues(1,1);---違反外鍵約束,因為父表中沒有c1為1的記錄讓子表引用正確

insertintosunzw_parentvalues(1,1);---先插父表insertintosunzw_childvalues(1,1);---后插子表注意:刪除表時,要先刪子表,再刪父表droptablesunzw_child;droptablesunzw_parent;或者

droptablesunzw_parentcascadeconstraints;級聯(lián)約束,這樣就刪掉了父表和子表的FK約束

表級約束定義格式

createtablesunzw_child(C1numberprimarykey,C2number,

foreignkey(c2)referencessunzw_parent(c1));

級聯(lián)刪除約束

createtablesunzw_child(C1numberprimarykey,

C2numberreferencessunzw_parent(c1)ondeletecascade---級聯(lián)刪除,刪除父表記錄時,會級聯(lián)把子表中的記錄刪除);C2是parent表的外鍵

createtablesunzw_child(C1numberprimarykey,

C2numberreferencessunzw_parent(c1)ondeletesetnull---級聯(lián)刪除,刪除父表的記錄時,會把子表中引用字段變?yōu)閚ull);

CHECK檢查約束(CK)定義一條件一約束字段列級定義:

createtablesunzw_child(C1numberprimarykey,C2numbercheck(c2>200));

表級定義:

createtablesunzw_child(C1numberprimarykey,

C2numbernotnull,---同check(c2isnotnull)和非空的效果一樣check(c2>200));

創(chuàng)建三張表學生表,課程表,選課表

droptablesunzw_studentcascadeconstraints;droptablesunzw_coursecascadeconstraints;droptablesunzw_stu_curcascadeconstraints;createtablesunzw_student(sidnumber(10)primarykey,namevarchar2(10),agenumber(2),sexvarchar2(2),birthdaydate);

createtablesunzw_course(cidnumber(10)primarykey,namevarchar2(50));

createtablesunzw_stu_cur(sidnumber(10),cidnumber(10),scorenumber(10),

primarykey(sid,cid),

foreignkey(sid)referencessunzw_student(sid),foreignkey(cid)referencessunzw_course(cid));

用已經(jīng)存在的表創(chuàng)建新的表createtablesunzw_empasselectid,first_name,last_name,salaryfroms_empwheredept_id=41;

只會把非空約束帶過來,其他的約束在建新表時會自動消掉,所以除非空約束外,其他約束還要自己再加,符合的數(shù)據(jù)也帶過來復制表的結構

createtablesunzw_empasselectid,first_name,last_name,salaryfroms_empwhere1=2;

1=2表示只取表結構,不要表中數(shù)據(jù)的建表方式,即表中的數(shù)據(jù)記錄

DROPTABLE刪除表

droptablesunzw_test1cascadeconstraitns;---刪除表時級聯(lián)刪除這個表的約束

TRUNCATETABLEtablename;TRUNCATE比DROP快,在刪除一個表中的全部數(shù)據(jù)時,須使用TRUNCATETABLE表名;因為用DROPTABLE或DELETEFROM表名時,TABLESPACE表空間該表的占用空間并未釋放,反復幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了

truncatetable刪除表中所有記錄,并釋放其占用的空間,執(zhí)行快數(shù)據(jù)不可恢復(不能commit)

deletefrom刪除表中所有記錄,不釋放其占用的空間,執(zhí)行慢

七、數(shù)據(jù)操縱語言(DML)

1、INSERT

INSERT一次只能插一條

INSERTINTOtablenmaeVALUES(colvalue,colvalue,);

INSERT語句中可以放函數(shù)inserttablenamevalues(12,sysdate)

INSERT可以只插入某個列的值,INSERTintotablenmae(sunzw_emp(列名))values(列值)

INSERT可能違反各種約束

2、UDPATE

UPDATEtablenameSETcolumn=value,column=valueWHEREcondition注意:如果不加where條件,修改可影響到所有的記錄,所有記錄將被修改只能一條一條跟新3、DELETE

DELETEFROMtablenameWHEREcondition;

用DELETE刪除一張表的記錄,刪除之后,數(shù)據(jù)還能找回來

更多關于DML的寫作規(guī)范及約束參考SQL語句.doc八、數(shù)據(jù)庫事務控制語言

銀行轉賬:A賬戶向B賬戶轉賬1000

Createtablesunzw_balance(idnumber(10),balancenumber(10));insertintosunzw_balancevalues(1,150000);insertintosunzw_balancevalues(2,40000);1向2轉賬10001如何轉賬:

updatesunzw_balancesetbalance=balance-1000whereid=1;updatesunzw_balancesetbalance=balance+1000whereid=2;

服務器中斷服務以及其它的原因都可能導致更新一個賬戶后,另一個賬戶沒有更新

如何保證兩個操作同時成功,同時失敗呢?要用事務來保證

updatesunzw_balancesetbalance=balance-1000whereid=1;updatesunzw_balancesetbalance=balance+1000whereid=2;commit|rollback;

commit提交將更新的數(shù)據(jù)保存到數(shù)據(jù)rollback回滾將數(shù)據(jù)恢復到修改前的狀態(tài)savepoint保存點

savepointpoint1;創(chuàng)建一個保存點

rollbacktopoint1;回滾到指定的保存點

注意:做DML操作中注意要提交或回滾事務DDL,DCL會自動做提交操作

數(shù)據(jù)庫事務是指作為單個邏輯工作單元執(zhí)行的一系列操作事物的四個特性atomic原子性

事務必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行

consistent一致性

事務在完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)insulation隔離性

由并發(fā)事務所作的修改必須與任何其它并發(fā)事務所作的修改隔離。事務查看數(shù)據(jù)時數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務修改它之前的狀態(tài),要么是另一事務修改它之后的狀態(tài),事務不會查看中間狀態(tài)的數(shù)據(jù)Duration持久性

事務完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持

事務能夠保證相關的一組事務一起成功或一起失敗有兩種級別的事務:

局部事務(數(shù)據(jù)庫的操作都是針對一個數(shù)據(jù)庫的同一個用戶)全局事務(分布式事務)(數(shù)據(jù)庫操作是針對多個數(shù)據(jù)庫或則一個數(shù)據(jù)庫的不同用戶下的表)

九、索引、序列、視圖

sequence給table解決pk問題

index給table解決select效率問題view看table的子集和超集

sequence,index,view都為table服務,

如果把表刪了,index就刪掉了,view會變成無效

1、偽列

偽列就像Oracle中的一個表列,但實際上它并未存儲在表中。偽列可以從表中查詢,但是不能插入、更新或刪除它們的值,常用的偽列:rowid和rownumrowid系統(tǒng)提供的偽列表示記錄的真實物理位置?梢允褂胷owid值來定位表中的一行,通常情況下,rowid值可以唯一地標識數(shù)據(jù)庫中的一行rowid偽列有以下重要用途:

1)能以最快的方式訪問表中的一行2)能顯示表的行是如何存儲的3)可以作為表中行的唯一標識

如:selectrowid,first_namefroms_emp;createtables_info_c(idnumber(3)primarykey,namevarchar2(10),agenumber(3));

insertintos_info_cvalues(1,"zhang",23);insertintos_info_cvalues(2,"sun",24);insertintos_info_cvalues(3,"liu",30);insertintos_info_cvalues(4,"sun",23);insertintos_info_cvalues(5,"zhang",21);刪除所有重復的記錄

deletefroms_info_cwherenamein(

selectnamefroms_info_cgroupbynamehavingcount(*)>1);

刪除重復記錄并保留其中一條記錄,下面的效率不高,通過自建一個副本操作,面試常考

deletefroms_info_cawhereid>(selectmin(id)froms_info_cbwherea.name=b.name);高效率

deletefroms_info_cawhererowid>(selectmin(rowid)froms_info_cbwherea.name=b.name);

rownum:對于一個查詢返回的每一行,rownum偽列返回一個數(shù)值代表的次序。rownum偽列特點:1)有個特點要么等于1要么小于某個值,不能直接等于某個值,不能大于某個值

2)常用于分頁顯示

返回的第一行的rownum值為1,第二行的rownum值為2,依此類推。通過使用rownum偽列,用戶可以限制查詢返回的行數(shù)

如:select*fromempwhererownum注:PK和UK系統(tǒng)在建表的時候會自動建立索引

查詢結果集很大重建索引

alterindexsunzw_index_namerebuild;

根據(jù)現(xiàn)有的索引重建一個新的索引,比刪掉索引重新建立索引要快,但是有空間消耗

查詢表上的索引

selectindex_name,index_type,uniquenessfromuser_indexeswheretable_name="SUNZW_STUDENT";

刪除索引,例從未出現(xiàn)過where子句,不經(jīng)常使用的最好刪除,降低維護開銷dropindexsunzw_index_name;

表達式(wherec1_1=1)或函數(shù)(whereround(c1)=1)會導致索引用不了,因為索引里記錄的是字段的值,可以建基于函數(shù)或表達式的索引,但這樣對索引做操作時目的是全表掃描

Createindextest_indexonsalary+1000

建索引createindextest_c1_indontest(c1)

FTSfulltablescan全表掃描:讀出所有記錄一個一個的匹配基于index的掃描

Rowid代表一條記錄的物理位置(包含一條記錄是屬于哪張表(屬于哪個Objectobject_id),是屬于哪個數(shù)據(jù)文件的(file_id)是屬于這個文件里德哪個數(shù)據(jù)塊(block_id)在這個block中的第幾條記錄(row_id))

索引時是樹形其中自有葉子是存放的值和rowID,查找類似二叉樹通過rowid快速檢索

降低IO數(shù)量

維護索引(update太多的表不宜建索引)

索引太多會降低效率因為要維護

Alterindextest_c1_indrebuild;(dropindexandcreateindex)兩個效果一樣,前這快但占空間大,后者慢占空間小從不用來定位的索引需刪掉

如果把表刪了,索引一定會被刪了

PKuk上是一定會有索引的,你不建數(shù)據(jù)庫會建索引里沒有Null,null必須全表掃描

索引一般條件:經(jīng)常會出現(xiàn)在連接字段例如FK,

經(jīng)常出現(xiàn)在where后面的

取值范圍特別大的(bitmapindex小指索引用得很少)字段里有很多null;

表越大結果集越小索引效果越好(大前提)

索引不一定快,索引是手段不合適條件:表比較小

不經(jīng)常使用的反復修改的應該dropindex的是:從未出現(xiàn)在where里面的索引類型:

唯一性索引:PKUkCreateuniqueindexxxxontest(c1)對表進行更新時重復值會報錯用來解決唯一性問題非唯一性索引:單列索引:

加快查詢效率

索引用不了:where后面跟表達式wherec1+0=1

Where后面跟函數(shù)whereround(c1)=1實在要用可根據(jù)函數(shù)或表達式建索引

Wherec1=‘1’,c1number能用

Wherec1=1.c1varchar2(10)不能用隱式轉換用到函數(shù)Wheresubstr(c1,1,2)=‘a(chǎn)b’不能用因為函數(shù)Wherec1like‘a(chǎn)b%’能用,這是范圍掃描

3、VIEW視圖

視圖就相當于一條select語句,定義了一個視圖就是定義了一個sql語句,視圖不占空間,使用視圖不會提高性能視圖的作用:1)簡化sql編寫

2)限制數(shù)據(jù)庫的訪問權限,保證表數(shù)據(jù)安全創(chuàng)建視圖:

createview視圖名;

Createviewxxxasselect*fromtestwherec1=1;可以descviewnameSelect*fromviewname

如:

createorreplaceviewtestasselect*fromtest1wherec1=1;createorreplace:如果view存在就覆蓋,不存在才創(chuàng)建force|noforce:基表存在時使用,不存在時則創(chuàng)建該表

注意:向視圖中插入數(shù)據(jù)時,會直接插進基表中,查看視圖中的數(shù)據(jù)時,相當于就是執(zhí)行創(chuàng)建時的select語句刪除視圖:

dropview視圖名;視圖的約束:

withreadonly視圖只讀約束

withcheckoption不允許插入與where條件不符的記錄,類似于check約束的功能

createviewtest_ccas

select*fromtestwherec1>10

withcheckoptionconstraintstest_check_op;聯(lián)合索引:createindexxxxxxontest(c1,c2)

聯(lián)合外建聯(lián)合主鍵經(jīng)常出現(xiàn)where。。。and。。。。需要建如果視圖存在表不存視圖無法使用

建表Createtabletest(c1number,c2number)Alterviewviewnamecompile自動做編譯視圖Selectcount(*)fromtest

SelectUser_viewsfromuser_viewswhereview_name=’viewname’可以看到視圖定義

Selectobject_name,statusfromUser_objectswhereobject_name=‘viewname’可以看到視圖狀態(tài)

Createviews_empasselect*fromhiloo。S_emp;hiloo擁有該表的賬戶Grantselectons_emptosd1007(所在賬戶)

Default字段不會為空,你不提供他會自己添加Oltp在線處理事務系統(tǒng)

4、Sequence序列

createsequencesunzw_s1;

selectsunzw_s1.nextvalfromdual;selectsunzw_s1.currvalfromdual;

創(chuàng)建一個sequence之后,先用sunzw_s1.nextval取一次,才能取到sunzw.s1.currval;

Sequence是個可共享的對象,多個表可以共用一個,用來產(chǎn)生主鍵值createsequencenameincrementbyn//步長startwithn開始值maxvaluen最大值

cycle|nocycle表示達到最大值后從頭開始cachen|nocache指定cache的值。如果指定CACHE值,oracle就可以預先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動再取一組到cache。使用cache或許會跳號,比如數(shù)據(jù)庫突然不正常down掉(shutdownabort),cache中的sequence就會丟失,所以可以在createsequence的時候用nocache防止這種情況。

order;--指定排序

selectsequence_name,cache_size,last_numberfromuser_sequenceswheresequence_namelike"SUNZW_S1";

查詢sequence的是不用緩存,緩存是指在sequence一次取多個數(shù)據(jù)放在內(nèi)在中

修改sequence

altersequencenameincrementbyn;刪除sequence

dropsequenceseqname;

隔離級別

四種讀的情況:dirty-read臟讀,committedread重復讀,repeatableread序列讀,serializableread(或是幻影phantomread)dirty-read:一個數(shù)據(jù)還沒有提交就能讀到

Committedread:一個事物提交了另一個事物才能讀到

Repeatableread:一個事物更改了一個記錄并提交后另一個事物仍然讀到修改前的記錄(oracle中沒有隔離級別支持它。。﹑hantomread:一個事物提交增加了一個記錄,另一事物前后兩次要求讀取相同oracle數(shù)據(jù)庫只有serializableread和Committedread

設置更高的隔離級別---settransactionisolationlevelserializable;此時在別的事物中更改記錄,改事物中記錄仍是原記錄

集合

union/unionall并集;union會去掉相交集合中的重復值,unionall不會去掉相交集合中的重復值,無論集合是否有交集union都會做去重的操作

selects.first_name,m.first_namefroms_empe,s_empmwheree.manager_id=m.idunionall

selectfirst_namefroms_empwheremanager_idisnullintersect交集也會自動去掉重復值minus

casewhen函數(shù)

selectfirst_name,salary,

casewhendept_id=31thensalary*1.1whendept_id=32thensalary*1.2whendept_id=33thensalary*1.3elsesalary

endasaft_salfroms_emp;

如果不在選擇范圍內(nèi)則返回原值

decode函數(shù)

selectfirst_name,salary,

decode(dept_id,31,salary*1.1,32,salary*1.2,

33,salary*1.3)asaft_sal(可以少as)froms_emp;

如果不在選擇范圍內(nèi)則返回空,格式:

decode(字段,條件1,結果1[,條件2,結果2])

selectfirst_name,max(salary),

max(decode(dept_id,31,salary*1.1))dept_31,max(decode(dept_id,32,salary*1.2))dept_32,max(decode(dept_id,33,salary*1.3))dept_33froms_emp

groupbyfirst_name;

EXISTS一檢測到符合的就返回執(zhí)行下一個manager_idSELECTlast_name,id,dept_idFROMs_empouterWHEREEXISTS(

SELECT"X"FROMS_EMP

WHEREmanager_id=outer.id);SELECTdnameFROMdeptwwWHEREEXISTS(SELECT9

FROMemp

WHEREdeptNO=ww.deptNO);

NOTEXISTS;原理與EXISTS相同有相同的就返回,只是一個是返回一個是過濾;繼續(xù)執(zhí)行下面的SELECTdnameFROMdeptww

WHEREEXISTS(SELECT9FROMemp

WHEREdeptNO=ww.deptNO);

差別在于帶not的有結果要求全部不相同,另一個只要有一個相同的就行EXISTS一檢測到符合的就返回執(zhí)行下一個manager_idSELECTlast_name,id,dept_idFROMs_empouterWHEREEXISTS(

SELECT"X"FROMS_EMP

WHEREmanager_id=outer.id);SELECTdnameFROMdeptwwWHEREEXISTS(SELECT9

FROMemp

WHEREdeptNO=ww.deptNO);

NOTEXISTS;原理與EXISTS相同有相同的就返回,只是一個是返回一個是過濾;繼續(xù)執(zhí)行下面的SELECTdnameFROMdeptwwWHEREEXISTS(

SELECT9FROMemp

WHEREdeptNO=ww.deptNO);

差別在于帶not的有結果要求全部不相同,另一個只要有一個相同的就行

字段名之間用逗號隔開表名與表名之間用逗號隔開

Selectname,jobfromyuangong,bumeng(name在yuangong表里,job在bumeng表里,兩張表里都有員工號)出現(xiàn)笛卡爾積每張表里各取一條信息相互匹配;

重復的字段名必須指出出處,且只能用表別名,前面用表別名where處也要用表別名,FORM處不用表別名where處也可以不用;字段別名不可用

=注意等號位置等號位置和字段無關Count(*)統(tǒng)計記錄數(shù),有空值Count(dde)無空值記錄數(shù);有列名

Where后面只能跟單行函數(shù),組函數(shù)不可以因為where子句過濾的是記錄

Having后面跟的是組函數(shù)

先執(zhí)行子查詢,當子查詢返回多個值時,完成去重,然后將結果返回主查詢,再執(zhí)行主查詢設

置變量

setenv

NLS_LANG.S/MPLIFID.CHINESE_CHINA.2HS16GBK?默認設置setenvNLS_LANG.USTASCⅡ

WHERE必須在GROUPBY前面SELECT后面有一個組函數(shù)其他就必須都是組函數(shù),否則報錯誤;

Vsrcher2按字符串的實際長度存;字段取值不定長,一定有寬度Char按字符竄的定義長度存,不足的不空格;字段取值定長;沒到長度系統(tǒng)會自動補

INSERT數(shù)據(jù)按四舍五入小數(shù)位,且無視小數(shù)位數(shù),只取規(guī)定位,而且小數(shù)位四舍五入;整數(shù)位多了報錯;Date一定不能定義寬度;

腳本文件:craetetabletable_namesyntax每條命令后面加“;“然后加commit

Sqlpulssd0907/se0907@test.sql最后的“0907“后面要加空格然后再寫;已運行直接寫文件名

Createtabletable_name()ASsubquery;(查詢語句)該表直接由查詢返回結果決定,拷貝的數(shù)據(jù)和非空約束其他沒有;

Intsertintotablename(id,last_name,salary,title)Selectlast_name,salary,titlefroms_emp;Wherestart_date1000orderbysalarydesc,commission_pctasc(執(zhí)行順序fromwhere-select--order)null最大

Selectlower(‘SQLCourse’)froms_emp;lower小寫upper大寫如果用于條件語句,在條件上寫即可To_number(‘a(chǎn)b’,’xx’)

To_char(salary,’$99.999.99’)不并長前面無0To_char(salary,’$00.000.00’)并長前面有0

$可以不寫,想表示¥,寫L(須改變相應的環(huán)境變量),不能直接寫¥,只能是0或9

selectfirst_namefroms_empwheredept_id="42"selectfirst_namefroms_empwheredept_id=42to_number(‘42’)==42selectto_number("ab")froms_emp錯誤

selectto_number("ab","xx")froms_emp十六進制-十進制(171=10*16+11)

allNotbetweenNotinNotLikeIsNotNull

Where條件一AND條件2OR條件3;等價于(滿足條件一和條件二的)或者滿足條件3的

Where條件一AND(條件2OR條件3)等價于{(滿足條件一和條件二)或者(條件一和條件三)}nvl的兩個參數(shù)必須為相同類型表達字符和字符串使用‘’,

echo$ORACLE_SID.\\得到數(shù)據(jù)庫實例的名字

sqlplusesd1007/esd1007數(shù)據(jù)庫連接(本地方式)一定要設置環(huán)境變量sentenvPATH:$ORACLE_HOME/bin在vi(edit)中寫命令時不可以加;在終端上寫命令是要加;

Sqlpluscommanddesc表名=describe表名

select列名from表名;(小心分號)

selectsalary*12,first_namefroms_empwheresalary>1200先做where

selectsalary*12,first_namefroms_empwheresalary*121000這個快

where子句不可以做別名;

wheredept_idin(32,42,31)等于wheredept_id=any(32,42,31);等于wheredept_id=32,or條件2or條件3;

友情提示:本文中關于《oracle總結》給出的范例僅供您參考拓展思維使用,oracle總結:該篇文章建議您自主創(chuàng)作。

來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。


oracle總結》由互聯(lián)網(wǎng)用戶整理提供,轉載分享請保留原作者信息,謝謝!
鏈接地址:http://www.seogis.com/gongwen/712071.html