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

oraclesql測試題

發布時間: 2022-04-18 16:52:29

❶ Oracle 資料庫的一道sql語句題

select e.ename, d.dname
from (select t1.dname
from (select d.dname, count(d.dname) count_num
from emp e, dept d
where e.deptno = d.deptno
and e.ename like 'A%'
group by d.dname) t1,
(select d.dname, count(d.dname) count_num
from emp e, dept d
where e.deptno = d.deptno
and e.ename like 'A%'
group by d.dname) t2
where t1.count_num > t2.count_num) t,
emp e,
dept d
where e.deptno = d.deptno
and t.dname = d.dname

❷ 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 sql語句練習題

1、選擇部門30中的雇員
select * from emp where deptno=30;
2、列出所有辦事員的姓名、編號和部門
select ename,empno,dname from emp e inner join dept d on e.deptno = d.deptno where job=upper('clerk』);
3、找出傭金高於薪金的雇員
select * from emp where comm>sal;
4、找出傭金高於薪金60%的雇員
select * from emp where comm>sal*0.6
5、找出部門10中所有經理和部門20中的所有辦事員的詳細資料
select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk '));
6、找出部門10中所有經理、部門20中所有辦事員,既不是經理又不是辦事員但其薪金>=2000的所有雇員的詳細資料
select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')) or (job<>upper(『manager』) and job<>upper(『clerk』) and sal>=2000)
7、找出收取傭金的雇員的不同工作
select distinct job from emp where comm>0;
8、找出不收取傭金或收取的傭金低於100的雇員
select * from emp where nvl(comm,0)<100;
9、找出各月最後一天受雇的所有雇員
select * from emp where hiredate= last_day(hiredate);
10、找出早於25年之前受雇的雇員
select * from emp where months_between(sysdate,hiredate)/12>25;
select * from emp where hiredate<add_months(sysdate,-12*25);
11、顯示只有首字母大寫的所有雇員的姓名
select ename from emp where ename=initcap(ename);
12、顯示正好為6個字元的雇員姓名
select ename from emp where length(ename)=6
13、顯示不帶有'R'的雇員姓名
Select ename from emp where ename not like 『%R%』;
Select ename from emp where instr(ename,』R』)=0;
14、顯示所有雇員的姓名的前三個字元
select substr(ename,1,3) from emp
15、顯示所有雇員的姓名,用a替換所有'A'
Select replace(ename,』A』,』a』) from emp
16、顯示所有雇員的姓名以及滿10年服務年限的日期
Select ename,add_months(hiredate,12*10) 『服務年限的日期』 from emp

❹ 請幫忙解決一道Oracle資料庫試題:

用管道函數:
create or replace type rec_list is table of number;
CREATE OR REPLACE FUNCTION pipe_rec (pmax NUMBER)
RETURN rec_list PIPELINED
IS
BEGIN
FOR i IN 1 .. pmax
LOOP
PIPE ROW (i);
END LOOP;
RETURN;
END;
/

insert into a
select a.*,1 from table(pipe_rec(10000000)) b

❺ oracle sql面試題求助

--1
select max(sal) ,min(sal) from emp group by deptno;
--2
select max(sal) ,min(sal) from emp where job='CLERK' group by deptno;
--3
select deptno,max(sal) ,min(sal) from emp where job='CLERK' and deptno=(select deptno from emp group by deptno having min(sal)<1000) group by deptno;
--4
select ename,deptno,sal from emp order by deptno desc,sal
--5
select ename,deptno from emp where deptno = (select deptno from emp where ename='張三')
--6
select e.ename,e.job,e.deptno,d.dname from emp e left join dept d on d.deptno=e.deptno
--7
select e.ename,e.job,e.deptno,d.dname from emp e left join dept d on d.deptno=e.deptno where e.job='CLERK'
--8
select e.ename,m.mname from emp e left join mgr m on m.mgr=e.mgr
--9
select * from (select ename, job from emp where job='CLERK') a union all select dname, deptno from dept ;
--10
select e.deptno,e.ename,e.sal from emp e left join (select deptno, avg(sal) SV from emp group by deptno) b on
b.deptno=e.deptno where e.sal>b.SV order by e.deptno ;
--11
select count(e.deptno),e.deptno from emp e left join (select deptno, avg(sal) SV from emp group by deptno) b on
b.deptno=e.deptno where e.sal>b.SV group by e.deptno order by e.deptno;
--12
select e.deptno,count(e.deptno) from emp e left join (select deptno, avg(sal) SV from emp group by deptno) b on
b.deptno=e.deptno where e.sal>b.SV group by e.deptno having count(e.deptno)>1 order by e.deptno;

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

❼ 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試題,資料庫是oracle11g用於scott用戶測試的資料庫,題目如下。

1:
SELECT d.deptno,d.dname,COUNT(e.empno),AVG(sal),MIN(sal),MAX(sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno(+)
GROUP BY d.deptno,d.dname
HAVING COUNT(e.empno)>1;
3:
SELECT e.empno,e.ename,d.dname,m.ename
FROM emp e,dept d,emp m
WHERE e.sal>ALL(
SELECT sal
FROM emp
WHERE ename IN('SMITH','ALLEN'))
AND e.deptno=d.deptno
AND e.mgr=m.empno(+);

4:
SELECT e.empno,e.ename,m.empno,m.ename,(m.sal+NVL(m.comm,0))*12 income
FROM emp e,emp m www.2cto.com
WHERE e.mgr=m.empno(+)
ORDER BY income DESC;
5:
SELECT e.empno,e.ename,d.dname,d.loc,temp.count
FROM emp e,emp m,dept d,(
SELECT deptno dno,COUNT(empno) count
FROM emp
GROUP BY deptno) temp
WHERE e.mgr=m.empno(+) AND e.hiredate<m.hiredate
AND e.deptno=d.deptno
AND e.deptno=temp.dno;
6:
SELECT * FROM
(select b.*,ROWNUM rn from (select a.* from emp a) b)
WHERE rn BETWEEN 5 AND 10;