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

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-105‘and sno=‘109‘

select *from student join score on student.sno=score.sno
 where student.sno in(
select sno from score where cno=‘3-105‘and 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=‘109‘and cno=‘3-105‘
select *from student join score on student.sno=score.sno where degree>(select degree from score where sno=‘109‘and 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-105‘and degree>(select max(degree) from score where cno=‘3-245‘)

select degree from score where cno=‘3-105‘and 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-105‘and 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-105‘and 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=‘计算机导论‘)
时间: 2024-10-09 22:25:40

1月31 SQL巩固练习(45道题)的相关文章

八周三次课(1月31日) 10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具

八周三次课(1月31日)10.32 rsync通过服务同步10.33 rsync通过服务同步10.34 linux系统日志10.35 screen工具===============================================================================================================================================================================

5月31日上午学习日志

5月31日上午写了一套四级真题并纠错改正总结,复习了一部分之前背的考研词汇,听外教的java课程,用扇贝app完成英语100个四级单词的记忆.

7月31号=》311页-315页

13.6.1 语句块 所谓语句块就是使用花括号包含的多个语句,语句块是一个整体的执行体,类似于一个单独的语句. 代码示范: { a = 1; b = 2; alert(a+b); } 13.6.2 空语句 最简单的空语句仅有一个分号(;) 代码示范: //空语句 ; //使用空语句完成数组的初始化 var a = []; for(var i = 0;i<10;a[i++] = i+20); 13.6.3 异常抛出语句 JavaScript支持异常处理,支持手动抛出异常.当JavaScript需要

2017年3月31日下午学习日志

2017年3月31下午复习了高等数学,继续看了张宇高等数学基础班课程视频第二章导数与微分不定积分的概念12,第二遍听课过程中能巩固之前所学内容,不懂的问题得以解决,印象也更加深刻,对复习有很大的帮助,背英语单词100个.

2014年5月31日 《失控 第一章 人造与天生》读后感

从今天开始,每读完<失控>的一章,我都要写下我的读后感,可能是摘要,也获许是我自己的看法和感悟.坚持下去! 接下来是第一章   人造与天生. 人造与天生的联姻是本书的主题. 在我看来,如果世界被分成两部分,那么一部分就是自然世界,另一部分就是人造世界.它们并不是相对的,而是共存的,相互依赖,相互成长的(但是我认为人造世界更加依赖自然世界,因为人造世界就是在自然世界的基础上构建的).自然世界,赠与了人们一切最基础的生存来源,是一个强大的生物基因库,如果你认为它只是给人们提供了这些,那就错了,更重

coding!8月31日 来挖文兑现承诺

价值为导向,效率为王. 一个不反思自己带给别人什么价值的人,永远不可能赚到钱,谁愿意和这样的人合作呢. 所以我要让自己变得很贵很值钱. 学习不可以再断断续续,要每天坚持,雷打不动,就像我减肥时一样,没有这样的决心,一个人永远不可能成功.如果有干扰你的东西,想办法消除它,我要有自己的原则.原则是任何事情都不能触碰的我的底线,也是用生命都要捍卫的东西.因为我知道如果没有原则,我会活的连狗都不如.反之,如果我恪守我的原则,即使现在失去一些东西,将来我必然能得到更好的. 我必须全力以赴,但是不能只盯着书

2017年10月31日结束Outlook 2007与Office 365的连接

2017 年10月31日 ,微软即将推出 Office 365中Exchange Online邮箱将需要Outlook for Windows的连接,即通过HTTP Over MAPI方式,传统使用RPC over HTTP(例如Outlook 2007)的Windows客户端的Outlook将无法访问Exchange Online邮箱,不再支持. RPC over HTTP协议,也称为Outlook Anywhere,是Windows OS系统 Outlook客户端和Exchange 服务器之

2015微软创新杯Imaginecup大赛报名进行中(报名截止2014年12月31日23:59)

CSDN高校俱乐部与微软官方合作,2015微软创新杯大赛中国区官网落户CSDN高校俱乐部:http://student.csdn.net/mcs/imaginecup2015 在微软官方设置创新杯中国区奖项之外,CSDN高校俱乐部每个竞赛项目特设一等奖.二等奖.三等奖及纪念奖若干名. CSDN高校俱乐部特别奖(获奖者需在高校俱乐部进行过报名备案):详情-> 1. 一等奖(三支团队): 每个竞赛项目一等奖一名,每支团队获得奖金2,000元人民币,团队成员每人尊享2015 CSDN VIP年卡会员:

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操