當前位置:首頁 » 編程語言 » oraclesql面試題及答案
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oraclesql面試題及答案

發布時間: 2022-07-29 10:07:27

Ⅰ java,oracle面試題,如下,sql怎麼寫

如題我先進行分析:

  1. 第一句話中按月找出平均 填寫時間大於3天的人員信息 :

    那麼可用理解為 根據月份查找 員工平均延遲填寫日期大於3天的 人員信息。

  2. 第二句話一個人員的日誌填寫日期有多條則取最早的一條,如果有一天未填寫,則取系統當前時間,不含小時。

    以上這句話需要注意兩點 第一點,取最早的一條此處需要用到ROW_NUMBER() OVER() 以及未填寫 則取系統當前時間 不含小時 那麼取值格式應為yyyy-mm-dd此處需要處理格式。

根據以上分析提供如下SQL: 註:(以下SQL已ORACLE為例)

--創建臨時表存儲數據
withemp_logas(
select1asempno,'張一'asempname,'工作內容1'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-23'asentrydate,1asnumfromal
unionall
select1asempno,'張一'asempname,'工作內容2'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-23'asentrydate,2asnumfromal
unionall
select1asempno,'張一'asempname,'工作內容3'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-24'asentrydate,5asnumfromal
unionall
select1asempno,'張一'asempname,'工作內容1'asworkcontent,date'2017-03-24'asbegdate,date'2017-03-30'asentrydate,8asnumfromal
unionall
select2asempno,'張二'asempname,'工作內容21'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-30'asentrydate,8asnumfromal
unionall
select2asempno,'張二'asempname,'工作內容22'asworkcontent,date'2017-03-25'asbegdate,date'2017-03-28'asentrydate,8asnumfromal
unionall
select3asempno,'張三'asempname,'工作內容31'asworkcontent,date'2017-03-20'asbegdate,nullasentrydate,nullasnumfromal
unionall
select3asempno,'張三'asempname,'工作內容32'asworkcontent,date'2017-03-20'asbegdate,nullasentrydate,nullasnumfromal
unionall
select4asempno,'張四'asempname,'工作內容42'asworkcontent,date'2017-03-25'asbegdate,date'2017-03-28'asentrydate,8asnumfromal
)
select*from(
selectempno,empname,sum(num)num,sum(yanci)/count(empno)pingjunyanci--獲取人員當月總延遲數除去當月人員每日的打開數計算出當月每天的平均延遲天數
from(selectROW_NUMBER()OVER(PARTITIONBYe.empno,e.begdateORDERBYe.empno,e.begdate)ASRN,--排序獲取當天有多條記錄並在後面條件中獲取第一條
e.empno,e.empname,
e.workcontent,e.begdate,
e.entrydate,
e.num,
(nvl(e.entrydate,to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd'))-begdate)asyanci--判斷如果沒有填寫結束日期那麼以系統當前日期進行運算延遲日期
fromemp_loge)e1
wheree1.rn=1--獲取第一條
andto_char(begdate,'yyyy-mm')='2017-03'--可用的月份條件
groupbyempno,empname,numorderbyempno--根據人員工號、人員姓名分組匯總
)e2wheree2.pingjunyanci>3;

--分析不易忘認真閱讀後採納,有其他問題請追問我。

Ⅱ 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的函數去處理

Ⅲ sql面試題

1.
select
s.title,
count(p.id)
from
書表
s
left
join
評論
p
on
s.id=p.書表中的id
group
by
s.title
(注意:左外連接的作用是將評價數為0的書顯示出來.count(p.id)和count(*)的區別是count(p.id)不計入p.id為null的行)
2.
select
top
1
s.title,
count(p.id)
from
書表
s
left
join
評論
p
on
s.id=p.書表中的id
group
by
s.title
order
by
2
desc
(以第2列倒序排序,取第1行)

Ⅳ sql語句 面試題

A.創建表格CODE省略

註明:學生表PK stu_id 課程表pk cos_id 分數表PK enrollment_id FK stu_id,cos_id

B.插入數據code省略

C.Query

  1. select s.stu_id,stu_name,count(cos_id) from student s,enrollments e where s.stu_id = e.stu_id and e.grade>60 group by s.stu_id,stu_name;

  2. select e.stu_id,s.stu_name,c.cos_name from student s,enrollments e,course c

    where s.stu_id = e.stu_id

    and e.cos_id = c.cos_id

    and c.cos_name = 'CHINESE'

    and s.stu_name like 'W%';

  3. select stu_id,stu_name from (select e.stu_id,stu_name,cos_name from enrollments e,student s,course c

    where s.stu_id = e.stu_id

    and e.cos_id = c.cos_id

    and c.cos_name IN ('CHINESE','MUSIC'))

    group by stu_id,stu_name

    having count(cos_name) = 2

  4. select distinct e.cos_id,c.cos_name,count(e.stu_id) stu_count,count(e.stu_id)-NVL(A.FAIL,0) upscore,(count(e.stu_id)-NVL(A.FAIL,0))/count(e.stu_id) rate from

    (select cos_id,count(stu_id) fail from enrollments where grade<60 group by cos_id) a,enrollments e,course c

    where e.cos_id = a.cos_id(+)

    and e.cos_id = c.cos_id

    group by e.cos_id,NVL(a.fail,0),c.cos_name;

  5. update student

    set avg_grade =(select avg(grade) X from enrollments group by stu_id

    having student.stu_id = enrollments.stu_id);

  6. select stu_id,avg(grade) from

    (select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)

    group by stu_id

    having count(*)<=2

    UNION

    select A.stu_id,avg(A.grade)from

    (select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments) A,

    (select stu_id,count(*) c from

    (select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)

    group by stu_id) B

    where A.stu_id = B.stu_id

    and A.x>1 and x<B.c

    group by A.stu_id,b.c

_________________________________________________

環境:oracle 10g/TOAD 以上代碼均通過測試,如有問題,請聯系,謝謝

Ⅳ 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' --沒問題

Ⅵ oracle學習新手,求幾條sql的標准答案對照~~~

1、
select EID,Fname from
(select rownum id,E.EID,E.Fname from Employee E,Department D where E.DID=D.DID and D.Name='research' order by DOB desc)
where id=2;
2、
select EID,Fname from Employee where Fname like '%Y%' order by Fname desc;
3、
select Fname from Employee where DOB<(select agv(DOB) from Employee);
4、
select D.DID,D.Name,count(P.PID) from Department D,Project P where D.DID=P.DID group by D.DID,D.Name;
5、
select Fname from
(select E.EID,E.Fname Employee E,Work_On W where E.EID=W.PID group by E.EID,E.Fname having count(W.PID)=1);
6、
select Fname from
(select E.EID,E.Fname Employee E,Work_On W where E.EID=W.PID group by E.EID,E.Fname having count(W.PID)>=1);
7、
select Fname,project數量 from
(select E.EID,E.Fname,count(W.PID) project數量 Employee E,Work_On W where E.EID=W.PID group by E.EID,E.Fname);
8、
select A.EID,A.Fname,A.project數量 maleproject數量,B.project數量 femaleproject數量 from
(select E.EID,E.Fname,count(W.PID) project數量 Employee E,Work_On W where E.EID=W.PID and E.Gender='male' group by E.EID,E.Fname)A,
(select E.EID,E.Fname,count(W.PID) project數量 Employee E,Work_On W where E.EID=W.PID and E.Gender='female' group by E.EID,E.Fname)B;
where A.EID=B.EID;
9、
select P.Name,count(W.EID) Work_On W,Project P where W.PID=P.PID group by P.Name;

---
以上,希望對你有所幫助。

Ⅶ Oracle面試題 求解答

8. 匯總統計收款總金額(CHARGE_TOTAL)按各收費員(CHARGE_MAN)分別匯總,結果如下所示:
CHARGE_MAN C1
0006 3065.66
測試61 144153
李世民 85

SQL:select CHARGE_MAN,sum(CHARGE_TOTAL) as C1 from rcs_znj_2007 order by CHARGE_MAN

9. 按照DISP_ORDER升序顯示CHAR_LIST表數據內容
SQL:select * from char_list order by DISP_ORDER

10. 按照ADJ_TYPE(減免類別)升序,顯示RCS_ZNJ_2007表所有內容,其中ADJ_TYPE欄位須轉換成對應的中文字元(CHAR_LIST.LIST_STRING)。(兩表關聯查詢)
SQL: select ID,METERNO,
(select LIST_STRING from CHAR_LIST where LIST_CHAR = ADJ_TYPE) as ADJ_NAME,
CHARGE_DATE,
CHARGE_TOTAL,CHARGE_MAN
from RCS_ZNJ_2007 order by ADJ_TYPE

11. 根據CHAR_LIST表內容,將RCS_ZNJ_2007表中ADJ_TYPE欄位值全部更新成對應的中文字元(CHAR_LIST.LIST_STRING)。
SQL: update RCS_ZNJ_2007 set ADJ_TYPE = (select LIST_STRING from CHAR_LIST where LIST_CHAR = ADJ_TYPE)

Ⅷ oracle幾道簡單面試題,請大俠幫忙

1,資料庫遷移需要考慮的問題很多,這個一句兩句也說不完;
2,首先考慮的就是數據量,如果是小表,沒有索引反而訪問還要快一些。
3,權衡全表還是走索引,看SQL的執行計劃就可以了;
4,這個資料庫對象是用在兩個資料庫之間聯接,交換,查詢數據用的。
5,去資料庫里查鎖住的進程,殺了就可以了。之後再分析原因。
6,分區表是數據量大於1.5gb以上才用的吧。
7,臨時表空間當然會滿,查視圖也是一樣的。
8,開了歸檔就相當於win系統的設置里開了系統還原一樣。
9,redo這個設置要看實際情況,根據主機CUP處理能力,資料庫優化參數等因素決定的。

Ⅸ 面試的時候問你熟悉oracle資料庫嗎

如果是開發的話,那還是基於SQL這種語言的語法了,要多自己使用才能熟悉的。 對於oracle資料庫來說,PL/SQL delelopment是重點,除了SQL,還要了解觸發器trigger,存儲過程procere,任務job,視圖view等等。

Ⅹ SQL面試題

翻譯
題目很簡單,樓主看看
MovieBuster在線電影收看服務擁有如下信息的資料庫:
(*)號表示外鍵參考,
電影信息表:MovieInfo(mvID, title, rating, year, length, studio)
分類信息表:GenreInfo(mvID*, genre)
工作室信息表:DirectInfo(mvID*, director)
電影信息表主要存放電影的相關信息,其中主鍵mvID是電影出產時人為給定的一個ID值,一個電影可能擁有多個類別並且有多個工作室一起生產。
注意這些表與資料庫中的其他表名已經區別開來。
一個只讀數據信息已經被建立在oracle上並且可以通過如下命令sqlmb1獲得信息。作為選擇,你可以通過此建立自己的數據表。

數據可以從黑板上看到
從資料庫中查詢如下問題並給出正確答案:
(1)工作室 "Paramount Pictures"已經生產多少部 rating="G" 並且年份在1940-1950年之間的電影?
(2)查出rating ="PG" 生產年份在1940之前或者2000年之後的電影的總數。
(3)列出每種分類的電影數,查出結果按電影分數總數降序排序。
(4)查找出生產的電影平均長度至少大於等於3的工作室的名字以及對應的平均電影長度。