- 相關(guān)推薦
oracle(甲骨文)大量筆試題
1、表:table1(FId,Fclass,Fscore),用最高效最簡(jiǎn)單的SQL列出各班成績(jì)最高的列表,顯示班級,成績(jì)兩個(gè)字段。
select fclass,max(fscore) from table1 group by fclass,fid
2、有一個(gè)表table1有兩個(gè)字段FID,Fno,字都非空,寫(xiě)一個(gè)SQL語(yǔ)句列出該表中一個(gè)FID對應多個(gè)不同的Fno的紀錄。
類(lèi)如:
101a1001
101a1001
102a1002
102a1003
103a1004
104a1005
104a1006
105a1007
105a1007
105a1007
結果:
102a1002
102a1003
104a1005
104a1006
select t2.* from table1 t1, table1 t2 where t1.fid = t2.fid and t1.fno <> t2.fno;
3、有員工表empinfo
(
Fempno varchar2(10) not null pk,
Fempname varchar2(20) not null,
Fage number not null,
Fsalary number not null
);
假如數據量很大約1000萬(wàn)條;寫(xiě)一個(gè)你認為最高效的SQL,用一個(gè)SQL計算以下四種人:
fsalary>9999 and fage > 35
fsalary>9999 and fage < 35
fsalary <9999 and fage > 35
fsalary <9999 and fage < 35
每種員工的數量;
select sum(case when fsalary > 9999 and fage > 35
then 1
else 0end) as "fsalary>9999_fage>35",
sum(case when fsalary > 9999 and fage < 35
then 1
else 0
end) as "fsalary>9999_fage<35",
sum(case when fsalary < 9999 and fage > 35
then 1
else 0
end) as "fsalary<9999_fage>35",
sum(case when fsalary < 9999 and fage < 35
then 1
else 0
end) as "fsalary<9999_fage<35"
from empinfo;
4、表A字段如下
month person income
月份 人員 收入
要求用一個(gè)SQL語(yǔ)句(注意是一個(gè))的處所有人(不區分人員)每個(gè)月及上月和下月的總收入
要求列表輸出為
月份 當月收入 上月收入 下月收入
MONTHS PERSON INCOME
---------- ---------- ----------200807 mantisXF 5000200806 mantisXF2 3500200806 mantisXF3 3000200805 mantisXF1 2000200805 mantisXF6 2200200804 mantisXF7 1800200803 8mantisXF 4000200802 9mantisXF 4200200802 10mantisXF 3300200801 11mantisXF 4600200809 11mantisXF 6800
11 rows selected
select months, max(incomes), max(prev_months), max(next_months)
from (select months,
incomes,
decode(lag(months) over(order by months),
to_char(add_months(to_date(months, 'yyyymm'), -1), 'yyyymm'), lag(incomes) over(order by months), 0) as prev_months, decode(lead(months) over(order by months), to_char(add_months(to_date(months, 'yyyymm'), 1), 'yyyymm'), lead(incomes) over(order by months), 0) as next_months from (select months, sum(income) as incomes from a group by months) aa) aaagroup by months;
MONTHS MAX(INCOMES) MAX(PREV_MONTHS) MAX(NEXT_MONTHS)---------- ------------ ---------------- ----------------200801 4600 0 7500200802 7500 4600 4000200803 4000 7500 1800200804 1800 4000 4200200805 4200 1800 6500200806 6500 4200 5000200807 5000 6500 0200809 6800 0 0
5,表B
C1 c2
2005-01-01 1
2005-01-01 3
2005-01-02 5
要求的處數據
2005-01-01 4
2005-01-02 5
合計 9
試用一個(gè)Sql語(yǔ)句完成。
select nvl(to_char(t02,'yyyy-mm-dd'),'合計'),sum(t01)from test
group by rollup(t02)
6,數據庫1,2,3 范式的概念與理解。
7,簡(jiǎn)述oracle行觸發(fā)器的變化表限制表的概念和使用限制,行觸發(fā)器里面對這兩個(gè)表有什么限制。
8、oracle臨時(shí)表有幾種。
臨時(shí)表和普通表的主要區別有哪些,使用臨時(shí)表的主要原因是什么?
9,怎么實(shí)現:使一個(gè)會(huì )話(huà)里面執行的多個(gè)過(guò)程函數或觸發(fā)器里面都可以訪(fǎng)問(wèn)的全局變量的效果,并且要實(shí)現會(huì )話(huà)間隔離?
10,aa,bb表都有20個(gè)字段,且記錄數量都很大,aa,bb表的X字段(非空)上有索引,
請用SQL列出aa表里面存在的X在bb表不存在的X的值,請寫(xiě)出認為最快的語(yǔ)句,并解譯原因。
11,簡(jiǎn)述SGA主要組成結構和用途?
12什么是分區表?簡(jiǎn)述范圍分區和列表分區的區別,分區表的主要優(yōu)勢有哪些?
13,背景:某數據運行在archivelog,且用rman作過(guò)全備份和數據庫的冷備份,
且所有的歸檔日志都有,現控制文件全部損壞,其他文件全部完好,請問(wèn)該怎么恢復該數據庫,說(shuō)一兩種方法。
14,用rman寫(xiě)一個(gè)備份語(yǔ)句:備份表空間TSB,level 為2的增量備份。
15,有個(gè)表a(x number(20),y number(20))用最快速高效的SQL向該表插入從1開(kāi)始的連續的1000萬(wàn)記錄。
1、表:table1(FId,Fclass,Fscore),用最高效最簡(jiǎn)單的SQL列出各班成績(jì)最高的列表,顯示班級,成績(jì)兩個(gè)字段。
2、有一個(gè)表table1有兩個(gè)字段FID,Fno,字都非空,寫(xiě)一個(gè)SQL語(yǔ)句列出該表中一個(gè)FID對應多個(gè)不同的Fno的紀錄。
類(lèi)如:
101 a1001
101 a1001
102 a1002
102 a1003
103 a1004
104 a1005
104 a1006
105 a1007
105 a1007
105 a1007
結果:
102 a1002
102 a1003
104 a1005
104 a1006
3、有員工表empinfo
(
Fempno varchar2(10) not null pk,
Fempname varchar2(20) not null,
Fage number not null,
Fsalary number not null
);
假如數據量很大約1000萬(wàn)條;寫(xiě)一個(gè)你認為最高效的SQL,用一個(gè)SQL計算以下四種人:
fsalary>9999 and fage > 35
fsalary>9999 and fage < 35
fsalary<9999 and fage > 35
fsalary<9999 and fage < 35
每種員工的數量;
4、表A字段如下
month person income
月份 人員 收入
要求用一個(gè)SQL語(yǔ)句(注意是一個(gè))的處所有人(不區分人員)每個(gè)月及上月和下月的總收入
要求列表輸出為
月份 當月收入 上月收入 下月收入
5,表B
C1 c2
2005-01-01 1
2005-01-01 3
2005-01-02 5
要求的處數據
2005-01-01 4
2005-01-02 5
合計 9
試用一個(gè)Sql語(yǔ)句完成。
6,數據庫1,2,3 范式的概念與理解。
7,簡(jiǎn)述oracle行觸發(fā)器的變化表限制表的概念和使用限制,行觸發(fā)器里面對這兩個(gè)表有什么限制。
8、oracle臨時(shí)表有幾種。
臨時(shí)表和普通表的主要區別有哪些,使用臨時(shí)表的主要原因是什么?
9,怎么實(shí)現:使一個(gè)會(huì )話(huà)里面執行的多個(gè)過(guò)程函數或觸發(fā)器里面都可以訪(fǎng)問(wèn)的全局變量的效果,并且要實(shí)現會(huì )話(huà)間隔離?
10,aa,bb表都有20個(gè)字段,且記錄數量都很大,aa,bb表的X字段(非空)上有索引,
請用SQL列出aa表里面存在的X在bb表不存在的X的值,請寫(xiě)出認為最快的語(yǔ)句,并解譯原因。
11,簡(jiǎn)述SGA主要組成結構和用途?
12什么是分區表?簡(jiǎn)述范圍分區和列表分區的區別,分區表的主要優(yōu)勢有哪些?
13,背景:某數據運行在archivelog,且用rman作過(guò)全備份和數據庫的冷備份,
且所有的歸檔日志都有,現控制文件全部損壞,其他文件全部完好,請問(wèn)該怎么恢復該數據庫,說(shuō)一兩種方法。
14,用rman寫(xiě)一個(gè)備份語(yǔ)句:備份表空間TSB,level 為2的增量備份。
15,有個(gè)表a(x number(20),y number(20))用最快速高效的SQL向該表插入從1開(kāi)始的連續的1000萬(wàn)記錄。
答案:
1、select Fclass,max(Fscore) from table1 group by Fclass
2、select * from table1 where FID in (select FID from table1 group by FID having (count(Distinct Fno))>=2)
3、select sum(case when fsalary>9999 and fage>35 then 1 else 0 end),
sum(case when fsalary>9999 and fage<35 then 1 else 0 end),
sum(case when fsalary<9999 and fage>35 then 1 else 0 end),
sum(case when fsalary<9999 and fage<35 then 1 else 0 end) from empinfo
4、
Select (Select Month From Table Where Month = To_Char(Sysdate, 'mm')) 月份,
(Select Sum(Income) From Table Where Month = To_Char(Sysdate, 'mm')) 當月收入,
(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sysdate)) - 1) 上月收入,
(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sysdate)) 1) 下月收入
From Dual
5、select nvl(c1,'合計'),sum(c2) from B group by rollup(c1)
6.
關(guān)系數據庫設計之時(shí)是要遵守一定的規則的。尤其是數據庫設計范式
簡(jiǎn)單介紹1NF(第一范式),2NF(第二范式),3NF(第三范式),
第一范式(1NF):在關(guān)系模式R中的每一個(gè)具體關(guān)系r中,如果每個(gè)屬性值 都是不可再分的最小數據單位,則稱(chēng)R是第一范式的關(guān)系。
例:如職工號,姓名,電話(huà)號碼組成一個(gè)表(一個(gè)人可能有一個(gè)辦公室電話(huà) 和一個(gè)家里電話(huà)號碼) 規范成為1NF有三種方法:
一是重復存儲職工號和姓名。這樣,關(guān)鍵字只能是電話(huà)號碼。
二是職工號為關(guān)鍵字,電話(huà)號碼分為單位電話(huà)和住宅電話(huà)兩個(gè)屬性
三是職工號為關(guān)鍵字,但強制每條記錄只能有一個(gè)電話(huà)號碼。
以上三個(gè)方法,第一種方法最不可取,按實(shí)際情況選取后兩種情況。
第二范式(2NF):如果關(guān)系模式R(U,F)中的所有非主屬性都完全依賴(lài)于任意一個(gè)候選關(guān)鍵字,則稱(chēng)關(guān)系R 是屬于第二范式的。
例:選課關(guān)系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學(xué)號, CNO為課程號,GRADEGE 為成績(jì),CREDIT 為學(xué)分。 由以上
條件,關(guān)鍵字為組合關(guān)鍵字(SNO,CNO)
在應用中使用以上關(guān)系模式有以下問(wèn)題:
a.數據冗余,假設同一門(mén)課由40個(gè)學(xué)生選修,學(xué)分就 重復40次。
b.更新異常,若調整了某課程的學(xué)分,相應的元組CREDIT值都要更新,有可能會(huì )出現同一門(mén)課學(xué)分不同。
c.插入異常,如計劃開(kāi)新課,由于沒(méi)人選修,沒(méi)有學(xué)號關(guān)鍵字,只能等有人選修才能把課程和學(xué)分存入。
d.刪除異常,若學(xué)生已經(jīng)結業(yè),從當前數據庫刪除選修記錄。某些門(mén)課程新生尚未選修,則此門(mén)課程及學(xué)分記錄無(wú)法保存。
原因:非關(guān)鍵字屬性CREDIT僅函數依賴(lài)于CNO,也就是CREDIT部分依賴(lài)組合關(guān)鍵字(SNO,CNO)而不是完全依賴(lài)。
解決方法:分成兩個(gè)關(guān)系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新關(guān)系包括兩個(gè)關(guān)系模式,它們之間通過(guò)SCN中
的外關(guān)鍵字CNO相聯(lián)系,需要時(shí)再進(jìn)行自然聯(lián)接,恢復了原來(lái)的關(guān)系
第三范式(3NF):如果關(guān)系模式R(U,F)中的所有非主屬性對任何候選關(guān)鍵字都不存在傳遞信賴(lài),則稱(chēng)關(guān)系R是屬于第三范式的。
例:如S1(SNO,SNAME,DNO,DNAME,LOCATION) 各屬性分別代表學(xué)號,
姓名,所在系,系名稱(chēng),系地址。
關(guān)鍵字SNO決定各個(gè)屬性。由于是單個(gè)關(guān)鍵字,沒(méi)有部分依賴(lài)的問(wèn)題,肯定是2NF。但這關(guān)系肯定有大量的冗余,有關(guān)學(xué)生所在的幾個(gè)
屬性DNO,DNAME,LOCATION將重復存儲,插入,刪除和修改時(shí)也將產(chǎn)生類(lèi)似以上例的情況。
原因:關(guān)系中存在傳遞依賴(lài)造成的。即SNO -> DNO。 而DNO -> SNO卻不存在,DNO -> LOCATION, 因此關(guān)鍵遼 SNO 對 LOCATIO
N 函數決定是通過(guò)傳遞依賴(lài) SNO -> LOCATION 實(shí)現的。也就是說(shuō),SNO不直接決定非主屬性L(fǎng)OCATION。
解決目地:每個(gè)關(guān)系模式中不能留有傳遞依賴(lài)。
解決方法:分為兩個(gè)關(guān)系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:關(guān)系S中不能沒(méi)有外關(guān)鍵字DNO。否則兩個(gè)關(guān)系之間失去聯(lián)系。
7.
變化表mutating table
被DML語(yǔ)句正在修改的表
需要作為DELETE CASCADE參考完整性限制的結果進(jìn)行更新的表也是變化的
限制:對于Session本身,不能讀取正在變化的表
限制表constraining table
需要對參考完整性限制執行讀操作的表
限制:如果限制列正在被改變,那么讀取或修改會(huì )觸發(fā)錯誤,但是修改其它列是允許的。
8.
在Oracle中,可以創(chuàng )建以下兩種臨時(shí)表:
a。會(huì )話(huà)特有的臨時(shí)表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT PRESERVE ROWS;
b。事務(wù)特有的臨時(shí)表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的臨時(shí)表雖然是存在的,但是你試一下insert 一條記錄然后用別的連接登上去select,記錄是空的,明白了吧。
下面兩句話(huà)再貼一下:
--ON COMMIT DELETE ROWS 說(shuō)明臨時(shí)表是事務(wù)指定,每次提交后ORACLE將截斷表(刪除全部行)
--ON COMMIT PRESERVE ROWS 說(shuō)明臨時(shí)表是會(huì )話(huà)指定,當中斷會(huì )話(huà)時(shí)ORACLE將截斷表。
9.--個(gè)人理解就是建立一個(gè)包,將常量或所謂的全局變量用包中的函數返回出來(lái)就可以了,摘抄一短網(wǎng)上的解決方法
Oracle數據庫程序包中的變量,在本程序包中可以直接引用,但是在程序包之外,則不可以直接引用。對程序包變量的存取,可以為每個(gè)變量配套相應的存儲過(guò)程<用于存儲數據>和函數<用于讀取數據>來(lái)實(shí)現。
【oracle(甲骨文)大量筆試題】相關(guān)文章:
oracle筆試題及答案08-16
oracle 技術(shù)筆試題07-31
oracle Management Trainee筆試題07-31
oracle financials developer筆試題07-31
Oracle Management Trainee英文筆試題07-31
Oracle OCP認證考試題庫05-18