日期:2014-05-18  浏览次数:20465 次

几个面试题。请高手解决一下。谢谢
create   table   dumpy_part
(       id       number(10),       name     varchar2(10),       rand     number(10,2))  
1.查询id重复记录
2.删除id重复记录,只保留第一条
-----------------------------
在EMP表中:
3.找到每个部门工资最高的人(只选一个)
4.找到每个部门工资最高的人(包括并列第一)
--------------------
表test(id   int   ,   name   varchar2(10),   addr   varchar2(20))
记录:       id           name             addr
                            10         rose                       Guangzhou
                            20         jack                       shanghai
                            30         may                     Beijing
5.查找记录,找出与给定值最接近的两条记录
如给出值16,   ID为10,20两条记录;如给出值23,   ID为20,30两条记录
6.有一表test1,结构与test相同,要求若id相同,将test1的col2,col3   替换test的col2,col3的内容

------解决方案--------------------
6. update t1 set t1.col2=t2.col2,t1.col3=t2.col3 from test t1,test1 t2
where t1.id=t2.id
------解决方案--------------------
1. select id,count(*) from dumpy_part group by id having count(*)> =2
------解决方案--------------------
2. delete from dumpy_part where id not in
(select min(id) from dumpy_part group by id having count(*)> =2)
and id in (select id from dumpy_part goup by fid having count(*)> =2)
------解决方案--------------------
create table dumpy_part
( id number(10), name varchar2(10), rand number(10,2))  
1.查询id重复记录
2.删除id重复记录,只保留第一条

--------
1:
select id ,count(*) from t group by id hanving count(*)> 1


2:
delete t a
where exists (select 1 from t where id=a.id and rand <a.rand)
------解决方案--------------------
在EMP表中:
3.找到每个部门工资最高的人(只选一个)
4.找到每个部门工资最高的人(包括并列第一)

---------
3:
select name from t where name=(select top 1 name from t a where gongzi=(select max(gongzi) from t where department=a.department ) order by name)

4:
select name from t a where gongzi=(select max(gongzi) from t where department=a.department )



------解决方案--------------------

1.
select id,name,rand from dumpy_part
group by id,name,rand
having count(1)> =2

2.
delete a from dumpy_part a
where exists(select 1 from dumpy_part b
where a.name=b.name and a.rand=b.rand and a.id> b.id)

3.

select * from emp a
where not exists(select 1 from emp b where a.dept_id=b.dept_id and a.income <b.income and a.id <b.id)

4.
select * from emp a
where not exists(select 1 from emp b where a.dept_id=b.dept_id and a.income <b.income )

5.
declare @i int
set @i=16
select top 1 * from tabname