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语句再次写下这几个答案,我对比下,谢谢你。我等着给您结贴 展开
一、 数据库 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语句再次写下这几个答案,我对比下,谢谢你。我等着给您结贴 展开
展开全部
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的函数去处理
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数据库优化的话主要有以下几个方面(我接触过的,可能不全面):
1
查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2
数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3
数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4
存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议
1
查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2
数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3
数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4
存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
以上都是亲自试过以后才回答的
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;
以上都是亲自试过以后才回答的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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的函数去处理
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的函数去处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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的函数去处理
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的函数去处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |