学生选课数据库SQL语句练习题
学生选课数据库SQL语句练习题(详细分解答案)
一、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。
四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。
用SQL语句创建四个表并完成相关题目。
表1-1数据库的表结构表(一)Student属性名数据类型可否为空含义Sno Char(3) 否学号(主键)Sname Char(8) 否学生姓名Ssex Char(2) 否学生性别Sbirthday datetime 可学生出生年月Class Char(5) 可学生所在班级表(二)Course属性名数据类型可否为空含义Cno Char(5) 否课程号(主键)Cname Varchar(10) 否课程名称Tno Char(3) 否教师编号(外键)表(三)Score属性名数据类型可否为空含义Sno Char(3) 否学号(外键)Cno Char(5) 否课程号(外键)Degree Decimal(4,1) 可成绩主码:Sno+ Cno表(四)Teacher属性名数据类型可否为含义空Tno Char(3) 否教师编号(主键)Tname Char(4) 否教师姓名Tsex Char(2) 否教师性别Tbirthday datetime 可教师出生年月Prof Char(6) 可职称Depart Varchar(10) 否教师所在部门表1-2数据库中的数据表(一)StudentSno Sname Ssex Sbirthday class108 曾华男1977-09-9503301105 匡明男1975-10-9503102107 王丽女1976-01-950332395033101 李军男1976-02-2095031109 王芳女1975-02-1095031103 陆君男1974-06-03表(二)CourseCno Cname Tno3-105 计算机导论8253-245 操作系统8046-166 数字电路8569-888 高等数学831表(三)ScoreSno Cno Degree103 3-245 86105 3-245 75109 3-245 68103 3-105 92105 3-105 88109 3-105 76101 3-105 64107 3-105 91108 3-105 78101 6-166 85107 6-166 79108 6-166 81表(四)TeacherTno Tname Tsex Tbirthday Prof Depart804 李诚男1958-12-02 副教授计算机系856 张旭男1969-03-12 讲师电子工程系825 王萍女1972-05-05助教计算机系831 刘冰女1977-08-14 助教电子工程系-- 1、查询Student表中的所有记录的Sname、Ssex和Class列。
(完整版)sql语句练习题及答案
(完整版)sql语句练习题及答案⼀在数据库 school 中建⽴student , sc, course 表。
学⽣表、课程表、选课表属于数据库School ,其各⾃的数据结构如下:学⽣Student (Sno,Sname,Ssex,Sage,Sdept)课程表course(Cno,Cname,Cpno,Ccredit)学⽣选课SC(Sno,Cno,Grade)⼆设定主码1 Student表的主码:sno2 Course表的主码:cno3 Sc表的主码:sno,cno1写出使⽤ Create Table 语句创建表 student , sc, course 的SQL语句23 删除student表中的元组4在数据库school中删除关系student5在student表添加属性sbirthdate 类型datetimeDelete1 删除所有JSJ 系的男⽣delete from Student where Sdept=’JSJ’ and Ssex=’男’;2 删除“数据库原理”的课的选课纪录delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’);Update1 修改0001 学⽣的系科为: JSJ2 把陈⼩明的年龄加1岁,性别改为⼥。
2 修改李⽂庆的1001课程的成绩为93 分3 把“数据库原理”课的成绩减去1分Select 查询语句⼀单表1查询年龄在19⾄21岁之间的⼥⽣的学号,姓名,年龄,按年龄从⼤到⼩排列。
2查询姓名中第2个字为“明”字的学⽣学号、性别。
3查询 1001课程没有成绩的学⽣学号、课程号4查询JSJ 、SX、WL 系的年龄⼤于25岁的学⽣学号,姓名,结果按系排列5按10分制查询学⽣的sno,cno,10分制成绩(1-10分为1 ,11-20分为2 ,30-39分为3,。
90-100为10)6查询 student 表中的学⽣共分布在那⼏个系中。
选课系统SQL语句练习(含数据信息)
insert into SC values('007','C07',null);
insert into SC values('007','C02',88);
insert into SC values('008','C03',52);
and S.a_g > D.a_g;
13、查询个人考试平均成绩高于女生平均成绩的男生姓名
ect sname from
--查询所有男生的平均成绩,结果集用S表示
(select sname,avg(grade) a_g from student st1,sc sc1
where st1.sno = sc1.sno
);
9、查询选修的课程中含有“Wang gang”同学所有选修课程的学生姓名。 wanggang-所有同学 not exist
select sno,sname from student as eachS
where not exist
((select cno from sc
8、查询同时选修课程“Database System”和“Introduction to the Internet”的学生姓名;
(select sname from student
join sc on student.sno = sc.sno
join course on o = o
and cname = 'Database System')
SQL语句练习及参考答案
SQL语句练习及参考答案SQL 语句练习1.设学⽣选课数据库有关系S (sno,sname,age,sex )、SC (sno,cno,grade )和C(cno,cname,teacher ),分别表⽰学⽣、选课和课程,sno 代表学号,sname 代表学⽣姓名,age 代表年龄,sex 代表性别,grade 代表成绩,cno 代表课程号,teacher 代表任课教师。
试完成表⽰下列查询。
(1)检索年龄⼤于21的男学⽣学号(sno)和姓名(sname)。
(2)建⽴性别只能为“男”、“⼥”的约束。
(3)创建⼀个视图v1,该视图⽤来查询学⽣的选课情况,要求包含:学⽣姓名(sname),课程名(cname),任课教师teacher 和成绩grade 。
(4)检索选修课程号为k1和k5的学⽣学号(sno)。
(5)检索全部学⽣都选修的课程的课程号(cno)和课程名(cname)。
(6)删除所有男同学的选课记录。
1.(1)select sno,snae from s where sex=’男’ and age>21 (2)alter table s add constraint c1 check sex in (‘男’,’⼥’)(3)create view v1 as select sname,cname,teacher,grade from s,sc,c where s.sno=sc.sno and/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o (4)select sno fromsc sc1 where cno=’k1’ and exists (se lect * fromsc sc2 where sc1.sno =sc2.sno and/doc/62176c89fe4733687e21aaca.html o=’k5’)(5)select cno,cnam from c where not exists (select * from s where not exists (select * from sc where/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o and s.sno=sc.sno)(6)delete from sc where sno in (select sno from s where sex=’男’)或delete sc from sc,s where s.sno=sc.sno and sex=’男’2.设图书借阅数据库有关系图书(图书编号,书名,作者,出版社,出版时间,图书类别)、读者(读者编号,姓名,读者类别)和借阅(读者编号, 图书编号, 借阅⽇期,还期)。
SQL查询练习题
设教学数据库中有三个关系: 学生关系 S (S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 (4)C查(C询#,选CN修A课M程E,号TE为ACC2H或ERC)4的学生学号。 SELECT S# FROM SC WHERE C#=‘C2’ OR C#=‘C4’
SQL查询练习题
It is applicable to work report, lecture and teaching
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER) 下面用SQL语句实现下面每个查询: (1)查询学习课程号为C2的学生学号与成绩。
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER)
(17)求年龄大于所有女同学年龄的男学生和年龄。 SELECT SNAME,AGE FROM S WHERE SEX=‘男’ AND AGE>ALL(SELECT AGE FROM S WHERE SEX=‘女’)
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER)
(13)在SC表中检索成绩为空值的学生学号和课程号。 SELECT S#,C# FROM SC WHERE GRADE IS NULL
数据库的sql语句练习题
数据库的sql语句练习题1. 练习题一:查询语句基础在学生表(students)中,包含以下字段:学号(id)、姓名(name)、年龄(age)、性别(gender)、班级(class)、成绩(score)。
请编写SQL语句实现以下需求:a) 查询学生表中所有学生的信息。
b) 查询学生表中的男性学生信息。
c) 查询学生表中年龄为18岁的学生信息。
d) 查询学生表中成绩大于等于90分的学生信息。
e) 查询学生表中姓“张”的学生信息。
2. 练习题二:修改语句练习在学生表(students)中,某个学生的学号为1001,需要将该学生的年龄修改为20岁,请编写相应的SQL语句实现此操作。
3. 练习题三:插入语句练习在学生表(students)中添加一条新纪录,学号为1002,姓名为李明,年龄为19岁,性别为男,班级为三年级,成绩为87分,请编写相应的SQL语句实现此操作。
4. 练习题四:删除语句练习在学生表(students)中,某个学生的学号为1003,需要将该学生的信息从表中删除,请编写相应的SQL语句实现此操作。
5. 练习题五:使用多表查询存在两张表,学生表(students)和课程表(courses)。
学生表包含字段:学号(id)、姓名(name)、班级(class);课程表包含字段:课程编号(course_id)、课程名称(course_name)。
已知约德尔学院中,学号为1001的学生参加了编号为1的课程,请编写SQL语句查询学号为1001的学生所选的课程及课程名称。
6. 练习题六:排序查询练习在学生表(students)中,查询所有学生的信息,并按照成绩从高到低进行排序。
以上是数据库的SQL语句练习题,请按照上述要求编写相应的SQL语句进行解答。
祝你练习愉快,取得好成绩!。
SQL语句练习参考答案(教学数据库)
以下为SQL查询练习参考答案(查询用到的表参照教材P82)。
1.查询全体学生的姓名和所在系。
Select Sno,SdeptFrom Student;2.查询所有课程的详细信息。
Select *From Course;或者Select Cno,Cname,Cpno,CcreditFrom Course;3.查询选修了课程的学生学号。
Select Distinct SnoFrom SC;注意:select子句中需要指定Distinct 关键词4.查询有学生选修的课程号。
Select Distinct CnoFrom SC;5.检索年龄在 18到 20之间(含18和20)的女生的学号、姓名及年龄。
Select Sno,Sname,SageFrom StudentWhere Ssex=’女’ and (Sage between 18 and 20);注意: where子句性别的常量值——女,需用英文状态下的单引号或双引号。
或者Select Sno,Sname,SageFrom StudentWhere Ssex=’女’ and (Sage >=18 and Sage<= 20);6.检索“200215121”学生选修课程号及成绩。
Select Cno,GradeFrom SCWhere Sno=’200215121’;7.检索选修了“1”号或“3”号课程的学生学号、课程号及成绩。
Select *From SCWhere Cno=’1’ or Cno=’3’;注意: where子句若用Cno=’1’ or ’3’是错误的,or连接的是两个布尔表达式。
8.检索所有姓王的同学的姓名、性别和所在系。
Select Sname,Ssex,SdeptFrom StudentWhere Sname like ’王*’;注意: Access中的通配符为’*’ 和’?’标。
准SQL中的通配符为’%’ 和’_’9.检索课程名中包括“数据库”的课程详细信息,结果按学分降序排列。
sql例题
以下是一些SQL例题:查询学生表中所有学生的姓名和出生年月,并按照出生年月降序排列。
sqlSELECT s_name, s_birth FROM student ORDER BY s_birth DESC;查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩。
sqlSELECT st.s_id, st.s_name, ROUND(AVG(sc.s_score),2) as '平均成绩'FROM student stLEFT JOIN score sc ON sc.s_id = st.s_idGROUP BY st.s_idHAVING AVG(sc.s_score) >= 60;查询同名同姓学生名单,并统计同名人数。
sqlSELECT s_name, COUNT(*) as '同名人数'FROM studentGROUP BY s_nameHAVING COUNT(*) > 1;查询每门课程的课程名称和对应的教师姓名。
vbnetSELECT c_name, t_nameFROM courseINNER JOIN teacher ON course.t_id = teacher.t_id;查询哪些学生没有选课,并显示其学生编号和姓名。
sqlSELECT s_id, s_nameFROM studentWHERE s_id NOT IN (SELECT DISTINCT s_id FROM score);查询选了课程的学生人数。
sqlSELECT COUNT(DISTINCT s_id) as '选课学生人数' FROM score;查询每门课程的课程名称和选课人数。
sqlSELECT c_name, COUNT(s_id) as '选课人数'FROM courseINNER JOIN score ON course.c_id = score.c_idGROUP BY c_name;。
sql语言练习题
sql语言练习题一、数据库表结构设计假设有一个学生信息管理系统,需要设计以下几个数据库表:1. 学生表(Students):- 学生ID(StudentID)- 主键,自增长- 姓名(Name)- 年龄(Age)- 性别(Gender)2. 课程表(Courses):- 课程ID(CourseID)- 主键,自增长- 课程名称(CourseName)3. 学生选课表(StudentCourses):- 选课ID(ID)- 主键,自增长- 学生ID(StudentID)- 外键,关联学生表的学生ID- 课程ID(CourseID)- 外键,关联课程表的课程ID二、SQL语句实现1. 创建数据库及表结构:CREATE DATABASE 学生信息管理系统;USE 学生信息管理系统;CREATE TABLE Students (StudentID INT AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(50),Age INT,Gender VARCHAR(10));CREATE TABLE Courses (CourseID INT AUTO_INCREMENT PRIMARY KEY,CourseName VARCHAR(50));CREATE TABLE StudentCourses (ID INT AUTO_INCREMENT PRIMARY KEY,StudentID INT,CourseID INT,FOREIGN KEY (StudentID) REFERENCES Students(StudentID), FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)```2. 插入数据:```INSERT INTO Students (Name, Age, Gender) VALUES ('张三', 18, '男'),('李四', 20, '女'),('王五', 19, '男');INSERT INTO Courses (CourseName)VALUES ('数学'),('英语'),('物理');INSERT INTO StudentCourses (StudentID, CourseID) VALUES (1, 1),(1, 2),(2, 1),(3, 3);```3. 查询题目要求:(1)查询所有学生的信息:```sqlSELECT * FROM Students;```(2)查询所有课程的信息:```sqlSELECT * FROM Courses;```(3)查询学生ID为1的选课记录:```sqlSELECT , Courses.CourseNameFROM StudentsJOIN StudentCourses ON Students.StudentID = StudentCourses.StudentIDJOIN Courses ON StudentCourses.CourseID = Courses.CourseIDWHERE Students.StudentID = 1;```(4)查询已选课程数量超过2门的学生信息:```sqlSELECT , COUNT(StudentCourses.CourseID) AS CourseCountFROM StudentsJOIN StudentCourses ON Students.StudentID =StudentCourses.StudentIDGROUP BY Students.StudentIDHAVING COUNT(StudentCourses.CourseID) > 2;```(5)查询选课表中的学生ID和课程ID的组合:```sqlSELECT StudentID, CourseIDFROM StudentCourses;```三、总结通过以上SQL语句的实现,我们可以对学生信息管理系统的数据库进行基本操作,包括查看学生和课程的信息,以及查询选课记录。
学生选课数据库SQL语句练习题详细分解答案
学生选课数据库SQL语句练习题)详细分解答案()、课程表一、设有一数据库,包括四个表:学生表(Student)。
)以及教师信息表(Teacher(Course)、成绩表(Score表(四)所示,数据如表~的表(一)四个表的结构分别如表1-1语句创建四个表并完成SQL1-2的表(一)~表(四)所示。
用相关题目。
表1-1数据库的表结构表(一)Student 可否属性数据类(主键学SnoChar(3)学生姓Char(8)Sname学生性SsexChar(2)学生出生datetimeSbirthday学生所在Char(5)Class级Course 表(二可否数据类属性课程号(CnoChar(5)键课程名CnameVarchar(10)TnoChar(3)教师编(外键)表(三)Score属性名数据类型可否为含义空Sno Char(3) 否学号(外键)CnoChar(5)否课程号(外键)Degree Decimal(4,1) 可成绩wzm数据库.Sno+ Cno 主码:T eacher 表(四)可否为含义属性名数据类型空(Char(3)教师编Tno键教师姓TnameChar(4)教师性TsexChar(2)教师出生datetimeTbirthday职ProfChar(6)教师所在DepartVarchar(10)门数据库中的数据表1-2Student 表(一classSsexSbirthdaySnoSname 950331977-09-01曾108950311975-10-02匡105950331976-01-23107王950331976-02-20101李950311975-02-10109王950311974-06-03103陆男Course 表(二)Tno Cname Cno825 计算机导论3-105804 3-245 操作系统856数字电路6-166wzm数据库.8319-888 高等数学Score 表(三)Degree Cno Sno863-245103 753-245105 681093-245 921033-105 881053-105 761093-105 641013-105 911073-105 781083-105 851016-166791076-166811086-166Teacher表(四DepartProfTsexTbirthdayTnoTname副1958-12-02804李计算机电子工讲1969-03-12856张计算机1972-05-05助825王电子工助1977-08-14831刘系列。
数据库sql查询语句练习
查询语句1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') as a,(selects#,score from SC where C#='002') as bwhere a.score>b.score and a.s#=b.s#2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup by S# having avg(score) >603、查询所有同学的学号、姓名、选课数、总成绩;select Student.S#,Student.Sname,count(SC.C#),sum(score)from Student left join SC on Student.S#=SC.S#group by Student.S#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%'5、查询没学过“张三”老师课的同学的学号、姓名;select Student.S#,Student.Snamefrom Studentwhere S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# andTeacher.Tname='张三')6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S#and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# andSC_2.C#='002')7、查询学过“张三”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C#and Teacher.T#=Course.T# and Teacher.Tname='张三' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher whereTeacher.T#=Course.T# and Tname='张三'))8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Snamefrom (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') as score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2<score9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# andscore>60)10、查询没有学全所有课的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course)11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#='1001')12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct SC.S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC whereS#='001')13、把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# )from Course,Teacherwhere Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='张三'14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select S# from SC where C# in (select C# from SC whereS#='1002')group by S# having count(*)=(select count(*) from SC whereS#='1002')15、删除学习“张三”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='张三'16、向SC表中插入一些记录,这些记录要求符合以下条件:学号是没有上过编号“002”课程的同学学号课程号是002成绩是002号课的平均成绩;Insert into SCvalues(select S# from Student where S# not in (Select S# from SC where C#='002'),'002',(Select avg(score)from SC where C#='002'))17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,数据库,企业管理,英语,有效课程数,有效平均分select S# as 学生ID,(select score from SC where SC.S#=t.S# and C#='004') as 数据库,(select score from SC where SC.S#=t.S# and C#='001') as 企业管理,(select score from SC where SC.S#=t.S# and C#='006') as 英语,count(*) as 有效课程数, avg(t.score) as 平均成绩from SC as tgroup by S#order by avg(t.score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分select L.C# As 课程ID,L.score as 最高分,R.score as 最低分from SC L ,SC as Rwhere L.C# = R.C# and L.score = (select max(IL.score)from SC as IL,Student as IMwhere L.C# = IL.C# and IM.S#=IL.S# group by IL.C#)and R.Score = (SELECT MIN(IR.score) from SC as IRwhere R.C# = IR.C# group by IR.C# )19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.C# as 课程号,max(ame) as课程名,isnull(AVG(score),0) as 平均成绩,100 * SUM(case when isnull(score,0)>=60 then 1 else 0 end)/count(*) as 及格百分数from SC T,Coursewhere t.C#=course.C#group by t.C#order by 100 * SUM(case when isnull(score,0)>=60 then 1 else 0 end)/count(*) DESC20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END)AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END)AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END)AS UML及格百分数,SUM(CASE WHEN C# = '004' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END)AS 数据库及格百分数FROM SC21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.C#=C.C# and C.T#=Z.T#GROUP BY C.C#ORDER BY AVG(Score) DESC22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3SC.S# As 学生学号,Student.Sname AS 学生姓名 ,T1.score AS 企业管理,T2.score AS 马克思,T3.score AS UML,T4.score AS 数据库,ISNULL(T1.score,0) + ISNULL(T2.score,0) +ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分FROM Student,SC LEFT JOIN SC AS T1ON SC.S# = T1.S# AND T1.C# = '001'LEFT JOIN SCAS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SCAS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SCAS T4ON SC.S# = T4.S# AND T4.C# = '004'WHERE student.S#=SC.S# andISNULL(T1.score,0) + ISNULL(T2.score,0) +ISNULL(T3.score,0) + ISNULL(T4.score,0)NOT IN(SELECTDISTINCTTOP 15 WITHTIESISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +ISNULL(T4.score,0)FROM scLEFT JOIN scAS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN scAS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN scAS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN scAS T4ON sc.S# = T4.S# AND T4.C# = 'k4'ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0)+ ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC)23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT SC.C# as 课程ID, Cname as 课程名称,SUM(CASE WHEN score BETWEEN 85 AND100 THEN 1 ELSE 0 END) AS [100 - 85] ,SUM(CASE WHEN score BETWEEN 70 AND85 THEN 1 ELSE 0 END) AS [85 - 70] ,SUM(CASE WHEN score BETWEEN 60 AND70 THEN 1 ELSE 0 END) AS [70 - 60] ,SUM(CASE WHEN score < 60 THEN 1ELSE 0 END) AS [60 -]FROM SC,Coursewhere SC.C#=Course.C#GROUP BY SC.C#,Cname24、查询学生平均成绩及其名次25、查询各科成绩前三名的记录:(不考虑成绩并列情况)26、查询每门课程被选修的学生数select c#,count(S#) from sc group by C#27、查询出只选修了一门课程的全部学生的学号和姓名select SC.S#,Student.Sname,count(C#) AS 选课数from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=128、查询男生、女生人数Select count(Ssex) as 男生人数 fromStudent group by Ssex having Ssex='男' Select count(Ssex) as 女生人数 fromStudent group by Ssex having Ssex='女'29、查询姓“张”的学生名单SELECT Sname FROM Student WHERE Sname like '张%'30、查询同名同姓学生名单,并统计同名人数select Sname,count(*) from Student group by Sname having count(*)>131、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select Snamefrom studentwhere year(Sage)='1981'32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Sname having avg(score)>8534、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <6035、查询所有学生的选课情况;SELECT SC.S#,SC.C#,Sname,CnameFROM SC,Student,Coursewhere SC.S#=Student.S# and SC.C#=Course.C#36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;SELECT distinct student.S#,student.Sname,SC.C#,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.S#=student.S#37、查询不及格的课程,并按课程号从大到小排列select c# from sc where scor e <60 order by C#38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select SC.S#,Student.Snamefrom SC,StudentwhereSC.S#=Student.S# and Score>80 and C#='003'39、求选了课程的学生人数select count(*) from sc40、查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩select Student.Sname,scorefrom Student,SC,Course C,Teacherwhere Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T#and Teacher.Tname='张三' andSC.score=(select max(score) from SC where C#=C.C# )41、查询各个课程及相应的选修人数select count(*) from sc group by C#42、查询不同课程成绩相同的学生的学号、课程号、学生成绩43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 score FROM SC WHERE t1.C#= C# ORDER BYscore DESC ) ORDER BY t1.C#44、统计每门课程的学生选修人数(超过10人的课程才统计)。
(完整版)sql练习题+答案
(一) 新建以下几个表student(学生表):其中约束如下:(1)学号不能存在相同的(2)名字为非空(3)性别的值只能是’男’或’女’(4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系(5)出生日期为日期格式(6)年龄为数值型,且在0~100之间cs(成绩表):其中约束如下:(1)sno和cno分别参照student和course表中的sno,cno的字段(2)cj(成绩)只能在0〜100之间,可以不输入值create table cs (sno smallint not null referencesstudent ( sno ), ----定义成外键cno smallint not null referencescourse ( cno ), ----定义成外键cj smallint constraint e check (cj between0 and 100 ),---- 检查约束一—j(成绩)只能在~100之间,可以不输入值constraint f primary key ( sno , cno )---- 定义学生学号和课程号为sc表的主键)course(课程表)其约束如下:(1)课程号(cno)不能有重复的(2)课程名(cname非空(三)针对学生课程数据库查询(1)查询全体学生的学号与姓名。
Select sno , sname from student(2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。
(3)查询全体学生的详细记录。
select * from student(4)查全体学生的姓名及其出生年份。
select sname , birth from student(5)查询学校中有哪些系。
select distinct dept from student(6)查询选修了课程的学生学号。
select sno from cs where eno is not null(7)查询所有年龄在20岁以下的学生姓名及其年龄。
数据库SQL查询语句练习试题
设教课数据库 Education 有三个关系:学生关系 S(SNO,SNAM,E AGE,SEX,SDEPT);学习关系 SC(SNO,CNO,GRAD)E;课程关系 C(CNO,CNAM,E CDEP,T TNAME)查问问题:(1)检索计算机系的全体学生的学号,姓名和性别;(2)检索学习课程号为 C2的学生学号与姓名;(3)检索选修课程名为“ DS”的学生学号与姓名;(4)检索选修课程号为 C2或 C4的学生学号;(5)检索起码选修课程号为 C2和 C4的学生学号;(6)检索不学 C2 课的学生姓名和年纪;(7)检索学习所有课程的学生姓名;(8)查问所学课程包括学生 S3所学课程的学生学号。
(1)检索计算机系的全体学生的学号,姓名和性别;SELECT Sno,Sname,SexFROM SWHERE Sdept =’CS’;(2)检索学习课程号为 C2的学生学号与姓名;Sno ,SnameFROM SWHERE Sno IN( SELECT SnoFROM SCWHERE Cno=‘C2’),SnameFROM S ,SCAND o= ‘C 2’;(3)检索选修课程名为“ D S”的学生学号与姓名本查问波及到学号、姓名和课程名三个属性,分别寄存在 S 和 C 表中,但 S 和 C 表没有直接联系,一定经过 SC表成立它们两者的联系。
C → SC → S基本思路:(1)第一在 C 表中找出“ DS”课程的课程号 Cno;(2)而后在 SC表中找出 Cno等于第一步给出的 Cno 会合中的某个元素 Cno;(3)最后在 S 关系中选出 Sno 等于第二步中 Sno 会合中某个元素的元组,拿出 Sno 和 Sname送入结果表列。
SELECT Sno,SnameFROM SWHERE Sno IN(SELECT SnoFROM SCWHERE Cno IN(SELECT CnoFROM CWHERE Cname= ‘DS’));(4)检索选修课程号为 C2或 C4的学生学号;SELECT SnoFROM SCWHERE Cno‘= C2’ OR Cno= ‘C 4’;(5)检索起码选修课程号为 C2和 C4的学生学号;SELECT SnoFROM SC X,SC YWHERE AND o= ‘C 2’ AND o=‘C 4’;(6)检索不学 C2 课的学生姓名和年纪;Sname SnameFROM SFROM SWHERE Sno NOT IN WHERE NOT EXISTS( SELECT Sno ( SELECT *FROM SC FROM SCWHERE Cno= ‘C2’) ; WHERE SC.Sno=S.SnoAND Cno= ‘C 2’) ;(7)检索学习所有课程的学生姓名;在表 S 中找学生,要求这个学生学了所有课程。
请写出以下每一题的SQL语句
请写出以下每一题的SQL语句有一个“学生-课程”数据库,数据库中包括三个表:(1)“学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为:Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字。
(2)“课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,可记为:Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。
(3)“学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为: SC(Sno,Cno,Grade) (SNO, CNO) 为关键字。
完成下列操作:(在创建表的时候,请认真思考如何给每个字段选定数据类型,选定好的数据类型会让查询操作更加便捷。
三个表创建请插入一些实验使用的数据,请回想插入数据和更新(修改)数据的SQL命令和使用方法)1.请把其中建立“学生”表Student的语句写下来,表Student是由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。
2.新建“课程”表Course,其中Cno为主键3.新建“学生选课”表SC,其中(Sno,Cno)为主键4.在student表中查询Sdept是‘计算机’的学生的所有信息,并按Sno降序排列。
5.在以上三个表中查询Ccredit为5并且Grade大于60的学生的学号、姓名和性别。
6.查询出课程名称中含有“语言”一词的课程的所有信息。
7.查询出“C语言”课程成绩前5名的学生的学号、姓名和所在系。
8.查询出各系学生人数。
9.查询没有先修课的学生的所有信息。
10.查询出“计算机应用基础”课程成绩高于张三同学此门课程成绩的学生的所有信息。
sql语句练习题库
sql语句练习题库一、基础题1. 创建一个名为"students"的表,包含以下字段: - 学生编号(student_id),整数类型,主键- 姓名(name),字符串类型,最大长度为50 - 年龄(age),整数类型2. 向"students"表中插入以下记录:- 学生编号:1,姓名:张三,年龄:18- 学生编号:2,姓名:李四,年龄:20- 学生编号:3,姓名:王五,年龄:193. 查询"students"表中所有记录的姓名和年龄。
4. 查询年龄大于等于20岁的学生记录的姓名。
5. 修改学生编号为2的记录的姓名为"赵六"。
6. 删除学生编号为3的记录。
二、进阶题1. 创建一个名为"courses"的表,包含以下字段: - 课程编号(course_id),整数类型,主键- 课程名称(course_name),字符串类型,最大长度为50- 授课教师(teacher),字符串类型,最大长度为502. 向"courses"表中插入以下记录:- 课程编号:1,课程名称:数学,授课教师:张老师- 课程编号:2,课程名称:英语,授课教师:李老师- 课程编号:3,课程名称:物理,授课教师:王老师3. 查询"students"表和"courses"表中学生姓名和课程名称的组合。
4. 查询"students"表中没有选修课程的学生记录的姓名。
5. 查询每门课程的选修人数。
6. 查询选修课程人数最多的课程信息。
三、高级题1. 创建一个名为"scores"的表,包含以下字段:- 学生编号(student_id),整数类型,外键,关联"students"表 - 课程编号(course_id),整数类型,外键,关联"courses"表 - 分数(score),整数类型,取值范围为0-1002. 向"scores"表中插入以下记录:- 学生编号:1,课程编号:1,分数:88- 学生编号:1,课程编号:2,分数:92- 学生编号:2,课程编号:1,分数:75- 学生编号:2,课程编号:3,分数:85- 学生编号:3,课程编号:2,分数:90- 学生编号:3,课程编号:3,分数:783. 查询每个学生的平均分数。
SQL语句习题
1、在教学管理数据库中有学生、课程和选课三个表,它们的定义分别为为:Student(Sno Char(5),Sname Char(6),Ssex Char(2),Sage Int,Sdept Char(2))Course(Cno Char(1), Cname Char (10), Cpno Char(1), Ccredit Int)SC(Sno Char(5), Cno Char(1), Grade int)根据下面的要求,写出SQL语句。
①用SQL语句建立数据表SC,以(Sno, Cno)作为主键;②向Student表插入一条记录(95011, 张三, 女, 19,CS);③检索计算机系(CS)所有女同学的姓名和年龄;④检索选修了2号课程学生的学号、姓名、成绩,并按成绩降序排序;⑤建立一个信息系(IS)所有不及格(Grade<60)学生的视图vwStudent。
2、现有关系数据库如下:学生(学号,姓名,性别,专业)课程(课程号,课程名,学分)学习(学号,课程号,分数)分别用关系代数表达式和SQL语句实现下列各小题。
(1)检索所有选修了课程号为“C112”的课程的学生的学号和分数;(2)检索“英语”专业学生所学课程的信息,包括学号、姓名、课程名和分数;(3)检索“数据库原理”课程成绩高于90分的所有学生的学号、姓名、专业和分数;(4)检索没学课程号为“C135”课程的学生信息,包括学号,姓名和专业;(5)检索至少学过课程号为“C135”和“C219”的课程的学生的信息,包括学号、姓名和专业。
3、设有如下关系表R(No,NAME,SEX,AGE,CLASS)主关键字是NO,其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。
写出实现下列功能的SQL语句。
(1)插入一个记录(25,“李明”,“男”,21,“95031”);(2)插入“95031”班学号为30、姓名为“郑和”的学生记录;。
学生选课数据库SQL语句练习题——教师表
学生选课数据库 SQL语句练习题 ——教师表
表(四)Teacher(教师表)
属性名 数据类型 可否为空
Tno
Varchar2(3) 否
Tname Varchar2(4) 否
Tsex Varchar2(2) 否
Tbirthday Date
可
Prof
V(10) 否
含义 教工编号(主 键) 教工姓名 教工性别 教工出生年月 职称 教工所在部门
-- Create table create table TEACHER (
tno VARCHAR2(3) not null, tname VARCHAR2(4) not null, tsex VARCHAR2(2) not null, tbirthday DATE, prof VARCHAR2(6), depart VARCHAR2(10) ) tablespace TEST pctfree 10 initrans 1 maxtrans 255; -- Add comments to the table comment on table TEACHER is '教师表'; -- Add comments to the columns comment on column TEACHER.tno is '教工编号(主键)'; comment on column TEACHER.tname is '教工姓名'; comment on column TEACHER.tsex is '教工性别'; comment on column TEACHER.tbirthday is '教工出生年月'; comment on column TEACHER.prof is '职称'; comment on column TEACHER.depart is '教工所在部门';
SQL语句练习题
一、对于学生和课程之间的学习关系,有如下的属性:学生(学号,姓名,性别,出生日期,民族,班级,家庭住址,联系电话)课程(课程ID,课程名称)学习(学号,课程ID,成绩)1.画出这种关系的E-R图。
2.指出各表的主键字段。
3.在此数据库的基础上,写出SQL语句。
(1)查出所有男同学的基本信息(2)查出学生的学号,姓名,班级,课程名称,成绩(3)查出成绩表中成绩大于平均成绩的信息(4)查出民族为汉族或者回族的学生的所有基本信息(5)查出成绩在70-80分之间的学生姓名,课程名称和成绩二、.设职工社团数据库有三个基本表:职工(职工号,姓名,年龄,性别);社会团体(编号,名称,负责人,活动地点);参加(职工号,编号,参加日期)。
其中:1)职工表的主码为职工号。
2)社会团体表的主码为编号;外码为负责人,被参照表为职工表,对应属性为职工号。
3)参加表的职工号和编号为主码;职工号为外码,其被参照表为职工表,对应属性为职工号;编号为外码,其被参照表为社会团体表,对应属性为编号。
试用SQL语句表达下列操作:l)定义职工表、社会团体表和参加表,并说明其主码和参照关系。
2)建立下列两个视图。
社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别);参加人情况(职工号,姓名,社团编号,社团名称,参加日期)3)查找参加唱歌队或篮球队的职工号和姓名。
4)查找没有参加任何社会团体的职工情况。
5)查找参加了全部社会团体的职工情况。
6)查找参加了职工号为“1001”的职工所参加的全部社会团体的职工号。
7)求每个社会团体的参加人数。
8)求参加人数最多的社会团体的名称和参加人数。
9)求参加人数超过100人的社会团体的名称和负责人。
10)把对社会团体和参加两个表的数据查看、插入和删除数据的权力赋给用户李平,并允许他再将此权力授予其他用户。
建立一个数据库表student,数据表computer,字段名name,number,sex,SQL2000,flash,net ,其中SQL2000,flash,net设置为浮点型float.1、输出所有男生的成绩use studentselect yuyan as SQL数据库,flash as 网络动画,net as 计算机网络from computerwhere sex='男'2、输出所有SQL成绩在90以上的女生的成绩use studentselect SQL2000 as SQL数据库from computerwhere sex='女'and SQL2000>=903、输出某一科目不合格所有的男生的成绩use studentselect yuyan as SQL数据库,flash as 网络动画,net as 计算机网络from computerwhere sex='男'and SQL2000<60 or flash<60 or net<604、计算并显示每位同学各科的总分和平均分,并按总分从高到低排序use studentselect SQL2000+flash+net as 总分,(SQL2000+flash+net/3)as 平均分from computerorder by SQL2000+flash+net desc5、输出所有计算机网络成绩在70-79之间的同学use studentselect * from computerwhere flash between 70 and 796、输出所有姓“陈”和姓“李”的男生use studentselect * from computerwhere sex='男'and left(name,1) in ('李', '陈')或者use studentselect * from computerwhere sex='男' (and name like '李__'or name like '陈__')7、输出所有学号为偶数的同学成绩use studentselect num as 学号,SQL2000 as SQL数据库,flash as 网络动画,net as 计算机网络from computerwhere num%2=08、输出Flash成绩最好的5位同学use studentselect top 5 * from computerorder by flash desc9、更新同学的成绩,把计算机网络成绩在55-59之间的同学该科的成绩调整为60分use studentupdate computerset net=60where net between 55 and 5910、删除平均分最低的3位同学use studentselect top 3 *,(SQL2000+flash+net)/3 as 平均分from computerorder by (SQL2000+flash+net)/3delete from computerwhere number in(033001,033003,033011)11、统计成绩表中平均分为90以上(含90分)人数use studentselect count(*) from computerwhere (SQL2000+flash+net)/3>=9012、用SQL命令向成绩表添加一个新字段——C语言use studentalter table computeradd c语言float1. 找出没有选修过“李明”老师讲授课程的所有学生姓名--实现代码:select sname from swhere not exists(select * from sc,cwhere o=oand c.cteacher='李明'and sc.sno=s.sno)2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩--实现代码:select s.sno,s.sname,avg_scgrade=avg(sc.scgrade)from s,sc,(select snofrom scwhere scgrade<60group by snohaving count(distinct cno)>=2)a where s.sno=a.sno and sc.sno=a.snogroup by s.sno,s.sname3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名--实现代码:select s.sno,s.snamefrom s,(select sc.snofrom sc,cwhere o=oand ame in('1','2')group by snohaving count(distinct cno)=2)sc where s.sno=sc.sno4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号--实现代码:select s.sno,s.snamefrom s,sc sc1,sc sc2where o='1'and sc2.sno='2'and o=oand sc1.scgrade>sc2.scgrade5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩--实现代码:select sc1.sno,[1号课成绩]=sc1.scgrade,[2号课成绩]=sc2.scgradefrom sc sc1,sc sc2where o='1'and o='2'and sc1.sno=sc2.snoand sc1.scgrade>sc2.scgrade创建表和输入数据CREATE TABLE STUDENT(SNO VARCHAR(3) NOT NULL,SNAME VARCHAR(4) NOT NULL,SSEX VARCHAR(2) NOT NULL,SBIRTHDAY DATETIME,CLASS VARCHAR(5))goCREATE TABLE COURSE(CNO VARCHAR(5) NOT NULL,CNAME VARCHAR(10) NOT NULL,TNO VARCHAR(10) NOT NULL)goCREATE TABLE SCORE(SNO VARCHAR(3) NOT NULL,CNO VARCHAR(5) NOT NULL,DEGREE NUMERIC(10, 1) NOT NULL)goCREATE TABLE TEACHER(TNO VARCHAR(3) NOT NULL,TNAME VARCHAR(4) NOT NULL, TSEX VARCHAR(2) NOT NULL, TBIRTHDAY DATETIME NOT NULL, PROF VARCHAR(6),DEPART VARCHAR(10) NOT NULL)INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾华' ,'男' ,1977-09-01,95033);INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' ,'男' ,1975-10-02,95031);INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王丽' ,'女' ,1976-01-23,95033);INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李军' ,'男' ,1976-02-20,95033);INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' ,'女' ,1975-02-10,95031);INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陆君' ,'男' ,1974-06-03,95031);GOINSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'计算机导论',825) INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系统' ,804); INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'数据电路' ,856); INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'高等数学' ,100);GOINSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'6-106',79);INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);GOINSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES (804,'李诚','男','1958-12-02','副教授','计算机系');INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系');INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES (825,'王萍','女','1972-05-05','助教','计算机系');INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系');练习题目1、查询Student表中的所有记录的Sname、Ssex和Class列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表
(Score)以及教师信息表(Teacher)。
四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。
用SQL语句创建四个表并完成相关题目。
表1-1数据库的表结构
表(一)Student
属性名数据类型可否为空含义
Sno Char(3) 否学号(主码)
Sname Char(8) 否学生姓名
Ssex Char(2) 否学生性别
Sbirthday datetime 可学生出生年月
Class Char(5) 可学生所在班级
表(二)Course
属性名数据类型可否为空含义
Cno Char(5) 否课程号(主码)
Cname Varchar(10) 否课程名称
Tno Char(3) 否教工编号(外码)
表(三)Score
属性名数据类型可否为空含义
Sno Char(3) 否学号(外码)
Cno Char(5) 否课程号(外码)
Degree Decimal(4,1) 可成绩
主码:Sno+ Cno
表(四)Teacher
属性名数据类型可否为空含义
Tno Char(3) 否教工编号(主码)
Tname Char(4) 否教工姓名
Tsex Char(2) 否教工性别
Tbirthday datetime 可教工出生年月
Prof Char(6) 可职称
Depart Varchar(10) 否教工所在部门
表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列。
2、查询教师所有的单位即不重复的Depart列。
3、查询Student表的所有记录。
4、查询Score表中成绩在60到80之间的所有记录。
5、查询Score表中成绩为85,86或88的记录。
6、查询Student表中“95031”班或性别为“女”的同学记录。
7、以Class降序查询Student表的所有记录。
8、以Cno升序、Degree降序查询Score表的所有记录。
==================================================
9、查询“95031”班的学生人数。
10、查询Score表中的最高分的学生学号和课程号。
11、查询每门课的平均成绩
12、查询‘3-105’号课程的平均分。
13、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
13、查询分数大于70,最小于90的Sno列。
==============================================================
14、查询所有学生的Sname、Cno和Degree列。
15、查询所有学生的Sno、Cname和Degree列。
16、查询所有学生的Sname、Cname和Degree列。
17、查询“95033”班所选课程的平均分。
18、假设使用如下命令建立了一个grade表:
create table grade(low int(3),upp int(3),rank char(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列。
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
23、查询“张旭“教师任课的学生成绩。
24、查询选修某课程的同学人数多于5人的教师姓名。
25、查询95033班和95031班全体学生的记录。
26、查询存在有85分以上成绩的课程Cno.
27、查询出“计算机系“教师所教课程的成绩表。
28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的
Cno、Sno和Degree,并按Degree从高到低次序排序。
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno
和Degree.
31、查询所有教师和同学的name、sex和birthday.
32、查询所有“女”教师和“女”同学的name、sex和birthday.
33、查询成绩比该课程平均成绩低的同学的成绩表。
34、查询所有任课教师的Tname和Depart.
35查询所有未讲课的教师的Tname和Depart.
36、查询至少有2名男生的班号。
37、查询Student表中不姓“王”的同学记录。
38、查询Student表中每个学生的姓名和年龄。
39、查询Student表中最大和最小的Sbirthday日期值。
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
41、查询“男”教师及其所上的课程。
42、查询最高分同学的Sno、Cno和Degree列。
43、查询和“李军”同性别的所有同学的Sname.
44、查询和“李军”同性别并同班的同学Sname.
45、查询所有选修“计算机导论”课程的“男”同学的成绩表。