ORACLE数据库面试题

下面是一个公司的数据库题目,我没用过oracle,不过貌似题目用sql就可以写,不知道他们把这个题目写成oracle有什么蹊跷,我意思是这到题目有什么地方是oracle特... 下面是一个公司的数据库题目,我没用过oracle,不过貌似题目用sql就可以写,不知道他们把这个题目写成oracle有什么蹊跷,我意思是这到题目有什么地方是oracle特别需要注意的,希望强人作答!谢谢

一、 数据库 ORACLE
虽然这些题目都可以G到,但还是要考察一下您现在的常态水平,:)
T表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE)
E表:(字段:NAME,ADDRESS,PHONE)
1. 将表T中的字段LOGDATE中为2001-02-11的数据更新为2003-01-01,请写出相应的SQL语句。(该字段类型为日期类型)

2. 请写出将表T中NAME存在重复的记录都列出来的SQL语句(按NAME排序)

3. 请写出题目2中,只保留重复记录的第一条,删除其余记录的SQL语句(即使该表不存在重复记录)

4. 请写出将E表中的ADDRESS、PHONE更新到T表中的SQL语句(按NAME相同进行关联)

5. 请写出将T表中第3~5行数据列出来的SQL语句
请问csuxp-2008总裁大人,这里,那个题目是oracle的特别之处,我意思是和普通sql语句不同的地方。谢谢请指名,我愚笨

csuxp-2008总裁,我另外开了一个帖子,帖子想请您帮我用最普通的sql语句再次写下这几个答案,我对比下,谢谢你。我等着给您结贴
展开
 我来答
csuxp2008
推荐于2017-09-18 · TA获得超过6485个赞
知道大有可为答主
回答量:4704
采纳率:50%
帮助的人:2466万
展开全部
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的函数去处理
依雅香五河
2019-12-25 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:29%
帮助的人:670万
展开全部
oracle数据库优化的话主要有以下几个方面(我接触过的,可能不全面):
1
查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2
数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3
数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4
存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7b25ad27
2009-09-27 · TA获得超过1853个赞
知道小有建树答主
回答量:1462
采纳率:0%
帮助的人:708万
展开全部
1、update T set LOGDATE = '2003-01-01' where LOGDATE = '2001-02-11'
2、select * from T where rowid not in(select max(rowid) from T group by ID,NAME,ADDRESS,PHONE,LOGDATE);
3、delete from T where rowid not in(select max(rowid) from T group by ID,NAME,ADDRESS,PHONE,LOGDATE);
4、update T
set T.ADDRESS=(select E.ADDRESS from E where E.NAME=T.NAME),
T.PHONE=(select E.PHONE from E where E.NAME=T.NAME);

5、select * from (select rownum as xx,T.* from T) where xx between 3 and 5;

以上都是亲自试过以后才回答的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
贺语心钭职
2019-11-03 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:892万
展开全部
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的函数去处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
窦晋聊昆卉
2019-06-12 · TA获得超过3555个赞
知道大有可为答主
回答量:3042
采纳率:32%
帮助的人:193万
展开全部
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的函数去处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式