sql练习
表(一)Student (学生use)
属性名 |
数据类型 |
可否为空 |
含 义 |
Sno |
varchar (20) |
否 |
学号(主码) |
Sname |
varchar (20) |
否 |
学生姓名 |
Ssex |
varchar (20) |
否 |
学生性别 |
Sbirthday |
Datetime |
可 |
学生出生年月 |
Class |
varchar (20) |
可 |
学生所在班级 |
表(二)Course(课程表)
属性名 |
数据类型 |
可否为空 |
含 义 |
Cno |
varchar (20) |
否 |
课程号(主码) |
Cname |
varchar (20) |
否 |
课程名称 |
Tno |
varchar (20) |
否 |
教工编号 |
表(三)Score(成绩表)
属性名 |
数据类型 |
可否为空 |
含 义 |
Id |
Int |
|
主键 自增 |
Sno |
varchar (20) |
否 |
学号 |
Cno |
varchar (20) |
否 |
课程号 |
Degree |
Decimal(4,1)
|
可 |
成绩 |
//主码:Sno+ Cno |
表(四)Teacher(教师表)
属性名 |
数据类型 |
可否为空 |
含 义 |
Tno |
varchar (20) |
否 |
教工编号(主码) |
Tname |
varchar (20) |
否 |
教工姓名 |
Tsex |
varchar (20) |
否 |
教工性别 |
Tbirthday |
datetime |
可 |
教工出生年月 |
Prof |
varchar (20) |
可 |
职称 |
Depart |
varchar (20) |
否 |
教工所在部门 |
表1-2数据库中的数据
表(一)Student
Sno |
Sname |
Ssex |
Sbirthday |
class |
108 |
曾华 |
男 |
1977-09-01 |
95033 |
105 |
匡明 |
男 |
1975-10-02 |
95031 |
107 |
王丽 |
女 |
1976-01-23 |
95033 |
101 |
李军 |
男 |
1976-02-20 |
95033 |
109 |
王芳 |
女 |
1975-02-10 |
95031 |
103 |
陆君 |
男 |
1974-06-03 |
95031 |
表(二)Course
Cno |
Cname |
Tno |
3-105 |
计算机导论 |
825 |
3-245 |
操作系统 |
804 |
6-166 |
数字电路 |
856 |
9-888 |
高等数学 |
831 |
表(三)Score
Sno |
Cno |
Degree |
103 |
3-245 |
86 |
105 |
3-245 |
75 |
109 |
3-245 |
68 |
103 |
3-105 |
92 |
105 |
3-105 |
88 |
109 |
3-105 |
76 |
101 |
3-105 |
64 |
107 |
3-105 |
91 |
108 |
3-105 |
78 |
101 |
6-166 |
85 |
107 |
6-166 |
79 |
108 |
6-166 |
81 |
表(四)Teacher
Tno |
Tname |
Tsex |
Tbirthday |
Prof |
Depart |
804 |
李诚 |
男 |
1958-12-02 |
副教授 |
计算机系 |
856 |
张旭 |
男 |
1969-03-12 |
讲师 |
电子工程系 |
825 |
王萍 |
女 |
1972-05-05 |
助教 |
计算机系 |
831 |
刘冰 |
女 |
1977-08-14 |
助教 |
电子工程系 |
1、查询Student表中的所有记录的Sname、Ssex和Class列
select sname,ssex,class from xuesheng;
2、查询教师所有的单位即不重复的Depart列
select distinct depart from xuesheng;
3、查询Student表的所有记录
select * from xuesheng;
4、查询Score表中成绩在60到80之间的所有记录
select * from score where degree between '60' and '80';
5、查询Score表中成绩为85,86或88的记录
select * from score where degree in ('85','86','88');
6、查询Student表中“95031”班或性别为“女”的同学记录
select * from xuesheng where class='95031' or ssex='女';
7、以Class降序查询Student表的所有记录
select * from xuesheng order by class desc;
8、以Cno升序、Degree降序查询Score表的所有记录
select * from score order by cno,degree desc;
9、查询“95031”班的学生人数
select count(*) from xuesheng group by class having class='95031';
10、查询Score表中的最高分的学生学号和课程号
select sno,cno from score where degree in (select max(degree) from score);
11、查询每门课平均成绩
select avg(degree) from (select * from score where cno='3-105');
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数
13、查询分数大于70,小于90的Sno列
select sno from score where degree between 70 and 90;
14、查询所有学生的Sname、Cno和Degree列
select xuesheng.sname,score.cno,score.degree from xuesheng join score;
15、查询所有学生的Sno、Cname和Degree列
select score.sno,course.cname,score.degree from score join course;
16、查询所有学生的Sname、Cname和Degree列
select xuesheng.sname,course.cname,score.degree from xuesheng,course,score where score.cno=course.cno and xuesheng.sno=score.sno;
17、 查询“95033”班学生的平均分
select avg(degree) from score where sno in (select sno from xuesheng where class='95033');
20、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
select * from xuesheng,score where xuesheng.sno=score.sno and score.degree>(select degree from score where cno='3-105' and sno='109');
31、 查询所有教师和同学的name、sex和birthday.
Select sname as name,ssex as sex,sbirthday as birthday from xuesheng union
Select tname as name,tsex as sex,tbirthday as birthday from teacher;
32、查询所有“女”教师和“女”同学的name、sex和birthday.
select sname as name,ssex as sex,sbirthday as birthday from xuesheng where ssex='女’'union
select tname as name,tsex as sex,tbirthday as birthday from teacher where tsex='女';
36、查询至少有2名男生的班号。
select class from xuesheng where ssex='男' group by class having coint(*)>1;
37、查询Student表中不姓“王”的同学记录。
select * from xuesheng where sname not like'王%';
38、查询Student表中每个学生的姓名和年龄。
Select sname,year(getdate()-year(birthday)) from xuesheng;
39、查询Student表中最大和最小的Sbirthday日期值。
Select max(sbirthday) as max,min(sbirthday) as min from xuesheng;
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
Select * , year(getdate())-year(sbirthday) as age from xuesheng order by class desc,age desc;
41、查询“男”教师及其所上的课程。
select Tname,Cname from Teacher,Course where Tsex='男' and Teacher.Tno=Course.Tno;
42、查询最高分同学的Sno、Cno和Degree列。
Select * from score where degree=(select max(degree) from score);
43、查询和“李军”同性别的所有同学的Sname.
Select ssex from xuesheng where sname=’李军’;
Select sname from xuesheng where ssex=();
表(一)Student (学生use)
属性名 |
数据类型 |
可否为空 |
含 义 |
Sno |
varchar (20) |
否 |
学号(主码) |
Sname |
varchar (20) |
否 |
学生姓名 |
Ssex |
varchar (20) |
否 |
学生性别 |
Sbirthday |
Datetime |
可 |
学生出生年月 |
Class |
varchar (20) |
可 |
学生所在班级 |
表(二)Course(课程表)
属性名 |
数据类型 |
可否为空 |
含 义 |
Cno |
varchar (20) |
否 |
课程号(主码) |
Cname |
varchar (20) |
否 |
课程名称 |
Tno |
varchar (20) |
否 |
教工编号 |
表(三)Score(成绩表)
属性名 |
数据类型 |
可否为空 |
含 义 |
Id |
Int |
|
主键 自增 |
Sno |
varchar (20) |
否 |
学号 |
Cno |
varchar (20) |
否 |
课程号 |
Degree |
Decimal(4,1)
|
可 |
成绩 |
//主码:Sno+ Cno |
表(四)Teacher(教师表)
属性名 |
数据类型 |
可否为空 |
含 义 |
Tno |
varchar (20) |
否 |
教工编号(主码) |
Tname |
varchar (20) |
否 |
教工姓名 |
Tsex |
varchar (20) |
否 |
教工性别 |
Tbirthday |
datetime |
可 |
教工出生年月 |
Prof |
varchar (20) |
可 |
职称 |
Depart |
varchar (20) |
否 |
教工所在部门 |
表1-2数据库中的数据
表(一)Student
Sno |
Sname |
Ssex |
Sbirthday |
class |
108 |
曾华 |
男 |
1977-09-01 |
95033 |
105 |
匡明 |
男 |
1975-10-02 |
95031 |
107 |
王丽 |
女 |
1976-01-23 |
95033 |
101 |
李军 |
男 |
1976-02-20 |
95033 |
109 |
王芳 |
女 |
1975-02-10 |
95031 |
103 |
陆君 |
男 |
1974-06-03 |
95031 |
表(二)Course
Cno |
Cname |
Tno |
3-105 |
计算机导论 |
825 |
3-245 |
操作系统 |
804 |
6-166 |
数字电路 |
856 |
9-888 |
高等数学 |
831 |
表(三)Score
Sno |
Cno |
Degree |
103 |
3-245 |
86 |
105 |
3-245 |
75 |
109 |
3-245 |
68 |
103 |
3-105 |
92 |
105 |
3-105 |
88 |
109 |
3-105 |
76 |
101 |
3-105 |
64 |
107 |
3-105 |
91 |
108 |
3-105 |
78 |
101 |
6-166 |
85 |
107 |
6-166 |
79 |
108 |
6-166 |
81 |
表(四)Teacher
Tno |
Tname |
Tsex |
Tbirthday |
Prof |
Depart |
804 |
李诚 |
男 |
1958-12-02 |
副教授 |
计算机系 |
856 |
张旭 |
男 |
1969-03-12 |
讲师 |
电子工程系 |
825 |
王萍 |
女 |
1972-05-05 |
助教 |
计算机系 |
831 |
刘冰 |
女 |
1977-08-14 |
助教 |
电子工程系 |