sql考试题及答案,求SQL试题答案
sql考试题及答案,求SQL试题答案详细介绍
本文目录一览: SQL查询面试题与答案
SQL查询面试题与答案
SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。下面是我搜集的SQL查询面试题与答案,欢迎大家阅读。
SQL查询面试题与答案一 1.一道SQL语句面试题,关于group by表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
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.col001,a.a1 胜,b.b1 负 from
(select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a,
(select col001,count(col001) b1 from temp1 where col002='负' group by col001) b
where a.col001=b.col001
2.请教一个面试中遇到的SQL语句的查询问题
表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
------------------------------------------
select (case when a>b then a else b end ),
(case when b>c then b esle c end)
from table_name
3.面试题:一个日期判断的sql语句?
请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)
------------------------------------------
select * from tb where datediff(dd,SendTime,getdate())=0
4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文 数学 英语
及格 优秀 不及格
------------------------------------------
select
(case when 语文>=80 then '优秀'
when 语文>=60 then '及格'
else '不及格') as 语文,
(case when 数学>=80 then '优秀'
when 数学>=60 then '及格'
else '不及格') as 数学,
(case when 英语>=80 then '优秀'
when 英语>=60 then '及格'
else '不及格') as 英语,
from table
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 一月份 二月份 三月份
--------------------------------------
01 10 null null
02 10 8 null
03 null 5 8
04 null null 9
------------------------------------------
1)
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
2)
select a.dep,
sum(case when b.mon=1 then b.yj else 0 end) as '一月份',
sum(case when b.mon=2 then b.yj else 0 end) as '二月份',
sum(case when b.mon=3 then b.yj else 0 end) as '三月份',
sum(case when b.mon=4 then b.yj else 0 end) as '四月份',
sum(case when b.mon=5 then b.yj else 0 end) as '五月份',
sum(case when b.mon=6 then b.yj else 0 end) as '六月份',
sum(case when b.mon=7 then b.yj else 0 end) as '七月份',
sum(case when b.mon=8 then b.yj else 0 end) as '八月份',
sum(case when b.mon=9 then b.yj else 0 end) as '九月份',
sum(case when b.mon=10 then b.yj else 0 end) as '十月份',
sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',
sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',
from table2 a left join table1 b on a.dep=b.dep
8.华为一道面试题
一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
------------------------------------------
select id, Count(*) from tb group by id having count(*)>1
select * from(select count(ID) as count from table group by ID)T where T.count>1
SQL查询面试题与答案二 1、查询不同老师所教不同课程平均分从高到低显示
SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩
FROM SC AS T,Course AS C ,Teacher AS Z
where T.C#=C.C# and C.T#=Z.T#
GROUP BY C.C#
ORDER BY AVG(Score) DESC
2、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)
[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩
SELECT DISTINCT top 3
SC.S# As 学生学号,
Student.Sname AS 学生姓名 ,
T1.score AS 企业管理,
T2.score AS 马克思,
T3.score AS UML,
T4.score AS 数据库,
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分
FROM Student,SC LEFT JOIN SC AS T1
ON SC.S# = T1.S# AND T1.C# = '001'
LEFT JOIN SC AS T2
ON SC.S# = T2.S# AND T2.C# = '002'
LEFT JOIN SC AS T3
ON SC.S# = T3.S# AND T3.C# = '003'
LEFT JOIN SC AS T4
ON SC.S# = T4.S# AND T4.C# = '004'
WHERE student.S#=SC.S# and
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
NOT IN
(SELECT
DISTINCT
TOP 15 WITH TIES
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
FROM sc
LEFT JOIN sc AS T1
ON sc.S# = T1.S# AND T1.C# = 'k1'
LEFT JOIN sc AS T2
ON sc.S# = T2.S# AND T2.C# = 'k2'
LEFT JOIN sc AS T3
ON sc.S# = T3.S# AND T3.C# = 'k3'
LEFT JOIN sc AS T4
ON sc.S# = T4.S# AND T4.C# = 'k4'
ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);
3、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]
SELECT SC.C# as 课程ID, Cname as 课程名称
,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]
,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]
,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]
,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
FROM SC,Course
where SC.C#=Course.C#
GROUP BY SC.C#,Cname;
4、查询学生平均成绩及其名次
SELECT 1+(SELECT COUNT( distinct 平均成绩)
FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC
GROUP BY S#
) AS T1
WHERE 平均成绩 > T2.平均成绩) as 名次,
S# as 学生学号,平均成绩
FROM (SELECT S#,AVG(score) 平均成绩
FROM SC
GROUP BY S#
) AS T2
ORDER BY 平均成绩 desc;
5、查询各科成绩前三名的记录:(不考虑成绩并列情况)
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
6、查询每门课程被选修的学生数
select c#,count(S#) from sc group by C#;
7、查询出只选修了一门课程的全部学生的学号和姓名
select SC.S#,Student.Sname,count(C#) AS 选课数
from SC ,Student
where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;
8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2
9、查询所有课程成绩小于60分的同学的学号、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);
10、查询没有学全所有课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;
select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';
12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;
select distinct SC.S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='001');
13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
update SC set score=(select avg(SC_2.score)
from SC SC_2
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');
14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;
select S# from SC where C# in (select C# from SC where S#='1002')
group by S# having count(*)=(select count(*) from SC where S#='1002');
15、删除学习“叶平”老师课的SC表记录;
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';
16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、
号课的平均成绩;
Insert SC select S#,'002',(Select avg(score)
from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');
17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分
SELECT S# as 学生ID
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语
,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩
FROM SC AS t
GROUP BY S#
ORDER BY avg(t.score)
18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分
FROM SC L ,SC AS R
WHERE L.C# = R.C# and
L.score = (SELECT MAX(IL.score)
FROM SC AS IL,Student AS IM
WHERE L.C# = IL.C# and IM.S#=IL.S#
GROUP BY IL.C#)
AND
R.Score = (SELECT MIN(IR.score)
FROM SC AS IR
WHERE R.C# = IR.C#
GROUP BY IR.C#
);
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩
,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数
FROM SC T,Course
where t.C#=course.C#
GROUP BY t.C#
ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC
20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)
SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分
,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数
,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分
,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数
,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分
,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数
,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分
,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数
FROM SC
;
SQL50题及答案
习题来源于网络,sql语句是自己的答案,部分有参考。欢迎指正及探讨。
1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数
1.1 查询同时存在" 01 "课程和" 02 "课程的情况
1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null) null提示:使用left join
1.3 查询不存在" 01 "课程但存在" 02 "课程的情况
2. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
3. 查询在 SC 表存在成绩的学生信息
4. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null)
4.1 查有成绩的学生信息
5. 查询「李」姓老师的数量
6. 查询学过「张三」老师授课的同学的信息
7. 查询没有学全所有课程的同学的信息
8. 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息
9. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息
10. 查询没学过"张三"老师讲授的任一门课程的学生姓名
11. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
12. 检索" 01 "课程分数小于 60,按分数降序排列的学生信息
13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
14. 查询各科成绩最高分、最低分和平均分:以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率(及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
14.1要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
15. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺
15.1 按各科成绩进行排序,并显示排名, Score 重复时合并名次
16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺
16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺
17. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比
18. 查询各科成绩前三名的记录
19. 查询每门课程被选修的学生数
20. 查询出只选修两门课程的学生学号和姓名
21. 查询男生、女生人数
22. 查询名字中含有「风」字的学生信息
23. 查询同名同性学生名单,并统计同名人数
24. 查询 1990 年出生的学生名单
25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
26. 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩
27. 查询课程名称为「数学」,且分数低于 60 的学生姓名和分数
28. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)
29. 查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数
30. 查询不及格的课程
31. 查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名
32. 求每门课程的学生人数
33. 成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
34. 成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
35. 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
36. 查询每门功成绩最好的前两名
37. 统计每门课程的学生选修人数(超过 5 人的课程才统计)
38. 检索至少选修两门课程的学生学号
39. 查询选修了全部课程的学生信息
40. 查询各学生的年龄,只按年份来算
41. 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
42. 查询本周过生日的学生
43. 查询下周过生日的学生
44. 查询本月过生日的学生
45. 查询下月过生日的学生
1.1 查询同时存在" 01 "课程和" 02 "课程的情况
1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
1.3 查询不存在" 01 "课程但存在" 02 "课程的情况
4.1 查有成绩的学生信息
15.1 按各科成绩进行排序,并显示排名, Score 重复时合并名次
16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺
SQL经典50题题解
本篇文章主要是对SQL经典50题进行详细解析。
解析包含:1、解题思路,2、考核知识点,3、答案;
首先,表结构用脑图输出出来,如下所示:
先进行数据准备,建表以及插入数据。
1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数
解题思路:
第一步:关键词有“课程编号”、“课程成绩”、“学生信息”,锁定使用表:学生表、成绩表。
第二步:给出学生信息及课程分数,通过主键sid关联学生表和课程表。
第三步:比较同一个学生不同课程的成绩,再关联一次课程表,利用sid、cid进行关联。
第四步:根据题目,用where比较分数筛选结果。
考核知识点: join,where
答案:
1.1 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
解题思路:
第一步:关键词有“课程编号”、“学生编号”,锁定使用表:成绩表。
第二步:分别查询出存在" 01 "课程的学生和存在" 02 "课程的学生。
第三步:对两个子查询进行关联,用sid进行左联接。
考核知识点: where, 子查询,left join
答案:
1.2 查询同时存在01和02课程的情况
解题思路: 同1.1,把left join改为join
考核知识点: where, 子查询,join
答案:
1.3 查询选择了02课程但没有01课程的情况
解题思路: 类似1.1,把left join改为right join
考核知识点: where, 子查询,right join
答案:
小结: 上面的题主要考察join、left join、right join。
2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
解题思路:
第一步:关键词有“平均成绩”、“学生编号”、“学生姓名”,锁定使用表:成绩表、学生表。
第二步:给出学生信息及课程分数,通过主键sid关联学生表和课程表。。
第三步:根据题目,用group by聚合计算出平均成绩,然后筛选出大于等于60分的学生。
考核知识点: join、group by、avg()
答案:
3.查询在 SC 表存在成绩的学生信息
解题思路:
第一步:关键词有“SC”、“学生信息”,锁定使用表:成绩表、学生表。
第二步:用EXISTS判断在SC表存在成绩的学生信息
考核知识点: EXISTS语句
答案:
4.查询所有同学的学生编号、学生姓名、选课总数、所有课程的成绩总和
解题思路:
第一步:关键词有“学生编号”、“学生姓名”、“选课总数”、“课程成绩”,锁定使用表:成绩表、学生表。
第二步:通过主键sid关联学生表成绩表,得到学生信息、学生成绩的宽表
第三步:根据题目,用group by聚合计算选课总数和总成绩
考核知识点: left join、group by、count()、sum()、ifnull()
答案:
5.查询「李」姓老师的数量
解题思路:
第一步:关键词有“老师的数量”,锁定使用表:教师表。
第二步:先筛选出「李」姓老师,再汇总统计「李」姓老师的数量
考核知识点: like、where、%、count()
答案:
6.查询学过「张三」老师授课的同学的信息
解题思路:
第一步:关键词有“老师”、“学生信息”,锁定使用表:教师表、学生表、成绩表、课程表。
第二步:通过sid关联学生表、成绩表,再通过cid关联课程表,最后通过tid关联教师表。
第三步:用where筛选出「张三」老师授课的同学的信息。
考核知识点: 多重连接join
答案:
7.查询没有学全所有课程的同学的信息。
解题思路:
第一步:关键词有“课程”、“学生信息”,锁定使用表:学生表、成绩表、课程表。
第二步:先统计学生的课程数量,再筛选出小于所有课程数量的学生。
考核知识点: left join、group by、count()
答案:
8.查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息。
解题思路:
第一步:关键词有“课程”、“学生信息”,锁定使用表:学生表、成绩表。
第二步:先查询学号“01”的同学学习的课程。
第三步:通过sid关联学生表和成绩表,获取所有学生信息、课程信息。
第四步:用EXISTS筛选出至少1门课相同的同学信息。
考核知识点: left join、子查询、EXISTS
答案:
9.查询和" 01 "号的同学学习的课程完全相同的其他同学的信息
解题思路:
第一步:关键词有“课程”、“学生信息”,锁定使用表:学生表、成绩表。
第二步:用“01”号的同学学习的课程左关联学生课程表,筛选出关链课程数一致的其他同学的sid
第三步:通过sid关联学生表和成绩表,获取完整的学生信息。
考核知识点: left join、子查询、group by
答案:
10.查询没学过"张三"老师讲授的任一门课程的学生姓名
解题思路:
第一步:关键词有“老师”、“学生姓名”,锁定使用表:学生表、成绩表、课程表、教师表。
第二步:反向求解。先查询至少学过“张三”老师讲授的课程的学生sid
第三步:用NOT EXISTS筛选出不在第二步查询结果的学生信息,。
考核知识点: 多重连接join、NOT EXISTS、子查询
答案:
11.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
解题思路:
第一步:关键词有“姓名”、“平均成绩”,锁定使用表:学生表、成绩表。
第二步:通过sid关联学生表和成绩表,得到学生成绩信息宽表
第三步:用group by聚合统计,having对聚合的结果进行筛选。
考核知识点: join、group by、having、case when语句、avg()
答案:
12.检索" 01 "课程分数小于 60,按分数降序排列的学生信息
解题思路:
第一步:关键词有“课程分数”、“学生信息”,锁定使用表:学生表、成绩表。
第二步:通过sid关联学生表和成绩表,得到学生成绩信息宽表
第三步:用where筛选" 01 "课程分数小于 60的记录,并按照分数降序排列。
考核知识点: join、where、order by
答案:
13.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
解题思路:
第一步:关键词有“平均成绩”,锁定使用表:成绩表。
第二步:用group by将学生课程的成绩由行转换为列并计算平均成绩。
第三步:按照平均成绩降序显示学生的所有课程的成绩以及平均成绩。
考核知识点: join
答案:
14.查询各科成绩最高分、最低分和平均分,以如下形式显示:
以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,
优良率,优秀率
及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
解题思路:
第一步:关键词有“课程name”、“最高分”,锁定使用表:课程表、成绩表。
第二步:用group by聚合计算课程最高分、最低分、平均分。
第三步:用case语句判断及格、中等、优良、优秀,并结合group by计算。
考核知识点: join、group by、max()、min()、avg()、sum()、case when语句
答案:
15.按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺
解题思路:
第一步:关键词有“各科成绩”,锁定使用表:成绩表。
第二步:用rank()排名。
考核知识点: rank() over(partition by)
答案:
15.1 按各科成绩进行行排序,并显示排名, Score 重复时合并名次
解题思路:
第一步:关键词有“各科成绩”,锁定使用表:成绩表。
第二步:用dense_rank()排名。
考核知识点: dense_rank() over(partition by)
答案:
16.查询学生的总成绩,并进行排名,总分重复时保留名次空缺
解题思路:
第一步:关键词有“总成绩”,锁定使用表:成绩表。
第二步:用group by统计学生的总成绩。
第三步:用left join自关联进行排名。
考核知识点: group by、 left join
答案:
16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺
解题思路:
第一步:关键词有“总成绩”,锁定使用表:成绩表。
第二步:用group by统计学生的总成绩。
第三步:用变量进行排名。
考核知识点: group by、变量
答案:
17. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比
解题思路:
第一步:关键词有“各科成绩”、“课程名称”,锁定使用表:成绩表、课程表。
第二步:通过cid关联课程表和成绩表,得到课程、成绩信息宽表。
第三步:用group by聚合统计各分段的人数及百分比。
考核知识点: join、group by、case when条件语句
答案:
18.查询各科成绩前三名的记录
解题思路:
第一步:关键词有“各科成绩”,锁定使用表:成绩表。
第二步:筛选出各科比当前成绩高的人数小于3的学生记为各科的前三名。
考核知识点: 子查询
答案:
19.查询每门课程被选修的学生数
解题思路:
第一步:关键词有“每门课程”、“学生数”,锁定使用表:课程表、成绩表。
第二步:用left join关联课程表和成绩表,再用group by分组汇总各科的学生数。
考核知识点: left join、group by
答案:
20.查询出只选修两门课程的学生学号和姓名
解题思路:
第一步:关键词有“选修课程”、“学生姓名”,锁定使用表:学生表、成绩表。
第二步:用join关联学生表和成绩表,再用group by分组汇总每个学生的选修课程数,最后用having对分组汇总结果筛选出选修两门课程的学生。
考核知识点: join、group by、having
答案:
21. 查询男生、女生人数
解题思路:
第一步:关键词有“男生、女生”,锁定使用表:学生表。
第二步:通过ssex学生表用group by分组汇总男生、女生人数。
考核知识点: group by
答案:
22. 查询名字中含有「风」字的学生信息
解题思路:
第一步:关键词有“学生信息”,锁定使用表:学生表。
第二步:用like匹配姓名中含有风」字的学生。
考核知识点: like、%
答案:
23查询同名同性学生名单,并统计同名人数
解题思路:
第一步:关键词有“学生名单”,锁定使用表:学生表。
第二步:使用group by,汇总同名同性人数,再用having筛选出大于1的记录
考核知识点: group by、having
答案:
24.查询 1990 年出生的学生名单
解题思路:
第一步:关键词有“学生名单”,锁定使用表:学生表。
第二步:用where筛选出1990年出生的学生名单
考核知识点: where、year
答案:
25.查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编
号升序排列。
解题思路:
第一步:关键词有“平均成绩”,锁定使用表:成绩表。
第二步:用group by分组计算各科平均成绩,再用order by完成多列排序
考核知识点: group by、order by
答案:
26.查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩
解题思路:
第一步:关键词有“平均成绩”、“学生姓名”,锁定使用表:成绩表、学生表。
第二步:用join关联学生表和成绩表
第三步:用group by分组汇总计算每个学生的平均成绩,再用having筛选平均成绩>=85的记录
考核知识点: join、group by、having
答案:
27.查询课程名称为「数学」,且分数低于 60 的学生姓名和分数
解题思路:
第一步:关键词有“课程名称”、“分数”、“学生姓名”,锁定使用表:课程表、成绩表、学生表。
第二步:用join关联学生表、成绩表、课程表,再用where筛选
考核知识点: 多重join、where
答案:
28. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)
解题思路:
第一步:关键词有“所有学生”、“分数”,锁定使用表:学生表、成绩表
第二步:用left join关联学生表、成绩表
考核知识点: left?join
答案:
29.查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数
解题思路:
第一步:关键词有“课程成绩”、“姓名”、“课程名称”,锁定使用表:学生表、成绩表、课程表
第二步:用join关联学生表、成绩表、课程表,再筛选出课程成绩在70分以上的。
考核知识点: 多重join
答案:
30.查询不及格的课程
解题思路:
第一步:关键词有“不及格的课程”,锁定使用表:成绩表、课程表
第二步:关联课程表和成绩表,再条件筛选出不及格的课程信息。
考核知识点: join、where、去重
答案:
31.查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名
解题思路:
第一步:关键词有“课程编号”、“课程成绩”、“姓名”,锁定使用表:成绩表、学生表
第二步:关联成绩表和学生表,再条件筛选出结果。
考核知识点: join、where
答案:
32.求每门课程的学生人数
解题思路:
第一步:关键词有“课程”、“学生人数”,锁定使用表:成绩表
第二步:用group by分组汇总各科的学生人数。
考核知识点: group by
答案:
33.成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
解题思路:
第一步:关键词有“成绩”、“「张三」老师”、“学生信息”,锁定使用表:成绩表、课程表、学生表、教师表
第二步:关联所有表,筛选出选修「张三」老师所授课程的学生。
第三步:因为成绩不重复,对学生成绩由高到低排序,筛选出第一行记录。
考核知识点: 多重join、order by、limit
答案:
34.成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生
信息及其成绩
解题思路:
第一步:关键词有“成绩”、“「张三」老师”、“学生信息”,锁定使用表:成绩表、课程表、学生表、教师表
第二步:关联所有表,筛选出选修「张三」老师所授课程的学生。
第三步:因为成绩有重复,先求出最高成绩,再匹配最高成绩对应的学生信息。
考核知识点: 多重join、max()
答案:
35.查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
解题思路:
第一步:关键词有“成绩”,锁定使用表:成绩表
第二步:自联接,筛选出不同课程成绩相同的记录
考核知识点: 自联接join
答案:
36. 查询每门成绩最好的前两名
解题思路:
第一步:关键词有“成绩”,锁定使用表:成绩表
第二步:自联接,筛选出各科低于自身成绩的人数为2的。
考核知识点: left join
答案:
37. 统计每门课程的学生选修人数(超过 5 人的课程才统计)。
解题思路:
第一步:关键词有“选修人数”,锁定使用表:成绩表
第二步:先用group by分组汇总各科的选修人数,再条件筛选出超过5人的课程。
考核知识点: group by、having
答案:
38.检索至少选修两门课程的学生学号
解题思路:
第一步:关键词有“两门课程”,锁定使用表:成绩表
第二步:先用group by分组汇总每个学生的选修课程数,再用having筛选出至少2门课程的学生学号
考核知识点: group by、having
答案:
39.查询选修了全部课程的学生信息
解题思路:
第一步:关键词有“全部课程”、“学生信息”,锁定使用表:成绩表、课程表、学生表
第二步:关联学生表和成绩表,再用group by分组统计每个学生的选修课程数
第三步:最后用having筛选出等于全部课程数的学生信息。
考核知识点: join、 group by、having、子查询
答案:
40.查询各学生的年龄,只按年份来算
解题思路:
第一步:关键词有“学生的年龄”,锁定使用表:学生表
第二步:用year和now来统计
考核知识点: year、now
答案:
41. 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
解题思路:
第一步:关键词有“出生日期”,锁定使用表:学生表
第二步:用timestampdiff()统计年龄
考核知识点: timestampdiff()
答案:
42.查询本周过生日的学生
解题思路:
第一步:关键词有“过生日”,锁定使用表:学生表
第二步:用week函数
考核知识点: week()
答案:
43. 查询下周过生日的学生
解题思路:
第一步:关键词有“过生日”,锁定使用表:学生表
第二步:用week函数
考核知识点: week()
答案:
44.查询本月过生日的学生
解题思路:
第一步:关键词有“过生日”,锁定使用表:学生表
第二步:用month函数
考核知识点: month()
答案:
45.查询下月过生日的学生
解题思路:
第一步:关键词有“过生日”,锁定使用表:学生表
第二步:用month函数
考核知识点: month()
答案:
sql经典50题
一、查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号(重点) 一刷: excel思路: 观察原始表格数据,在excel中想得到01比02高,我们需要将原始表格拆分成两个表,课程01表和课程02表,再进行vlookup得到c表,根据if条件判断筛出最终数据。 重点是:1.拆表 2.匹配 转成SQL语言: 1.拆表语言:
2.关联加匹配语言 :
3.完整语言:
----到这里其实就可以结束了; 4.若想加student的信息,则需要以上所有结果再作为c表再关联匹配:
若想让字段1和2为上下结果,即重复前面的信息,则语言如下:
二刷:
扩展一:查询成绩小于60分的学生的学号和姓名 1、先反向找出大于等于60分的学号 :
2、匹配:
扩展二:查询平均成绩小于60分的学生的学号、姓名和平均成绩 第一种 1、先找出小于60分和空的作为c表:
2、匹配:
三、查询所有学生的学号、姓名、选课数、总成绩(不重要)
四、查询姓“李”的老师的个数(不重要)
五、查询没学过“张三”老师课的学生的学号、姓名(重点)
六、查询学过“张三”老师所教的所有课的同学的学号、姓名(重点)
七、查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名(重点)
八、查询课程编号为“02”的总成绩(不重点)
九、查询成绩小于60分的学生的学号和姓名(同题目二) 十、查询没有学全所有课的学生的学号、姓名(重点)
十一、查询至少有一门课与学号为“01”的学生所学课程相同的学生的学号和姓名(重点)
十二、查询和“01”号同学所学课程完全相同的其他同学的学号(重点)
十五、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩(重点)
十六、检索"01"课程分数小于60,按分数降序排列的学生信息(和34题重复,不重点
十七、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩(重重点与35一样)
十八、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 -- 及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90 (超级重点)
十九、按各科成绩进行排序,并显示排名
二十、查询学生的总成绩并进行排名(不重点)
二十一、查询不同老师所教不同课程平均分从高到低显示(不重点)
二十二、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩(重要 25类似
二十三、 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计各分数段人数:课程ID和课程名称(重点和18题类似)
二十四、查询学生平均成绩及其名次(同19题,重点)
二十五、查询各科成绩前三名的记录(不考虑成绩并列情况)(重点 与22题类似)
二十六、查询每门课程被选修的学生数(不重点)
二十七、查询出只有两门课程的全部学生的学号和姓名(不重点)
二十八、查询男生、女生人数(不重点)
二十九、查询名字中含有"风"字的学生信息(不重点)
三十一、 查询1990年出生的学生名单(重点year)
三十二、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩(不重要)
三十三、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列(不重要)
三十四、查询课程名称为"数学",且分数低于60的学生姓名和分数(不重点)
三十五、查询所有学生的课程及分数情况(重点)
三十六、 查询任何一门课程成绩在70分以上的姓名、课程名称和分数(重点)
三十七、 查询不及格的课程并按课程号从大到小排列(不重点)
三十八、 查询课程编号为03且课程成绩在80分以上的学生的学号和姓名(不重要)
三十九、求每门课程的学生人数(不重要)
四十、查询选修“张三”老师所授课程的学生中成绩最高的学生姓名及其成绩(重要top)
四十一、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩 (重点)
四十二、查询每门功课成绩最好的前两名(同22和25题)
四十三、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列(不重要)
四十四、检索至少选修两门课程的学生学号(不重要)
四十五、查询选修了全部课程的学生信息(重点划红线地方)
四十六、查询各学生的年龄(精确到月份)
四十七、 查询没学过“张三”老师讲授的任一门课程的学生姓名(还可以,自己写的,答案中没有)
四十八、 查询两门以上不及格课程的同学的学号及其平均成绩
四十九、查询本月过生日的学生(无法使用week、date(now())
五十、 查询下月过生日的学生
SQL的练习,求答案!!!
/*创建Moonfox_db数据库*/
use master
if exists(select * from sysdatabases where name='Moonfox_db')
drop database Moonfox_db
create database Moonfox_db
on
(
name='Moonfox_db_data',
filename='D:\Visual Studio 2008 & Sql server 2005\Sql server\Moonfox_db.mdf',
size=10,
filegrowth=2MB
)
log on
(
name='Moonfox_db_log',
filename='D:\Visual Studio 2008 & Sql server 2005\Sql server\Moonfox_db.ldf',
size=5,
filegrowth=20%
)/*创建Department表*/
use Moonfox_db
if exists(select * from sysobjects where name='Department')
drop table Department
create table Department
(
DID int identity (1,1)primary key,--部门编号,主键
Dname nvarchar(20),--部门名称
Address nvarchar(50),--部门地址
Photo decimal(12,0),--电话
)/*创建Employee表*/
use Moonfox_db
if exists(select * from sysobjects where name='Employee')
drop table Employee
create table Employee
(
EID int identity (1,1)primary key,--职工编号,主键
Ename varchar(10),--职工名
Gender nchar(2) check(Gender='男' or Gender='女'),--性别,添加限制
Position nvarchar(10) check(Position='员工' or Position='组长' or Position='经理'),--职务,添加限制
Address nvarchar(50),--家庭地址
DID int,--部门编号,外键
foreign key(DID) references Department(DID)--外键约束
)
/*创建Care表*/
use Moonfox_db
if exists(select * from sysobjects where name='Care')
drop table Care
create table Care
(
CID int identity (1,1)primary key,--保健卡编号,主键
EID int,--职工号,外键
foreign key(EID) references Employee(EID),--外键约束
CheckDate datetime,--检查身体日期
PhysicalCondition nvarchar(4) check(PhysicalCondition='一般' or PhysicalCondition='差' or PhysicalCondition='好'),--健康状况
)
/*创建Care表约束*/
alter table Care
add
constraint DF_CheckDate default(getdate()) for CheckDate--缺省,默认净时间为当前计算机时间 路径自己修改,试图自己做,选择语句自己写。我该睡觉了,抱歉,你试着在sql server中运行下,我等着休息,也不知道写的有没有错误,没时间帮你写省下的了。不急着用的话我明天帮你写吧。
有一些类似的题看看吧 一定有帮助
实验一
练习1、请查询表DEPT中所有部门的情况。
select * from dept;
练习2、查询表DEPT中的部门号、部门名称两个字段的所有信息。
select deptno,dname from dept;
练习3、请从表EMP中查询10号部门工作的雇员姓名和工资。
select ename,sal from emp where deptno=10;
练习4、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。
select ename,sal from emp where job='CLERK' or job='MANAGER';
练习5、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。
select ename,deptno,sal,job from emp where deptno between 10 and 30;
练习6、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。
select ename,sal,job from emp where ename like 'J%';
练习7、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。
select ename,job,sal from emp where sal<=2000 order by sal desc;
练习8、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。
select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=’CLERK’;
练习9、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。
select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000;
练习10、在表EMP中查询所有工资高于JONES的所有雇员姓名、工作和工资。
select ename,job,sal from emp where sal>(select sal from emp where ename=’JONES’);
练习11、列出没有对应部门表信息的所有雇员的姓名、工作以及部门号。
select ename,job,deptno from emp where deptno not in (select deptno from dept);
练习12、查找工资在1000~3000之间的雇员所在部门的所有人员信息
select * from emp where deptno in (select distinct deptno from emp where sal between 1000 and 3000);
练习13、雇员中谁的工资最高。
select ename from emp where sal=(select max(sal) from emp);
select ename from (select * from emp order by sal desc) where rownum<=1;
*练习14、雇员中谁的工资第二高(考虑并列第一的情况,如何处理)。
select ename,sal from (select ename ,sal from emp where sal<(select max(sal) from emp) order by sal desc) where rownum<=1;
实验二
1. 查询所有雇员的姓名、SAL与COMM之和。
select ename,sal+nvl(comm,0) “sal-and-comm” from emp;
2. 查询所有81年7月1日以前来的员工姓名、工资、所属部门的名字
select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and hiredate<=to_date(‘1981-07-01’,’yyyy-mm-dd’);
3. 查询各部门中81年1月1日以后来的员工数
select deptno,count(*) from emp where hiredate>=to_date(‘1981-01-01’,’yyyy-mm-dd’) group by deptno;
4. 查询所有在CHICAGO工作的经理MANAGER和销售员SALESMAN的姓名、工资
select ename,sal from emp where (job=’MANAGER’ or job=’SALES’) and deptno in (select deptno from dept where loc=’CHICAGO’);
5. 查询列出来公司就职时间超过24年的员工名单
select ename from emp where hiredate<=add_months(sysdate,-288);
6. 查询于81年来公司所有员工的总收入(SAL和COMM)
select sum(sal+nvl(comm,0)) from emp where to_char(hiredate,’yyyy’)=’1981’;
7. 查询显示每个雇员加入公司的准确时间,按××××年××月××日 时分秒显示。
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;
8. 查询公司中按年份月份统计各地的录用职工数量
select to_char(hiredate,'yyyy-mm'),loc,count(*) from emp,dept
where emp.deptno=dept.deptno group by to_char(hiredate,'yyyy-mm'),loc;
9. 查询列出各部门的部门名和部门经理名字
select dname,ename from emp,dept where emp.deptno=dept.deptno and job=’MANAGER’;
10. 查询部门平均工资最高的部门名称和最低的部门名称
select dname from dept where deptno=(select deptno from (select deptno from emp group by deptno order by avg(sal) ) where rownum<=1)
union all select dname from dept where deptno=(select deptno from (select deptno from emp group by deptno order by avg(sal) desc ) where rownum<=1);
11. *查询与雇员号为7521员工的最接近的在其后进入公司的员工姓名
select ename from (select ename from
(select ename from emp where hiredate>(select hiredate from emp where empno=7521) order by hiredate ) where rownum<=1)
SQL多项选择题,急求答案,最好有解析
1.答案A,D,E DESC是降序,省略ASC和DESC,默认为升序。
2.答案A,C,D,E 创建视图时不允许在所用SELECT语句中使用ORDER BY、COMPUTE子句
3.C,D,E 执行存储过程时可用WITH RECOMPLE选项进行重新编译;只有当执行存储过程的语句是批处理中的第一个语句,才可以直接通过名称来调用存储过程
4.C,E 使用SQL Server Management Studio不能运行命令行实用程序sqlcmd
5.C,D,F 一个局部变量只能在一个语句批中使用,使用SET语句只能对一个局部变量赋值,刚定义的局部变量的初值为空值
6.B 用户定义函数可以有输入参数和返回值
急求sql server试题答案(判断题)急急急
太深奥
判断题
(1)强制数据完整性可以确保数据库中的数据质量。(√)
(2)规则可以在其他数据库中创建。(√)
(3)规则能绑定到系统数据类型。(×)
(4)规则不能绑定到数据类型为image、text或timestamp的列。(√) (5)一个数据表中只能有一个主键约束,但可以有多个UNIQUE约束(√)
(6)主键约束中的字段不能接受空值,UNIQUE约束的字段也不能接受空值。(×)
(7)标识属性和默认值都属于数据完整性的范畴。(√)
(8)使用存储过程可以减少网络流量。(√)
(9)存储过程使代码具有重用性。(√)
(10)存储过程可以作为一个安全机制来使用。(√)
(11)触发器不能被调用,它可以自动执行。(√)
(12)利用DTS不能把oracle,access,sybase和informix中的数据转换到sql server 2000中。(×)
一月四号SQL考试,求大神帮助,有题目
4) 检查约束( CHECK )
将slt_couse表中的score列的检查约束设置为>=0且<=100
答:check(score>=0 and score<=100)
5) 主键
将dept表中的dp_id列设置为主键
答:primary key 设置主键
这分也太低了,每道题10分还差不多
1)向表中添加列:
为“dept”表添加“dp_count”列(数据类型为nvarchar,长度为3,允许为空)
解:alter table dept add dp_count nvarcher(3) null;
2)修改列数据类型:
修改“dept”表的“dp_count”列数据类型为int,且唯一
解:alter table dept alter column dp_count int;
alter table dept add constraint dp_count_unique unique (dp_count);
3)删除表中指定列:
删除“dept”表的“dp_count”列
解:alter table dept drop column dp_count;
4) 检查约束( CHECK )
将slt_couse表中的score列的检查约束设置为>=0且<=100
解:alter table slt_couse add check (score>=0 and score<=100);
5) 主键
将dept表中的dp_id列设置为主键
解:alter table deptadd constraint dp_id_primaryKey primary key(dp_id);
6)给表中指定列添加default约束:
给“dept”表的“dp_num”列添加默认值为15的约束。
解:alter table dept add constraint dp_num_default default (15) for dp_num;
7)给表中指定列添加索引:
给“dept”表的“dp_name”列创建非聚簇,降序索引。
解:create nonclustered index inx_dp_name on dept(dp_name desc);
求SQL试题答案
1. C
2. A
3. A
4. B 说明:%是一个通配符,如select * from test where ID like 12% 这句话就表示在test表中搜索出ID以12开头的数据记录,可以是123,也可以是1234.
5. C
6. A 如果读者也作为主键你想会发生啥情况,每个人只能借1本书,灾难啊
7. A 我真的运行了一次,因为我也不确定...
8. B
9. C
10.D
11.D
12.B 这一题考的是LEFT OUTER JOIN的用法,LEFT OUTER JOIN等同于LEFT JOIN,数据数目按照较大数来算.
二.
1. ABCE D是程序员做的事
2. ABC 系统固定的角色权限是标准的PUBLIC权限,用户可以根据需要进行权限的调整,就是C选项
3. DE A错误的原因是因为事务备份的还原精度要比差异备份高,能恢复到故障点前一刻,这是差错备份做不到的;B,事务日志只能恢复从上一次备份到本次故障点之间的一个时刻.
4. AB