SQL问答题
表结构:
1、 表名:g_cardapply
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_applydate bigint 8;//申请日期
g_state varchar 2;//申请状态
2、 表名:g_cardapplydetail
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_name varchar 30;//申请人姓名
g_idcard varchar 18;//申请人身份证号
g_state varchar 2;//申请状态
其中,两个表的关联字段为申请单号。
题目:
1、 查询身份证号码为440401430103082的申请日期
2、 查询同一个身份证号码有两条以上记录的身份证号码及记录个数
3、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
4、 删除g_cardapplydetail表中所有姓李的记录
表结构:
1、 表名:g_cardapply
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_applydate bigint 8;//申请日期
g_state varchar 2;//申请状态
2、 表名:g_cardapplydetail
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_name varchar 30;//申请人姓名
g_idcard varchar 18;//申请人身份证号
g_state varchar 2;//申请状态
其中,两个表的关联字段为申请单号。
题目:
1、 查询身份证号码为440401430103082的申请日期
2、 查询同一个身份证号码有两条以上记录的身份证号码及记录个数
3、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
4、 删除g_cardapplydetail表中所有姓李的记录
select g_applydate
from g_cardapply t1 ,g_cardapplydetail t2
where t1.g_applyno = t2.g_applyno and t2.g_idcard = '440401430103082'
2.
select g_idcard,count(1) as 数量
from g_cardapplydetail
group by g_idcard
having count(1) > 2
3.
update g_cardapplydetail
set g_state = '07'
where g_idcard = '440401430103082'
update t1
set t1.g_state = '07'
from g_cardapply t1,g_cardapplydetail t2
where t1.g_applyno = t2.g_applyno and t2.g_idcard = '440401430103082'4.
delete from g_cardapplydetail where left(g_name,1) = '李'
select A.g_applydate from g_cardapply A,g_cardapplydetail B where A.g_applyno=B.g_applyno and B.g_idcard='440401430103082'
--2.
select * from g_cardapplydetail group by g_idcard having count(1)>0
--3.
update cardapplydetail set g_state='07' from g_cardapply where g_idcard='440401430103082'
update g_cardapply set g_state='07' from g_cardapplydetail A , g_cardapply B where A.g_applyno=B.g_applyno and B.g_idcard='440401430103082'--4.
delete g_cardapplydetail from g_cardapplydetail where g_name='李'
最后一个 忘写 left 了!
1.
select A.g_applydate
from g_cardapply g1,g_cardapplydetail g2
where g1.g_applyno=g2.g_applyno and g2.g_idcard='440401430103082'
2.
select g_idcard,count(1) as 数量
from g_cardapplydetail
group by g_idcard
having count(1) > 2
3.
(1)update g_cardapplydetail
set g_state='07'
from g_cardapplydetail
where g_idcard='440401430103082'
(2)update g_cardapply
set g_state='07'
from g_cardapplydetail g1 , g_cardapply g2
where g1.g_applyno=g2.g_applyno and g1.g_idcard='440401430103082'4.
delete g_cardapplydetail
from g_cardapplydetail
where g_name like '李%'
第二个问题应该是看需要那些数据,然后再考虑select后的字段,主要考察的还是having 的用法,以及having必须使用group by子句的问题。
第三个问题看不出有什么门道。
第三个问题是怎么叫姓“李”,是不是就是中国习惯上的姓。
g_applyno nvarchar(8),
g_applydate bigint,
g_state nvarchar(2)
)insert into g_cardapply
select 'a001',20050101,'1'
union all
select 'a002',20050202,'2'
create table g_cardapplydetail(
g_applyno nvarchar(8),
g_name nvarchar(30),
g_idcard nvarchar(18),
g_state nvarchar(2)
)insert into g_cardapplydetail
select 'a001','A','440401430103082','1'
union all
select 'a002','B','440401430103083','2'
union all
select 'a003','B','440401430103083','2'
union all
select 'a004','B','440401430103083','2'--question1
select a.g_applydate from g_cardapply a
inner join g_cardapplydetail b on a.g_applyno=b.g_applyno
and b.g_idcard='440401430103082'--question2
select g_idcard,count(1) from g_cardapplydetail
group by g_idcard having count(1)>2--question3
update g_cardapply set g_state='07' where g_applyno in(
select g_applyno from g_cardapplydetail where g_idcard='440401430103082'
)
update g_cardapplydetail set g_state='07' where g_idcard='440401430103082'--question4
delete from g_cardapplydetail where g_name like N'李%'drop table g_cardapply,g_cardapplydetail
表结构:
1、 表名:g_cardapply
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_applydate bigint 8;//申请日期
g_state varchar 2;//申请状态
2、 表名:g_cardapplydetail
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_name varchar 30;//申请人姓名
g_idcard varchar 18;//申请人身份证号
g_state varchar 2;//申请状态
其中,两个表的关联字段为申请单号。
题目:
1、 查询身份证号码为440401430103082的申请日期select a.g_applydate
from g_cardapply a
inner join g_cardapplydetail b
on a.g_applyno = b.g_applyno
and b.g_idcard='440401430103082'2、 查询同一个身份证号码有两条以上记录的身份证号码及记录个数
select g_idcard , count(*) as cnt
from g_cardapplydetail
group by g_idcard
having count(*) > 23、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
update g_cardapplydetail set g_state = '07'
where g_idcard = '440401430103082' update g_cardapply set g_state = '07'
from g_cardapply a ,g_cardapplydetail b
where a.g_applyno = b.g_applyno
and b.g_idcard='440401430103082'4、 删除g_cardapplydetail表中所有姓李的记录 delete from g_cardapplydetail
from g_cardapplydetail b , g_cardapply a
where a.g_applyno = b.g_applyno
and a.g_name like '李%'
select g_idcard,count(*) as cnt
from g_cardapplydetail
group by g_idcard
having count(*) >2
where g_idcard = 440401430103082
2.查询同一个身份证号码有两条以上记录的身份证号码及记录个数 select g_idcard '身份证号码' ,count(g_applyno) '个数' from g_cardapplydetail group by g_idcard having(count(g_applyno))>13.将身份证号码为440401430103082的记录在两个表中的申请状态均改为07 update g_cardapplydetail set g_state = 07 where g_idcard = 440401430103082 --表:g_cardapplydetail update g_cardapply set g_state = 07 where g_applyno =
(select g_applyno from g_cardapplydetail where g_idcard = 440401430103082)
4.删除g_cardapplydetail表中所有姓李的记录 delete from g_cardapplydetail where g_name like '李%'我也来做做,看做得对不