1. oracle sql 語句 面試題
(1)統計有學生選修的課程門數
select count(distinct c#) from SC
2)求選修C4課程的女學生的平均年齡
select avg(s.age) --最好都帶上前綴,養成好習慣
from s,c,sc where s.s#=sc.s# and c.c#=sc.c#
and c.cname='C4' and s.sex='女'--字元類型帶引號,必須注意大小寫,你那麼寫好麻煩
3)求劉老師所授的課程的每門課程的平均成績
select c.cname , avg(grade) from sc , c
where c.teacher =' liu' and sc.c# = c.c#
group by c.cname --select後是什麼欄位,這地方你也得最少有這個欄位
(4)統計每門課程的學生選修人數(超過10人的課程才統計)。要求顯示課程號和人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列。
select t.*
from
(select sc.c#, count(s#) counnt_s from s,sc where s.s# = sc.s# group by sc.c# having count(s#) >10) t
order by counnt_s desc,c# asc --你排序不對,另外oracle不可根據別名排序,只可再做嵌套
5)檢索學號比王軍同學大,而年齡比他小的學生姓名
select a.s#
from
(select s# from s where s#>(select s# from s where sname='王軍') a,
select s# from s where age>(select age from s where sname='王軍') b
where a.s#=b.s#
6)求年齡大於女同學平均年齡的男學生的姓名和年齡
select sname,age from s
where age>
(select avg(age) from s where sex = 'nv') and sex = 'nan' --沒問題
7)求年齡大於所有女同學年齡的男學生的姓名和年齡
select sname ,age from s
where age>(select max(age) from s where sex = 'nv') and sex = 'nan' --沒問題
2. ORACLE資料庫面試題
1.
update
t
set
logdate=to_date('2003-01-01','yyyy-mm-dd')
where
logdate=to_date('2001-02-11','yyyy-mm-dd');
2.
select
*
from
t
where
name
in
(select
name
from
t
group
by
name
having
coung(*)>1)
order
by
name;--沒說清楚,到底是升序還是降序
3.
select
ID,NAME,ADDRESS,PHONE,LOGDATE
from
(
select
t.*,row_number()
over(partition
by
name
order
by
name)
rn
from
t
)
where
rn
=
1;
4.
update
t
set
(address,phone)=
(select
address,phone
from
e
where
e.name=t.name);
5.
select
*
from
t
where
rownum
<=5
minus
select
*
from
t
where
rownum
<=2;
也沒什麼特別的地方,有些題目用oracle特有的函數去做會比較簡單,像在第三題中用到的oracle的分析函數,以及在第一題中用到的oracle的to_char()函數。
這幾個題目主要是看你能不能使用oracle的函數去處理
3. Oracle資料庫面試題,求解
select GoodName as 物品,sum(Qty) as 進貨數量 from GoodDtl where Cls = '進' group by GoodName; --tab1
select GoodName as 物品,sum(Qty) as 出貨數量 from GoodDtl where Cls = '出' group by GoodName;--tab2
select 物品,tab1. 進貨數量,tab2.出貨數量,tab1. 進貨數量-tab2.出貨數量 as 當前庫存
from
(select GoodName as 物品,sum(Qty) as 進貨數量 from GoodDtl where Cls = '進' group by GoodName) tab1,
(select GoodName as 物品,sum(Qty) as 出貨數量 from GoodDtl where Cls = '出' group by GoodName) tab2
where tab1.物品 = tab2.物品;
4. oracle面試題
3.select ename,(select ename from emp where empno in(a.mgr)) from emp a ;
整個查詢分為子查詢和父查詢,(select ename from emp where empno in(a.mgr))為子查詢,emp a指的是員工表,a為這個查詢為emp表指定的別名,知道了a
代表什麼,a.mgr就好理解了,a.mgr其實就是emp.mgr,表示emp員工表中的mgr(上級編號)欄位,emp表中記錄了員工及員工上級的信息,a.mgr就用來指明員工
的上級的編號,然後輸出員工姓名及他上級姓名。
6.雖然dname和ename在不同的兩張表中,但是通過語句where deptno in(a.deptno)將兩張表的信息關聯上了,這樣就能得到員工姓名及該員工所在的部門名稱。
14.a.deptno,b.deptno分別代表部門表中的部門編號欄位和員工表中的部門編號欄位,它們的作用是將獨立的部門表和員工表中的信息關聯起來,令兩個表的信息
一一對應起來,emp b用來輸出ename,sal欄位,b為emp表在查詢中的別名,可以任意命名,因為a這個名稱已經賦予給dept這個表,若再將a賦予emp表,則會造成
資料庫無法識別a代表的是dept表還是emp表,所以此處命名為b而不是a。
16.group by有分類作用,此處表示,安裝job的類型將查詢結果分為幾類,每一類工作中包含很多不同的工資,然後用min函數從裡面選出最小的工資,當需要對
查詢結果進行聚合時,便可使用group by語句,其後緊跟聚合函數外的所有欄位,比如此處的job欄位。
5. Oracle資料庫的數據提取(一道面試題)
--建立臨時視圖1,檢索每個部門第一名分數
create
or
replace
view
temp_v1
as
select
部門號,max(成績)
as
成績
from
Employee
group
by
部門號;
--在臨時視圖1的基礎上建立臨時視圖2,檢索第二名分數
create
or
replace
view
temp_v2
as
select
部門號,max(成績)
as
成績
from
Employee
where
(部門號,成績)
not
in
(select
*
from
temp_v1)
group
by
部門號;
--聯合兩個臨時視圖的查詢結果,建立臨時視圖3
create
or
replace
view
temp_v3
as
select
*
from
(select
*
from
temp_v1
union
select
*
from
temp_v2)
order
by
部門號,成績;
--建立目標視圖
create
or
replace
view
VdepEm2
as
select
部門號,員工號,成績
from
Employee
where(部門號,成績)
in
(select
*
from
temp_v3);
*******************
昨天有點事情耽擱了,這個應該可以實現你的要求。如果不允許建立臨時視圖的話,你把這幾個臨時視圖糅進去就可以了。
6. oracle資料庫面試題,如下,求解!
1
proct主鍵id
顧客表主鍵acid
商品交易表為聯合主鍵(acid+id),同時acid和id分別是顧客表和商品表的外鍵
2
selectb.acname,b.acadress
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='李子'
3
selectt1.acname
from
(selectb.acname
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='李子')t1,
(selectb.acname
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='蘋果')t2
wheret1.acname=t2.acname4
selectb.acname,
sum(casewhentype='家電'thena.price*c.amountelse0end)as家電價格,
sum(casewhentype='水果'thena.price*c.amountelse0end)as水果價格
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
groupbyb.acname
7. oracle 資料庫的問題,如下,是面試題當時我只知道一點而已,怎麼寫
第四題:用goldengate或者是dataguard
8. oracle幾道簡單面試題,請大俠幫忙
1,資料庫遷移需要考慮的問題很多,這個一句兩句也說不完;
2,首先考慮的就是數據量,如果是小表,沒有索引反而訪問還要快一些。
3,權衡全表還是走索引,看SQL的執行計劃就可以了;
4,這個資料庫對象是用在兩個資料庫之間聯接,交換,查詢數據用的。
5,去資料庫里查鎖住的進程,殺了就可以了。之後再分析原因。
6,分區表是數據量大於1.5gb以上才用的吧。
7,臨時表空間當然會滿,查視圖也是一樣的。
8,開了歸檔就相當於win系統的設置里開了系統還原一樣。
9,redo這個設置要看實際情況,根據主機CUP處理能力,資料庫優化參數等因素決定的。
9. oracle面試題(2)
三號題選A,blob和clob都是大對象數據類型,4000位元組數據限制是在已被建議不再使用的long/long-raw中的限制,lob類型沒有4000位元組限制。clob 指 charactor lob,blob 指 binary lob,因此 clob 只能存放字元型數據,而 blob 沒有限制。
四號題應該選 D, bfile代表文件,但是不想 lob 類型內容是存放在資料庫表內部的,而是存放在資料庫所在主機的文件系統中,因此 bfile 不是大對象。