超经典sql笔试题

drop table test2
create table test2
(
renid int,
renname varchar(20),
parentid int
)
insert into test2 (renid,renname,parentid)
select 2,'张一',10 union all
select 3,'张二',10 union all
select 5,'王一',11 union all
select 8,'王二',11 union all
select 10,'张_父',15 union all
select 11,'王_父',' ' union all
select 15,'张_父_父',16 union all
select 16,' ',' '

--1.查找没有父的人
select * from test2 where parentid=' '
--2.查找有孙子的人
--查找没有父亲的人的儿子
select test2.renid,test2.renname,test2.parentid from
(select renid,renname,parentid from test2 where parentid=' ')a,test2
where test2.parentid=a.renid
--查找有孙子的人
select * from test2 where renid in(
select test2.parentid from
(select test2.renid,test2.renname,test2.parentid from
(select renid,renname,parentid from test2 where parentid=' ')a,test2
where test2.parentid=a.renid)a,test2
where test2.parentid=a.renid)
--3.查找张_父的所有子
select * from test2 where parentid
in(select renid from test2 where renname in('张_父'))
--4.写一句sql
select '人数' as 项目,
sum(case when left(renname,1)='张' then 1 else 0 end)as 张,
sum(case when left(renname,1)='王' then 1 else 0 end)as 王
from test2
--5.renid 从1-8重排,不打乱表中关系,即update renid,parentid
--更新16
update test2 set renid=a.b from
(select MAX(renid) a,8 b from test2)a
where a.a=test2.renid

--更新张_父_父
update test2 set renid=7,parentid=8
where parentid in(select MAX(parentid) from test2)

--更新王_父
update test2 set renid=6 where renid in
(select MAX(renid) from test2)
--更新张_父
update test2 set renid=5,parentid=7
where renid in(select MAX(renid) from test2)

--更新王_一
update test2 set renid=4,parentid=6
where renid in(select MAX(renid) from test2)

--更新王_一
update test2 set renid=3,parentid=6
where renid in(select MAX(renid) from test2)


--更新张_二
update test2 set renid=2,parentid=5
where renid in(select MAX(renid) from test2)

--更新张_一
update test2 set renid=1,parentid=5
where renid in(select MAX(renid) from test2)


select * from test2






相关主题
相关文档
最新文档