SQL语句面试
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
(2)
1.一道SQL语句面试题,关于group by
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
:
2005-05-09 胜
2005-05-09 胜
05-09 负 2005-
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
如果要生成下列结果, 该如何写sql语句?
胜 负
2005-05-09 2 2
2005-05-10 1 2
------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values('2005-05-09','胜')
insert into #tmp values('2005-05-09','胜')
insert into #tmp values('2005-05-09','负')
insert into #tmp values('2005-05-09','负')
insert into #tmp values('2005-05-10','胜')
insert into #tmp values('2005-05-10','负')
insert into #tmp values('2005-05-10','负')
1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when
shengfu='负' then 1 else 0 end)'负' from #tmp group by rq
2) select N.rq,N.勝,M.負 from (
select rq,勝=count(*) from #tmp where shengfu='胜'group by rq)N inner join
(select rq,負=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq
3)select a.rq,a.a1 胜,b.b1 负 from (select rq,count(rq) a1 from #tmp where
shengfu='胜' group by rq) a,
(select rq,count(rq) b1 from #tmp where shengfu='负' group by rq) b where a.rq=b.rq 2.请教一个面试中遇到的SQL语句的查询问题
表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
------------------------------------------ create table #tmp(A int,B int,C int)
insert into #tmp values('10','20','30')
--insert into #tmp values('10','30','20')
--insert into #tmp values('40','10','20')
select * from #tmp
select (case when a>b then a else b end),(case when b>c then b else c end ) from
#tmp
3.面试题:一个日期判断的sql语句,
请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)
Select * from tb_send
Where Datediff(day,sendtime,getdate())=0
------------------------------------------ select * from #tmp where datediff(dd,rq,getdate())=0
select * from #tmp where rq=rtrim(convert(varchar,getdate(),23)) 4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记
录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。 显示格式:
语文 数学 英语
及格 优秀 不及格
------------------------------------------ create table #tmp(语文 int,数学 int ,英语 int)
insert into #tmp values('70','80','58')
--insert into #tmp values('100','50','60') select * from #tmp
select (case when 语文 >=80 then '优秀'
when 语文 >=60 then '及格'
else '不及格' end ) 语文,
(case when 数学 >=80 then '优秀'
when 数学 >=60 then '及格'
else '不及格' end ) 数学,
(case when 英语 >=80 then '优秀'
when 英语 >=60 then '及格'
else '不及格' end ) 英语
from #tmp
5.在sqlserver2000中请用sql创建一张用户临时表和,里面包含两系统临时表个字段ID和IDValues,类型都是int型,并解释下两者的区别?
------------------------------------------ 用户临时表:create table #xx(ID int, IDValues int) 系统临时表:create table ##xx(ID int, IDValues int)
区别:
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的. 当创建它的进程消失时这个临时表就自动删除.
全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也
自动删除.
6.sqlserver2000是一种大型数据库,他的存储容量只受存储,请问它是通介质的限制过什么方式实现这种无限容量机制的。
------------------------------------------ 它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL Server的存储容量是可以扩大的.
SQL Server 2000 数据库有三种类型的文件:
主要数据文件
主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。
次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文
件的推荐文件扩展名是 .ndf。
日志文件
日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。
7.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
如使用存储过程也可以。
table1
月份mon 部门dep 业绩yj
-------------------------------
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
table2
部门dep 部门名称dname
--------------------------------
01 国内业务一部
02 国内业务二部
03 国内业务三部
04 国际业务部
table3 (result)
部门dep 一月份 二月份 三月份
-------------------------------------- 国内业务一部 10 null null 国内业务二部 10 8 null 国内业务三部 null 5 8 国内业务部 null null 9 ------------------------------------------
create table #A(mon varchar(10),dep varchar(10) ,yj int) insert into #A values('一月份','01','10') insert into #A values('一月份','02','10') insert into #A values('一月份','03','5') insert into #A values('二月份','02','8') insert into #A values('二月份','04','9') insert into #A values('三月份','03','8') select * from #A
create table #B(dep varchar(10),dname varchar(20)) insert into #B values('01','国内业务一部')
insert into #B values('02','国内业务二部')
insert into #B values('03','国内业务三部')
insert into #B values('04','国际业务部')
select * from #b
---------------------------------------------------------------
1)select dep,(select SUM(yj) from #A where MON='一月份' and #A.dep=#B.dep) 一月份,
(select SUM(yj) from #A where MON='二月份' and #A.dep=#B.dep) 二月份,
(select SUM(yj) from #A where MON='三月份' and #A.dep=#B.dep) 三月份
from #B
2)select b.dep,dname,
sum(case when a.mon='一月份' then a.yj else 0 end ) as '一月份',
sum(case when a.mon='二月份' then a.yj else 0 end ) as '一月份',
sum(case when a.mon='三月份' then a.yj else 0 end ) as '一月份' from #B b left join #A a on a.dep=b.dep group by b.dep ,dname --order by b.dep
??)
select a.部门名称dname,b.业绩yj as '一月份',c.业绩yj as '二月份',d.业绩yj as '三月份'
from table1 a,table2 b,table2 c,table2 d
where a.部门dep = b.部门dep and b.月份mon = '一月份' and a.部门dep = c.部门dep and c.月份mon = '二月份' and
a.部门dep = d.部门dep and d.月份mon = '三月份' and
8.华为一道面试题
一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。 ------------------------------------------ create table #B(dep varchar(10),dname varchar(20)) insert into #B values('01','国内业务一部')
insert into #B values('02','国内业务二部')
insert into #B values('03','国内业务三部')
insert into #B values('04','国际业务部')
insert into #B values('01','国内业务一部')
insert into #B values('02','国内业务二部')
insert into #B values('01','国内业务三部')
B values('03','国际业务部') insert into #
select * from #b
select dep,count(dep) from #B group by dep having count(*)>1 select count(*) from #B group by dep having count(*)>1 select * from(select count(dep) as count from #B group by dep)T where T.count>1
题目1:
问题描述:
为管理岗位业务
培训
焊锡培训资料ppt免费下载焊接培训教程 ppt 下载特设培训下载班长管理培训下载培训时间表下载
信息,建立3个表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
--实现代码:
Select SN,SD FROM S Where [S#] IN( Select [S#] FROM C,SC Where C.[C#]=SC.[C#] AND
CN=N'税收基础')
2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
--实现代码:
Select S.SN,S.SD FROM S,SC Where S.[S#]=SC.[S#] AND SC.[C#]='C2'
3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
--实现代码:
Select SN,SD FROM S Where [S#] NOT IN( Select [S#] FROM SC Where [C#]='C5')
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
--实现代码:
Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC RIGHT JOIN C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#]))
5. 查询选修了课程的学员人数
--实现代码:
Select 学员人数=COUNT(DISTINCT [S#]) FROM SC
6. 查询选修课程超过5门的学员学号和所属单位
--实现代码:
Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5)
题目2:
问题描述:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
--实现代码:
Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND
CNAME='李明' AND SC.SNO=S.SNO)
2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
--实现代码:
Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE) FROM S,SC,( Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2 )A Where S.SNO=A.SNO
AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME
3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
--实现代码:
Select S.SNO,S.SNAME FROM S,( Select SC.SNO FROM SC,C Where SC.CNO=C.CNO AND C.CNAME IN('1','2') GROUP BY SNO HAVING COUNT(DISTINCT CNO)=2 )SC Where S.SNO=SC.SNO
4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
--实现代码:
Select S.SNO,S.SNAME FROM S,( Select SC1.SNO FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND
SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO
5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
--实现代码:
Select S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩] FROM S,( Select SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND
SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO