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 不是大对象。