MySQL经典⾯试题--SQL语句备注:建⽴下⾯的每⼀个题⽬对应的表,插⼊案例数据,然后执⾏需要的SQL,将结果复制到word⽂件中MYSQL经典⾯试题,后⾯有建表过程和SQL执⾏语句
有道云连接
⼀、现有数据库cas e m anag e中表结构如下图
TABLENAME:afinfo
1徐洪国371979-03-
23
男⾼中
2王芳芳261988-02-
06
⼥本科
3徐晓盛241990-04-
02
男硕⼠
4陈晓301984-09-
12
⼥博⼠
5郑凯271987-12-
30
男⼤专
6。。。。。
。。。。。。
。。。。
。。。。。
。。
。。。。。
1)请编写s q l语句对年龄进⾏升序排列
select*from afinfo order by birth;
2)请编写s q l语句查询对“徐”姓开头的⼈员名单select*from afinfo where name like'徐%';
3)请编写s q l语句修改“陈晓”的年龄为“45”
update afinfo set age=45and birth=birth-YEAR(45)where name="陈晓"; 4)请编写s q l删除王芳芳这表数据记录。
delete from afinfo where name="王芳芳";
⼆、现有以下⼏个表
学⽣信息表(student)
张三001
李四002
马五003
甲六004考试信息表(exam)
001数学80
002数学75
001语⽂90
002语⽂80亚洲最大aj
一对象图片搞笑图
001英语90
002英语85
003英语80
004英语70
1)查询出所有学⽣信息,SQL怎么编写?
select * from stu;
2)新学⽣⼩明,学号为005,需要将信息写⼊学⽣信息表,SQL语句怎么编写?
insert into stu values ("⼩明",005);
3)李四语⽂成绩被登记错误,成绩实际为85分,更新到考试信息表中,SQL语句怎么编写?
update exam set score=85 where id=(select id from stu where name="李四") and subject="语⽂";
4)查询出各科成绩的平均成绩,显⽰字段为:学科、平均分,SQL怎么编写?
select subject,avg(score) from exam group by subject;
5)查询出所有学⽣各科成绩,显⽰字段为:姓名、学号、学科、成绩,并以学号与学科排序,没有成绩的学⽣也需要列出,SQL怎么编写?
select s.name,s.id,e.subject,e.score from stu s left join exam e on s.id=e.id order by id,subject;
6)查询出单科成绩最⾼的,显⽰字段为:姓名、学号、学科、成绩,SQL怎么编写?
select s.name,s.id,e.subject,e.score from stu s join exam e on s.id=e.id where (e.subject,e.score) in (select subject,max(score) from exam group by subject);
7)列出每位学⽣的各科成绩,要求输出格式:姓名、学号、语⽂成绩、数学成绩、英语成绩,SQL怎么编写?
三、根据要求写出SQL语句。
Student(s_no,sname,sage,sex)学⽣表
Course(c_no,cname,t_no)课程表
Sc(s_no,c_no,score)成绩表
Teacher(t_no,tname)教师表
1、查询“001”课程⽐“002”课程成绩⾼的所有学⽣的学号。
select a.s_no from (select s_no,score from Sc where c_no='1') a,(select s_no,score from Sc where c_no='2') b where
a.score>
b.score and a.s_no=b.s_no;
2、查询平均成绩⼤于60分的同学的学号和平均成绩。
select s_no,avg(score) from Sc group by s_no having avg(score)>60;
3、查询所有同学的学号、姓名、选课数、总成绩。
select Student.s_no,Student.sname,count(Sc.c_no),sum(score) from Student left outer join Sc on Student.s_no=Sc.s_no group by Student.s_no, Student.sname;
4、查询姓李的⽼师的个数。
select count(distinct(tname)) from Teacher where tname like '李';
5、查询没学过“叶平”⽼师课的同学的学号、姓名
select Student.s_no,Student.sname from Student where s_no not in(select distinct (Sc.s_no) from Sc,Course,Teacher where
Sc.s_no=Course.c_no and Teacher.t_no=Course.t_no ame='叶平');
6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名。
select Student.s_no,Student.sname from Student,Sc where Student.s_no=Sc.s_no and Sc.c_no='002' and exists(select * from Sc as Sc1 where Sc.s_no=Sc1.s_no and Sc1.s_no='002');
7、查询所有课程成绩⼩于60分的同学的学号、姓名。
select s_no,sname from Student where s_no not in (select S.s_no from Student AS S,Sc where S.s_no=Sc.s_no and score>60);
8、查询没有学全所有课的同学的学号、姓名。
select Student.s_no,Student.sname from Student,Sc where Student.s_no=Sc.s_no group by Student.s_no,Student.sname having count(c_no)<(select count(*) from Course);
10、查询⾄少学过学号为“001”同学所有⼀门课的其他同学学号和姓名。
select distinct s_no,sname from Student,Sc where Student.s_no=Sc.s_no and Sc.c_no in (select c_no from Sc where s_no='1001');
11、把“s c”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩。
update Sc set score=(select avg(Sc_2.score) from Sc Sc_2 where SC_2.c_no=Sc.c_no ) from Course,Teacher where
Course.c_no=Sc.c_no and Course.t_no=Teacher.t_no ame='叶平');
12、查询和“1002”号同学学习的课程完全相同的其他同学学号和姓名。
select s_no from Sc where c_no in (select c_no from Sc where s_no='1002') group by s_no having count(*)=(select count(*) from Sc where s_no='1002');
表记录。
s c表记录。
13、删除学习“叶平”⽼师课的c
delete Sc from course,Teacher where Course.c_no=SC.c_no and Course.t_no=Teacher.t_no and tname='叶平';
表中插⼊⼀些记录,这些记录要求符合⼀下条件:没有上过编号“003”课程的同学学号
s c表中插⼊⼀些记录,这些记录要求符合⼀下条件:没有上过编号
14、向c
insert into Sc select s_no from Student where s_no not in (Select s_no from Sc where c_no='003');
15、查询各科成绩最⾼和最低的分:以如下形式显⽰:课程I D,最⾼分,最低分。
SELECT L.c_no As c_no,L.score AS max_score,R.score AS mix_score FROM Sc L ,Sc AS R
WHERE L.c_no = R.c_no and
L.score = (SELECT MAX(IL.score)
FROM Sc AS IL,Student AS IM
WHERE L.c_no = IL.c_no and IM.s_no=IL.s_no
GROUP BY IL.c_no)
AND
R.Score = (SELECT MIN(IR.score)
FROM Sc AS IR
WHERE R.c_no = IR.c_no
GROUP BY IR.c_no
) order by L.c_no;
16、查询不同⽼师所教不同课程平均分从⾼到低显⽰。
select c_no,avg(score) avg_score from Sc group by c_no order by avg_score desc ;
17、统计各科成绩,各分数段⼈数:课程I D,课程名称,【100-85】,【85-70】,【70-60】,【<60】
select Course.c_no,cname,
count(case when score>85 and score<=100 then score end) '[85-100]',
count(case when score>70 and score<=85 then score end) '[70-85]',
count(case when score>=60 and score<=70 then score end) '[60-70]',
count(case when score<60 then score end) '[<60]'
from Course,Sc
where Course.c_no=Sc.c_no
group by Course.c_no,c_name;
18、查询每门课程被选修的学⽣数
select c_no,count(*) from Sc group by c_no;
19、查询出只选修了⼀门课程的全部学⽣的学号和姓名
select Student.s_no,Student.sname,count(c_no) from Student join Sc on Student.s_no=Sc.s_no group by Student.s_no,
Student.sname having count(c_no)=1;
20、查询男⽣、⼥⽣⼈数
select count(*) from Student group by sex;
21、查询姓“张”的学⽣名单
select * from Student where sname like '张%';
22、查询同名同性学⽣名单,并统计同名⼈数。
select sname ,count(*) from Student group by sname having count(*)>1;
23、查询1994年出⽣的学⽣名单(注:s tud e nt表中s ag e列的类型是d atatim e)
select * from Student where year(curdate())-age='1994';
24、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。
select c_no ,avg(score)from Sc group by c_no order by avg(score) asc,c_no desc;
25、查询平均成绩都⼤于85的所有学⽣的学号,姓名和平均成绩
select Student.s_no,Student.sname,avg(score) from Student,Sc where Student.s_no=Sc.s_no group by Student.s_no, Student.sname having avg(score)>85;
26、查询课程名称为“数据库”且分数低于60的学⽣姓名和分数
select Student.sname,Sc.score from Student,Sc where Student.s_no=Sc.s_no and Sc.score<60 and Sc.c_no=(select c_no from Course where cname='数据库');
27、查询所有学⽣的选课情况
select Student.s_no,Student.sname,Sc.s_no,Courseame from Student,Sc,Course where Student.s_no=Sc.s_no and
Sc.c_no=Course.c_no;
28、查询不及格的课程,并按课程号从⼤到⼩排序。
select Student.sname,Sc.c_no,Courseame,Sc.score from Student,Sc,Course where Student.s_no=Sc.s_no and
Sc.c_no=Course.c_no and Sc.score<60 order by c_no;
29、查询课程编号为003且课程成绩在80分以上的学⽣的学号和姓名。
select Student.s_no,Student.sname from Student,Sc,Course where Sc.score>80 and Course.c_no='003';
电子邀请函免费模板下载
30、求选修了课程的学⽣⼈数。
select count(*) from (select count(*) from Sc group by s_no) b;
31、查询选修了“冯⽼师”所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩。
select Student.sname,Sc.score from Student,Sc,Course where Student.s_no=Sc.s_no and Sc.c_no=
Course.c_no order by score desc limit 1;
32、查询各个课程及相应的选修⼈数。
select Course.c_no,Courseame,count(s_no) from Course join Sc on Course.c_no=Sc.c_no group by Course.c_no, Courseame; 33、查询每门课程最好的前两名。
select a.s_no,a.c_no,a.score from Sc a where (select count(distinct score) from Sc b where b.c_no=a.c_no and b.score>=a.score)<=2 order by a.c_no,a.score desc ;
34、查询每门课程的学⽣选修⼈数(超过10⼈的课程才统计)。要求输出课程号和选修⼈数,查询结果按⼈数降序排列,查询结果按⼈数降序排列,若⼈数相同,按课程号升序排列。
select Sc.c_no,count(*) from Sc group by c_no having count(*)>10 order by count(*) desc,c_no;
35、检索⾄少选修两门课程的学⽣学号。
select s_no from Sc group by s_no having count(*)>2;
36、查询全部学⽣都选修的课程的课程号和课程名。
select Course.c_no,Courseame from Course join Sc on Course.c_no=Sc.c_no join (select c_no,count(s_no) from Sc group by c_no having count(s_no)=(select count(*) from Student) )as a on Course.c_no=a.c_no;
37、查询两门以上不及格课程的同学的学号及其平均成绩。
select s_no,avg(score) from Sc where s_no in (select s_no from Sc where score<60 group by s_no having count(*)>2) group by
s_no;
四、根据表1和表2的信息写出SQL
表1:
P书号TNO char15no
书名TNAME varchar50no
作者姓名TAUTHO
varchar8no
R
出版社编
CNO char5yes
书类TCATEG
mysql怎么读英语varchar20yes
ORY
价格TPRICE numeric82yes
表2:出版社表C
CNO char5NO
p出版社编
出版社名
CNAME varchar20NO
出版社电
CPHONE varchar15YES
出版社城
CCITY varchar20YES
1、查询出版过“计算机”类图书的出版社编号(若⼀个出版社出版过多部“计算机”类图书,则在查询结果中该出版社编号只显⽰⼀次)select distinct CNO from tb4_1 where TCATEGORY='计算机';
2、查询南开⼤学出版社的“经济”类或“数学”类图书的信息。
select*from tb4_1,tb4_2 where tb4_1.CNO=tb4_2.CNO and tb4_2.CNAME='南开⼤学出版社'and(tb4_1.TCATEGORY='经济'or tb4_1.TCATEGORY='数学');
3、查询编号为“00001”的出版社出版图书的平均价格。
select avg(TPRICE)from tb4_1 where CNO='00001';
4、查询⾄少出版过20套图书的出版社,在查询结果中按出版社编号的升序顺序显⽰满⾜条件的出版社编号、出版社名称和每个出版社出版的图书套数。
select tb4_2.CNAME from tb4_2,tb4_1 where tb4_1.CNO=tb4_2.CNO and group by tb4_1.CNO having count(tb4_1.CNO)>20;
5、查询⽐编号为“00001”的出版社出版图书套数多的出版社编号。
select CNO from tb4_1 group by CNO having count(*)>(select count(*)from tb4_1 where CNO='20001');
五、假如现有A和B两个表,A表中包括I D、C OL1、C OL2、C OL3等字段,B表中包
括I D、C OL1、C OL2、C OL3、C OL4、C OL5等字段,现需要SQL把B表中C OL1,C OL2内容更新到A表中C OL1,C OL2字段,I D为关联字段,要求只能写⼀个SQL。
update tb5_1,tb5_2 set tb5_1.COL1=tb5_2.COL1,tb5_1.COL2=tb5_2.COL2 where tb5_1.id=tb5_2.id;sscanf终止符
六、⽤⼀条SQL语句查询出每门课都⼤于80分的学⽣
张三语⽂81
张三数学75
李四语⽂76
李四数学90
王五语⽂81
王五数学100
eclipse安卓开发实例
王五英语90
select a.name from
(select name,count(*) jige_num from tb6 where fenshu>80group by name) a,
(select name,count(*) kecheng_num from tb6  group by name) b
where a.name=b.name and jige_num=kecheng_num;
七、怎么把这样⼀个表查成这样⼀个结果

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。