数据库的题目

数据库的题目,第1张

--这次被你坑了

--你第一个大问题 x-y根本没关系 x-z有直接的关系 y只是课程名字啥子的 x可以算z的父表 y也是z的父表 x跟y 可以说是平级的也是 x和y就像 人的特征 和人会的技能 x+y=人

create table stu_dent(

stu_id int primary key identity(1000,1),

stu_xuehao int unique not null,

stu_name varchar(10) not null,

stu_sex varchar(2) check(stu_sex='男'or stu_sex='女'),

stu_age int check(stu_age>0 and stu_age<100),

stu_ximing varchar(20) not null,

stu_shengao int check(stu_shengao>0 and stu_shengao<200),

)--第一张表

insert into stu_dent values(2001,'小黄','男',20,'英语',152)

insert into stu_dent values(2002,'小丽','男',20,'数学',152)

insert into stu_dent values(2003,'小王','男',20,'语文',152)

insert into stu_dent values(2004,'小张','男',20,'物理',152)

insert into stu_dent values(2005,'小幕','男',20,'生物',152)

insert into stu_dent values(2006,'张飞','男',20,'计算机',152)

insert into stu_dent values(2007,'小飞','男',20,'计算机',152)

insert into stu_dent values(2008,'张三','男',20,'计算机',152)--插入数据

select from stu_dent

create table stu_course(

stu_id int primary key identity(1000,1),

--stu_xh int references stu_dent(stu_xuehao),

stu_kh int unique not null,--课号

stu_km varchar(20) ,--课名

stu_ks varchar(50)not null,--课时

stu_xkh varchar(20) not null,--先行课

)--键张表

insert into stu_course values (15,'英语','40','语文')

insert into stu_course values (12,'物理','40','数学')

insert into stu_course values (10,'生物','40','英语')

insert into stu_course values (4,'语文','40','物理')

insert into stu_course values (3,'计算机','40','英语')--插入数据

create table stu_xuanke(

stu_xuh int references stu_dent(stu_xuehao) not null,

stu_kehao int references stu_course(stu_kh) not null,

stu_chegnji int not null,

)--最后张表

insert into stu_xuanke values(2001,15,55)

insert into stu_xuanke values(2001,3,55)

insert into stu_xuanke values(2001,12,99)

insert into stu_xuanke values(2001,10,66)

insert into stu_xuanke values(2001,4,44)

insert into stu_xuanke values(2008,15,55)

insert into stu_xuanke values(2008,3,55)

insert into stu_xuanke values(2008,12,99)

insert into stu_xuanke values(2008,10,66)

insert into stu_xuanke values(2008,4,44)

insert into stu_xuanke values(2002,15,55)

insert into stu_xuanke values(2006,3,100)

insert into stu_xuanke values(2007,3,101)

insert into stu_xuanke values(2007,15,18)--插入数据

--/////////////////////////////////////////一下就是 三个问题的查询语句 ///////////////////////////////////////

select stu_kh,stu_km from stu_course join stu_xuanke on stu_kehao=stu_kh where stu_xuh in(select stu_xuh from stu_xuanke where stu_kehao=(select stu_kh from stu_course where stu_km='计算机'))--第一个问题

select stu_name from stu_dent where stu_xuehao in(select stu_xuh from stu_xuanke where stu_kehao=(select stu_kh from stu_course where stu_km='英语'))--第二个问题

select count() ,stu_xuh from stu_xuanke join stu_dent on stu_xuehao=stu_xuh where stu_xuehao in(select stu_xuehao from stu_dent) group by stu_xuh having count()=5--最后个问题

--记得哦以后有这么有趣的题目通知我哦 我也好久没玩SQL

此题应该是建表和插入数据的经典题目

1 先建立表(Sno代表学号,sname代表姓名,ssex代表性别,sage代表年龄,sdept代表所在系,cno代表课号,cname代表课程名称,cpno代表先修课号,ccredit代表学分,grade代表成绩

create table student

( sno char(5),

sname varchar(10) not null,

ssex char(2),

sage smallint constraint DF_student_sage default(20),

sdept varchar(20),

constraint PK_student_sno primary key(sno),

constraint CK_student_sage check(sage>0) );

create table course

( cno char(2),

cname varchar(20) not null constraint UQ_course_cname unique,

cpno char(2),

ccredit smallint constraint DF_course_ccredit default(2),

constraint PK_course_cno primary key(cno),

constraint CK_course_ccredit check(ccredit>0),

constraint FK_course_cpno foreign key(cpno) references course(cno) );

create table sc

( sno char(5),

cno char(2),

grade int,

constraint PK_sc_sno_cno primary key(sno, cno),

constraint FK_sc_sno foreign key(sno) references student(sno),

constraint FK_sc_cno foreign key(cno) references course(cno),

constraint CK_sc_cno check(grade>0) );

2 将记录插入到表中

insert into student(sno, sname, ssex, sage, sdept) values('95001', '李勇', '男', 20, 'CS');

insert into student(sno, sname, ssex, sage, sdept) values('95002', '刘晨', '女', 19, 'IS');

insert into student(sno, sname, ssex, sage, sdept) values('95003', '王敏', '女', 18, 'MA');

只要会建表语句和插入语句即可

CREATE TABLE <表名>

( <列名> <数据类型> [not null] [[constraint 约束名] default (缺省值)] [[constraint 约束名] unique]

[,其他列的定义]…

 [,[constraint 约束名] primary key(列名[, 列名] …)]

 [,[constraint 约束名] foreign key(列名[, 列名] …) references 表名(列名[,列名] …)]

 [,[constraint 约束名] check(条件)] );

 

 INSERT [INTO] <表名>[(<列名> [,<列名>…] ) ] VALUES(<表达式> [,<表达式>…] );

一、查询课程编号为“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经典50题进行详细解析。

解析包含:1、解题思路,2、考核知识点,3、答案;

首先,表结构用脑图输出出来,如下所示:

先进行数据准备,建表以及插入数据。

1查询"01"课程比"02"课程成绩高的学生的信息及课程分数

解题思路:

第一步:关键词有“课程编号”、“课程成绩”、“学生信息”,锁定使用表:学生表、成绩表。

第二步:给出学生信息及课程分数,通过主键sid关联学生表和课程表。

第三步:比较同一个学生不同课程的成绩,再关联一次课程表,利用sid、cid进行关联。

第四步:根据题目,用where比较分数筛选结果。

考核知识点: join,where

答案:

11 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )

解题思路:

第一步:关键词有“课程编号”、“学生编号”,锁定使用表:成绩表。

第二步:分别查询出存在" 01 "课程的学生和存在" 02 "课程的学生。

第三步:对两个子查询进行关联,用sid进行左联接。

考核知识点: where, 子查询,left join

答案:

12 查询同时存在01和02课程的情况

解题思路: 同11,把left join改为join

考核知识点: where, 子查询,join

答案:

13 查询选择了02课程但没有01课程的情况

解题思路: 类似11,把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)

答案:

151 按各科成绩进行行排序,并显示排名, Score 重复时合并名次

解题思路:

第一步:关键词有“各科成绩”,锁定使用表:成绩表。

第二步:用dense_rank()排名。

考核知识点: dense_rank() over(partition by)

答案:

16查询学生的总成绩,并进行排名,总分重复时保留名次空缺

解题思路:

第一步:关键词有“总成绩”,锁定使用表:成绩表。

第二步:用group by统计学生的总成绩。

第三步:用left join自关联进行排名。

考核知识点: group by、 left join

答案:

161 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺

解题思路:

第一步:关键词有“总成绩”,锁定使用表:成绩表。

第二步:用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()

答案:

(1)已知表T1中有2行数据,T2中有3行数据,执行SQL语句

“select a from T1 a,T2 b”后,返回的行数为______

A、2行

B、3行

C、5行

D、6行

多表查询没有指定连接条件,会导致笛卡尔积的出现,返回行数等于2张表的行数乘积,返回6行记录

考察:对多表连接、笛卡尔积的理解

答案:A

(2)、已知表T1和T2的字段定义完全相同,T1,T2中各有5条不同的数据,其中T1有2条数据存在于表T2中,语句“select from T1 union select from T2”

返回的行数为_______

A、8行

B、10行

C、3行

D、12行

第二题 UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

考察:UNION 的理解

答案: A

(3)、 已知表T1含有字段ID、CourseID和Score,且数据为

ID CourseID Score

3 1 90

2 1 85

2 2 90

3 2 80

则语句“select id,sum(ScorE) from T1 group by ID”的执行结果为_________

A、 ID sum(ScorE)

—– ———-

3 170

2 175

B、 ID sum(ScorE)

—– ———-

2 175

3 170

C、 ID sum(ScorE)

—– ———-

2 170

3 175

D、 ID sum(ScorE)

—– ———-

3 175

2 170

第三题 GROUP BY 对按照ID字段进行分组,同时对ID相同字段的ScorE进行求和,GROUP by 会自动对结果集进行排序所以答案选B

考察:group by 的理解

答案: B

(4)、电话号码表t_phonebook中含有100万条数据,其中号码字段PhoneNo上创建了唯一索引,且电话号码全部由数字组成,要统计号码头为321的电话号码的数量,下面写法执行速度最慢的是_________

A、 select count() from t_phonebook where phoneno >= ‘321’ and phoneno < ‘321A’

B、 select count() from t_phonebook where phoneno like ‘321%’

C、 select count() from t_phonebook where substring(phoneno,1,3) = ‘321’

A>或者< *** 作符会采用索引查找

B:LIKE通配符在XXX%情况下会应用索引,如果在%xxx%等情况下不会应用索引

答案: C:采用函数处理的字段不能利用索引,例如substr() 这个题好像写成java的函数了

答案: C

(5)、已知表tbl中字段land_ID建有索引,字段cust_id建有唯一索引,下列语句查询逻辑相同,其中执行效率最优的是

A、 SELECT FROM tbl

WHERE land_id > 750

or (cust_id=180 or cust_id=560)

B、 SELECT FROM tbl

WHERE (cust_id=180 or cust_id=560)

or land_id > 750

C、 SELECT FROM tbl WHERE land_id > 750

UNION

SELECT FROM tbl WHERE cust_id = 180

UNION

SELECT FROM tbl WHERE cust_id = 560

D、 SELECT FROM tbl WHERE land_id > 750

UNION

( SELECT FROM tbl WHERE cust_id = 180

UNION ALL

SELECT FROM tbl WHERE cust_id = 560

)

C/D相比较而言,D的执行效率更高一些

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录

采用UNION ALL *** 作符替代UNION,因为UNION ALL *** 作只是简单的将两个结果合并后就返回。

(6)、员工技能表Staffskill结构如下,Staff和Skill字段建有唯一约束

staff VARCHAR2(10),

skill VARCHAR2(10)

哪条语句可以查询同时拥有技能A和技能B的员工

A、 select staff from Staffskill where skill=’A’ OR skill=’B’

B、 select staff from Staffskill where skill=’A’ AND skill=’B’

C、 select staff from Staffskill where skill=’A’ OR skill=’B’ group by staff

D、 select staff from Staffskill where skill=’A’ OR skill=’B’ group by staff having count()>1

答案:D

(7)员工表staff表结构如下

staffNo varchar2(10),

Email varchar2(50)

哪一个SQL语句查询出没有E_mail地址的员工号

A、select staffno from Staff where Email = NULL

B、select staffno from Staff where Email <> NULL

C、select staffno from Staff where Email is null

D、select staffno from Staff where Email is not null

答案: C

(8)Oracle数据库启动步骤的顺序为

1Mount 2Open 3Nomount

A、3-1-2

B、2-3-1

C、2-1-3

D、3-2-1

答案:A

(9)存在两个结构相同的数据库表T1(col1,col2,col3)、T2(col1,col2,col3),写出一SQL语句将所有T1数据导入到T2表

A、select col1,col2,col3 from T1 INTO T2 (col1,col2,col3)

B、INSERT T1 (col1,col2,col3) INTO T2(col1,col2,col3)

C、insert into T2 (col1,col2,col3) AS select col1,col2,col3 from T1;

D、insert into T2 (col1,col2,col3) select col1,col2,col3 from T1;

答案: D

10)一个表的字段为varchar2,如果建表时没有指定长度,则默认长度为:

A、1

B、25

C、38

D、255

E、4000

F、建表时varchar2类型字段必须指定长度

答案:F

(11)用TRUNCATE和DELETE语句删除表中数据的区别

A、TRUNCATE命令不记录日志

B、TRUNCATE命令记录日志

C、DELETE命令不记录日志

答案:A

(12)如下查询语句SELECT id_number,100/quantity from inventory如果quantity为空,则查询语句的第二个字段将返回

A、 a space

B、 a null value

C、 a value of 0

D、 a value of 100

E、 the keywork null

答案:B

(13)如下语句:SELECT iid_number,mid_number FROM inventory i,manufacturer m

WHERE imanufacturer_id = mid_number

Order by inventorydescription

执行时是错误的,请问以下措施哪个能够改正这个错误

A 在order by的子句中使用表的别名

B 在where子句中去掉表的别名

C 在where子句中用表名代替表的别名

D 在order by子句中去掉表名,只要字段名称即可

(如果2张表中,不同时存在字段名为description的话,D答案也是正确的)

答案:A

14)A表字段a 类型int中有100条记录,值分别为1至100。如下语句

SELECT a FROM A

WHERE A BETWEEN 1 AND 50

OR (A IN (25,70,95)

AND A BETWEEN 25 AND 75)

则如下哪个值在这个sql语句返回的结果集中

A、30 B、51 C、75 D、95

答案:A

15) 变量v_time = ‘23-MAY-00’,如下那条语句返回值为‘01-JAN-00’

A SELECT ROUND(V_TIME,’DAY’) FROM DUAL;

B SELECT ROUND(V_TIME,’YEAR’) FROM DUAL;

C SELECT ROUND(V_TIME,’MONTH’) FROM DUAL;

D SELECT ROUND(TO_CHAR(V_TIME,’YYYY’)) FROM DUAL;

答案:B

16)关于索引(index)的说法哪些是错误

A、创建索引能提高数据插入的性能

B、索引应该根据具体的检索需求来创建,在选择性好的列上创建索引

C、索引并非越多越好

D、建立索引可使检索 *** 作更迅速

答案: A

(17)指出下面sql语句的错误之处:

select id_number “Part Number”,sum(price) “price” from inventory

where price > 50

group by “Part Number”

order by 2;

A、order by 2

B、from inventory

C、 where price > 50

D、group by “Part Number”

答案:D

(18)如下语句

if v_num > 5 then

v_example := 1;

elsif v_num > 10 then

v_example := 2;

elsif v_num < 20 then

v_example := 3;

elsif v_num < 39 then

v_example := 4;

else v_example := 5;

如果v_num = 37,则v_example的值是多少

A、1 B、2 C、3 D、4 E、5

答案:A

1A 物理结构独立性

2C 系统故障

3C 数据流图

4D 保证数据的安全性和完整性

5C 物理设计

6A 概念模式改变,外模式和应用程序不变

7D 全部

8A 全部

自己做的,希望高手指点

以上就是关于数据库的题目全部的内容,包括:数据库的题目、数据库概论SQL题、sql经典50题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9728535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存