Oracle 資料庫開發面試題
最近參加了數場面試,總結一下競聘Oracle 開發崗位最常問到哪些問題:
1、delete 與 truncate 區別?
1)truncate 是DDL語句,delete 是DML語句;
2)truncate 速度遠快於 delete;
原因是:當我們執行delete操作時所有表資料先被copy到復原資料表空間,資料量不同花費時間長短不一。而truncate是直接刪除資料不進復原資料表空間。
3)接(2)這也就導致了delete資料後我們可以運行rollback進行資料復原,而truncate則是永久刪除不能復原;
4)truncate 操作不會觸發表上的delete觸發器,而delete會正常觸發;
5)truncate語句不能帶where條件意味著只能全部資料刪除,而delete可刪除部分資料;
6)truncate 操作會重設表的高水位線(High Water Mark),而delete不會。
ps: 有關高水位線HWM知識清參考文章:
Linux-6-64下安裝Oracle 12C筆記
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2
2、解釋一下資料庫三範式?
請參考:
3、NVL與NVL2兩個函數的用法和區別?
NVL (expr1, expr2):expr1為NULL,返回expr2;不為NULL,返回expr1。注意兩者的類型要一致
NVL2 (expr1, expr2, expr3) :expr1不為NULL,返回expr2;為NULL,返回expr3。expr2和expr3類型不同的話,expr3會轉換為expr2的類型
看一下官方樣本:commsion即為工資提成
HR@orcl> SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable')
2 "COMMISSION" FROM employees
3 WHERE last_name LIKE 'B%'
4 ORDER BY last_name;
LAST_NAME COMMISSION
------------------------- ----------------------------------------
Baer Not Applicable
Baida Not Applicable
Banda .1
Bates .15
Bell Not Applicable
Bernstein .25
Bissot Not Applicable
Bloom .2
Bull Not Applicable
HR@orcl> SELECT last_name, salary, NVL2(commission_pct,
2 salary + (salary * commission_pct), salary) income
3 FROM employees WHERE last_name like 'B%'
4 ORDER BY last_name;
LAST_NAME SALARY INCOME
------------------------- ---------- ----------
Baer 10000 10000
Baida 2900 2900
Banda 6200 6820
Bates 7300 8395
Bell 4000 4000
Bernstein 9500 11875
Bissot 3300 3300
Bloom 10000 12000
Bull 4100 4100