码迷,mamicode.com
首页 > 数据库 > 详细

1月31 SQL巩固练习(45道题)

时间:2015-01-31 16:07:14      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

1、现在有四个表: 

 student 表:                                                                              

技术分享              

teacher 表:                                                                                                course表:

     技术分享            技术分享            

score表:

技术分享

 

表的创建:

create database test
go
use test
go
create table student
(
    --学号
    sno varchar(3) not null primary key,
    --姓名
    sname varchar(4) not null,
    --性别
    ssex varchar(2) not null,
    --出生年月
    sbirthday datetime,
    --所在班级
    class varchar(5)
)
go
create table teacher
(
    --教工编号
    tno varchar(3) not null primary key,
    --教工姓名
    tname varchar(4) not null,
    --教工性别
    tsex varchar(2) not null,
    --教工出生日期
    tbirthday datetime,
    --职称
    prof varchar(6),
    --所在部门
    depart varchar(10)
)
go
create table course
(
    --课程号
    cno varchar(5) not null primary key,
    --课程名称
    cname varchar(10) not null,
    --教工编号
    tno varchar(3) references teacher(tno)
)
go
create table score
(
    --学号
    sno varchar(3) not null references student(sno),
    --课程号
    cno varchar(5) not null references course(cno),
    --成绩
    degree decimal(4,1)
)
go


insert into student
values(108,曾华,,1977-09-01,95033)

insert into student
values(105,匡明,,1975-10-02,95031)

insert into student
values(107,王丽,,1976-01-23,95033)

insert into student
values(101,李军,,1976-02-20,95033)

insert into student
values(109,王芳,,1975-02-10,95031)

insert into student
values(103,陆君,,1974-06-03,95031)

insert into teacher
values(804,李诚,,1958-12-02,副教授,计算机系)
insert into teacher
values(856,张旭,,1969-03-12,讲师,电子工程系)
insert into teacher
values(825,王萍,,1972-05-05,助教,计算机系)
insert into teacher
values(831,刘冰,,1958-08-14,助教,电子工程系)

insert into course
values(3-105,计算机导论,825)
insert into course
values(3-245,操作系统,804)
insert into course
values(6-166,数字电路,856)
insert into course
values(9-888,高等数学,831)


insert into score
values(103,3-245,86)
insert into score
values(105,3-245,75)
insert into score
values(109,3-245,68)
insert into score
values(103,3-105,92)
insert into score
values(105,3-105,88)
insert into score
values(109,3-105,76)
insert into score
values(101,3-105,64)
insert into score
values(107,3-105,91)
insert into score
values(108,3-105,78)
insert into score
values(101,6-166,85)
insert into score
values(107,6-166,79)
insert into score
values(108,6-166,81)

select * from student 
select * from teacher 
select * from course
select * from score

练习:

--每个题最后一句是结果,上面是过程
--1、 查询Student表中的所有记录的Sname、Ssex和Class列。
select *from student
select sname,ssex,class from student
--2、 查询教师所有的单位即不重复的Depart列。
select*from teacher
select distinct depart from teacher
--3、 查询Student表的所有记录。
select*from student
--4、 查询Score表中成绩在60到80之间的所有记录。
select*from score
select degree from score where degree between 60 and 80
select degree from score where degree>60 and degree<80
--5、 查询Score表中成绩为85,86或88的记录。
select *from score
select *from score where degree in(85,86,88)
--6、 查询Student表中“95031”班或性别为“女”的同学记录。
select*from student
select*from student where class=95031 or ssex=
--7、 以Class降序查询Student表的所有记录。
select *from student
select *from student order by class desc
--8、 以Cno升序、Degree降序查询Score表的所有记录。
select*from score order by cno asc,degree desc
--9、 查询“95031”班的学生人数。
select*from student
select COUNT(*) 95031班 from student where class=95031
--10、查询Score表中的最高分的学生学号和课程号。
select*from score
select MAX(degree) from score
select sno,cno from score where degree=(select MAX(degree) from score)

--11、查询‘3-105’号课程的平均分。
select *from score
select degree from score where sno=105
select AVG(degree) from score where degree in(select degree from score where sno=105)
--12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
select*from score
select AVG(degree) from score where cno like 3% and cno=(select cno from score group by cno  having COUNT(*)>5)

--13、查询最低分大于70,最高分小于90的学生的Sno列。
select*from score
select sno from score group by sno having MIN(degree)>70 and  MAX(degree)<90
--14、查询所有学生的Sname、Cno和Degree列。
select*from student
select*from score
select sname,cno,degree from student join score on student.sno=score.sno
--15、查询所有学生的Sno、Cname和Degree列。
select*from course
select*from score
select sno,cname,degree from course join score on course.cno=score.cno
--16、查询所有学生的Sname、Cname和Degree列。
select*from student
select*from course
select*from score
select sname,cname,degree from student join score on student.sno=score.sno join course on course.cno=score.cno
--17、查询“95033”班所选课程的平均分。
select*from student
select*from score
select*from student where class=95033
select avg(degree) from score where sno in(select sno from student where class=95033)

--18、假设使用如下命令建立了一个grade表:
--create table grade(low  int,upp  int,rank  varchar(1))
--insert into grade values(90,100,A)
--insert into grade values(80,89,B)
--insert into grade values(70,79,C)
--insert into grade values(60,69,D)
--insert into grade values(0,59,E)
--现查询所有同学的Sno、Cno和rank列。
select *from grade
select*from score
select sno,cno,rank from score join grade on degree>=low 

--19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
select*from score
select*from student
select degree from score where cno=3-105and sno=109

select *from student join score on student.sno=score.sno
 where student.sno in(
select sno from score where cno=3-105and degree>76.0
)

--20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
select*from score

select COUNT(cno) from score group by sno having COUNT(*)>1
select cno,MAX(degree) from score group by cno
select sno from score where degree in(select MAX(degree) from score group by cno)

 
select *from score where sno not in
(
select sno from score where
 degree in(select MAX(degree) 
 from score group by cno)
 )
 

--21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
select*from student
select*from score
select degree from score where sno=109and cno=3-105
select *from student join score on student.sno=score.sno where degree>(select degree from score where sno=109and cno=3-105)
--22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
select *from student
select year(sbirthday) from student where sno=108
select *from student where DAY(sbirthday)in(select day(sbirthday) from student where  sno=108)

select sno,sname,sbirthday  from student where year(sbirthday) 
in(select year(sbirthday) from student where  sno=108)and sno!=108
--23、查询“张旭“教师任课的学生成绩。
select*from teacher
select*from course
select*from score
select*from teacher join course on teacher.tno=course.tno 
select tno from teacher where tname=张旭
select cno from course where tno=856
select degree from score where cno=6-166


select degree from score where cno=
(
   select cno from course where tno=
   (
   select tno from teacher where tname=张旭
   )
)
--24、查询选修某课程的同学人数多于5人的教师姓名。
select*from teacher
select*from course
select*from score
select cno from score group by cno having COUNT(*)>5
select tno from course where cno=3-105
select tname from teacher where tno=825



select tname from teacher where tno=
(
select tno from course where cno=
(
select cno from score group by cno having COUNT(*)>5
)
)
--25、查询95033班和95031班全体学生的记录。
select*from student where class in(95033,95031)

--26、查询存在有85分以上成绩的课程Cno.
select*from score
select*from course
select cno,MAX(degree) as 课程最高分from score group by cno having MAX(degree)>85
select cno from score group by cno having MAX(degree)>85
--27、查询出“计算机系“教师所教课程的成绩表。
select*from teacher
select tno from teacher where depart=计算机系
select cno from course where tno in(804,825)
select degree from score where cno in(3-105,3-245) 



select degree from score where cno in
(
select cno from course where tno in
(
select tno from teacher where depart=计算机系
)
) 
--28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
select*from teacher
select tname,prof from teacher where depart in( 计算机系,电子工程系)
select prof,COUNT(prof) from teacher group by prof having COUNT(prof)=1


select tname,prof from teacher where prof in
(
select prof from teacher group by prof having COUNT(prof)=1
)and (depart=计算机系or depart=电子工程系)

--29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
select *from score
select MAX(degree) from score where cno=3-245 

select degree from score where cno=3-105and degree>(select max(degree) from score where cno=3-245)

select degree from score where cno=3-105and degree>
(select max(degree) from score where cno=3-245)

select degree from score where degree in(92.0,88.0,91.0) order  by degree desc


select * from score where degree in
(
select degree from score where cno=3-105and degree>
(select max(degree) from score where cno=3-245)
)
 order  by degree desc

--30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
select*from score
select * from score where cno=3-105and degree>(select MAX(degree) from score where cno=3-245)
--31、查询所有教师和同学的name、sex和birthday.
select*from student
select*from teacher
select sname as name,ssex as sex,sbirthday as birthday from student
union
select tname,tsex,tbirthday from teacher
--32、查询所有“女”教师和“女”同学的name、sex和birthday.
select*from teacher
select*from student
select sname as name,ssex as sex,sbirthday as birthday from student where ssex=
union
select tname,tsex,tbirthday from teacher where tsex=
--33、查询成绩比该课程平均成绩低的同学的成绩表。//相关子查询
select *from score


select AVG(degree) from score group by cno

select * from score where degree < any(select AVG(degree) from score group by cno)


--34、查询所有任课教师的Tname和Depart.
select*from teacher
select*from score
select*from course
select distinct cno from score
select tno from course where cno in(3-105,3-245,6-166)
select tname,depart from teacher where tno in(825,804,856) 

select tname,depart from teacher where tno in
(
select tno from course where cno in
(
select distinct cno from score
)
) 
--35  查询所有未讲课的教师的Tname和Depart. 
--insert into teacher values(888,aaa,v,2005.1.1,a,a)
select *from teacher
select *from course
select *from score
select distinct cno from score 
select tno from course where cno in(3-105,3-245,6-166)
select *from teacher where tno not in(825,804,856)

select *from teacher where tno not in
(
select tno from course where cno in
(
select distinct cno from score
)
)

--36、查询至少有2名男生的班号。
--insert into student values(110,aaa,a,2005.1.1,95000)

select*from student
select class,COUNT(ssex) from student group by class having COUNT(*)>=2 

select class from student where ssex=
select*from student where sno in (select sno from student where ssex=)


select class from student WHERE ssex= group by class having count(class)>1



--37、查询Student表中不姓“王”的同学记录。
select *from student
select *from student where sname not like 王%
--38、查询Student表中每个学生的姓名和年龄。
select*from student
select sname,(YEAR(GETDATE())-year(sbirthday))as 年龄 from student
--39、查询Student表中最大和最小的Sbirthday日期值。
select *from student 
select MAX(12-month(sbirthday)) from student 
select sbirthday  from student where MONTH(sbirthday)=(select MAX(month(sbirthday)) from student) and day(sbirthday)
=(select MAX(day(sbirthday)) from student)
select sbirthday  from student where day(sbirthday)=(select min(day(sbirthday)) from student)


select top(1) sbirthday from student order by month(sbirthday) asc,day(sbirthday) asc

select top(1) sbirthday from student order by month(sbirthday) desc,day(sbirthday) desc

select min(sbirthday)as 最大日期值,max(sbirthday)as 最小日期值  from student 
--40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
select*from student 
select*from student 
select * from student order by (YEAR(GETDATE())-year(sbirthday)) desc,class asc
--41、查询“男”教师及其所上的课程。
select*from teacher 
select*from course
select tname from teacher where tsex=
union
select cname  from course where tno in(select tno from teacher where tsex=)

select tname,cname from teacher join course on teacher.tno=course.tno where course.tno in(select tno from teacher where tsex=)and tsex=
--42、查询最高分同学的Sno、Cno和Degree列。
select*from score 
select MAX(degree) from score 
select  sno,cno,degree from score where degree=(select MAX(degree) from score )
--43、查询和“李军”同性别的所有同学的Sname.

select sname from student where ssex=(select ssex from student where sname=李军)and sname!=李军
--44、查询和“李军”同性别并同班的同学Sname.
select*from student 
select ssex from student where sname=李军
select class from student where sname=李军

select  sname from student where ssex=(select ssex from student where sname=李军)
and class=(select class from student where sname=李军)and sname!=李军
--45、查询所有选修“计算机导论”课程的“男”同学的成绩表。
select*from course
select*from student
select*from score
select cno from course where cname=计算机导论
select  sno from score where cno=3-105

select sname,degree from student join score on student.sno=score.sno where 
 ssex=and  cno=(select cno from course where cname=计算机导论)

 

1月31 SQL巩固练习(45道题)

标签:

原文地址:http://www.cnblogs.com/tzq9308/p/4264113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!