SQL查询更新语句课堂练习和习题
SQL语句练习题及答案

姓名:______________班级:__________________一、请根据以下要求,填写正确的SQL语句。
1.查询“学生”表中所有计算机专业的男生信息。
______________________________________________________________________________ 2.查询“学生”表中姓“李”且2006年出生的学生的学号、姓名、出生日期信息。
______________________________________________________________________________ 3.查询“学生”表中年龄最大的三名学生的学号、姓名、出生日期信息。
______________________________________________________________________________ 4.统计“学生”表中各专业男生人数,显示格式为:专业、人数。
______________________________________________________________________________ 5.查询每名“学生”的平均成绩,按平均成绩降序显示姓名和平均成绩信息。
______________________________________________________________________________ 6.已知“Student1”表结构与“Student”完全相同,现将“Student1”中所有“旅游管理”专业学生的学号、姓名及专业追加到“Student”中。
______________________________________________________________________________ 7.计算Grade等级字段的值。
计算规则为60分及以上为合格,其余为不合格。
SQL语句进阶练习(多表连接查询)-提供查询题目与解答

说明
第一眼看到表的结构可能心中会觉得题目比较简单,但是当我深入做题目的时候发现这题目可能有些变态,几乎费了我一天的时间才 把这些题目做出来(可能是因为我不怎么聪明的原因) 在我所做的题解中有一部分不是最优解,还有很多高效的查询方式,比如最后一题的解答,我有三种方式解答,但是最后的一种才是 最简单的行转列的方式。 在这些题目中使用最多的就是join多表连接查询
-方- 法二 SELECT st.s_id,st.s_name FROM ( SELECT *,COUNT(c_id) FROM score GROUP BY s_id ) one RIGHT JOIN student st ON one.s_id=st.s_id WHERE `COUNT(c_id)`<3 OR `COUNT(c_id)` IS NULL
--查5询. 两门以上不及格课程的同学的学号及其平均成绩 SELECT s_id,AVG(s_score) FROM score WHERE s_score<60 GROUP BY s_id HAVING COUNT(c_id)>=2
--查6询. 平均成绩大于85的所有学生的学号、姓名和平均成绩 SELECT st.s_id,s_name,`AVG(s_score)` avg_score FROM student st INNER JOIN ( SELECT s_id,AVG(s_score) FROM score GROUP BY s_id HAVING `AVG(s_score)`>85) sc ON st.s_id=sc.s_id
题目解答
稍微基础题目解答
--查1询. 平均成绩大于60分的学生的学号和平均成绩 -题- 目解析一 如果平均成绩为已选科目的平均分解答如下 SELECT s_id,AVG(s_score) FROM score GROUP BY s_id HAVING `AVG(s_score)`>60 -題- 目解析二 如果平均分是总科目分数除以总门数,没有考当0做分解答如下 SELECT s_id,(SUM(s_score)/3) avg_score FROM score GROUP BY s_id HAVING `avg_score`>60
2023 SQL 数据库查询练习题及答案

2023 SQL 数据库查询练习题及答案数据库查询是数据管理和处理的重要环节,熟练的SQL查询技巧对于数据库工程师和数据分析师来说至关重要。
为了提升大家的SQL 查询能力,以下是一些2023年的SQL数据库查询练习题及答案,希望能够对大家的学习和实践有所帮助。
练习题1:学生成绩表考虑一个学生成绩表(Students)和课程信息表(Courses),请使用SQL查询语句完成以下操作。
1. 查询所有学生的姓名和学号;2. 查询所有参加了"C3"课程的学生的姓名和学号;3. 查询所有选择了至少两门课程的学生的姓名和学号;答案1:SELECT 学号, 姓名FROM 学生成绩表;答案2:SELECT 学生成绩表.学号, 学生成绩表.姓名FROM 学生成绩表, 课程信息表WHERE 学生成绩表.课程编号 = 课程信息表.课程编号AND 课程信息表.课程名称 = "C3";答案3:SELECT 学号, 姓名FROM 学生成绩表GROUP BY 学号, 姓名HAVING COUNT(*) >= 2;练习题2:库存管理考虑一个库存管理系统的数据库,包含了商品表(Products)、仓库表(Warehouses)和库存表(Inventory)。
请使用SQL查询语句完成以下操作。
1. 查询商品表中单价不低于100元的商品的名称和单价;2. 查询所有位于“北京”仓库中的商品的名称和库存量;3. 查询库存量最多的商品的名称和库存量;答案1:SELECT 名称, 单价FROM 商品表WHERE 单价 >= 100;答案2:SELECT 商品表.名称, 库存表.库存量FROM 商品表, 仓库表, 库存表WHERE 商品表.商品ID = 库存表.商品IDAND 仓库表.仓库ID = 库存表.仓库IDAND 仓库表.所在地 = "北京";答案3:SELECT 商品表.名称, 库存表.库存量FROM 商品表, 库存表WHERE 商品表.商品ID = 库存表.商品IDORDER BY 库存表.库存量 DESCLIMIT 1;练习题3:订单管理考虑一个订单管理系统的数据库,包含了客户表(Customers)、订单表(Orders)和订单详情表(OrderDetails)。
sql练习题及答案

sql练习题及答案SQL练习题及答案SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。
在数据库管理系统中,SQL被广泛应用于数据的查询、插入、更新和删除等操作。
掌握SQL语言对于数据库开发和数据分析非常重要。
在这篇文章中,我们将提供一些SQL练习题及其答案,帮助读者巩固和提升SQL的应用能力。
1. 查询员工表中所有员工的姓名和工资。
答案:```sqlSELECT 姓名, 工资 FROM 员工表;```2. 查询员工表中工资大于5000的员工的姓名和工资。
答案:```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 工资 > 5000;```3. 查询员工表中工资在3000到5000之间的员工的姓名和工资。
答案:```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 工资 BETWEEN 3000 AND 5000;```4. 查询员工表中姓"张"的员工的姓名和工资。
```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 姓名 LIKE '张%';```5. 查询员工表中工资最高的员工的姓名和工资。
答案:```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 工资 = (SELECT MAX(工资) FROM 员工表);```6. 查询员工表中每个部门的员工数量。
答案:```sqlSELECT 部门, COUNT(*) AS 员工数量 FROM 员工表 GROUP BY 部门;```7. 查询员工表中每个部门的平均工资。
答案:```sqlSELECT 部门, AVG(工资) AS 平均工资 FROM 员工表 GROUP BY 部门;```8. 查询员工表中工资高于部门平均工资的员工的姓名和工资。
答案:SELECT 姓名, 工资 FROM 员工表 WHERE 工资 > (SELECT AVG(工资) FROM 员工表 GROUP BY 部门);```9. 查询员工表中没有分配部门的员工的姓名和工资。
sql语句update命令例题

SQL语句是数据库管理系统中最常用的一种操作指令,而其中的update命令又是对数据库中的记录进行更新操作时所使用的一种SQL 命令。
下文将通过例题的方式介绍update命令的语法结构、使用方法以及常见注意事项,帮助读者更好地理解和掌握update命令的使用。
一、update命令的语法结构在介绍update命令的使用方法之前,我们首先需要了解其语法结构。
update命令的一般语法结构如下所示:```UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;```其中,update为SQL关键字,table_name表示待更新的数据表名称,column1、column2为表中待更新的字段名称,value1、value2为对应字段的新值,condition为更新条件。
二、update命令的使用方法在实际应用中,我们经常需要使用update命令对数据库中的记录进行更新操作。
下面通过一个例子来说明update命令的具体使用方法。
假设我们有一个名为“employees”的数据表,其中存储了员工的信息,包括员工编号(emp_id)、尊称(emp_name)和工资(salary)等字段。
如果我们需要将员工编号为“1001”的员工的工资调整为4000,可以使用如下的update命令来实现:```UPDATE employeesSET salary = 4000WHERE emp_id = 1001;```通过上述update命令,我们成功地将“employees”数据表中员工编号为“1001”的员工的工资更新为4000。
三、update命令的常见注意事项在实际应用update命令时,我们需要注意以下几个方面的问题:1. 更新条件的设置在使用update命令时,我们需要明确更新的目标记录,可以通过设置合适的更新条件来限定更新范围,避免对所有记录进行更新操作。
SQL经典查询练习30问及答案PPT教学课件

• (8)查询与学号为108的同学同岁的所有学生的NO、NAME和AGE。 • (9)查询“张旭”教师任课的课程号,选修其课程学生的学号和成
绩。
• (10)查询选修其课程的学生人数多于5人的教师姓名。
2020/12/11
2
• (11)查询“计算机系”与“电子工程系”不同职称的教师的姓名和 职称。
学生表 教师表
2020/12/11
课程表
1
• 练习作业 • (1)查询选修课程‘3-105’且成绩在60到80之间的所有记录。 • (2)查询成绩为85、86或88的记录。 • (3)查询95031班的学生人数。 • (4)查询至少有5名学生选修并以3开头的课程的平均成绩。 • (5)查询最低分大于70,最高分小于90的NO列。 • (6)查询95033班学生所选课程的平均分。 • (7)查询选修‘3-105’课程的成绩高于‘109’号同学成绩的所有同学
2020/12/11
7
• --(16)列出所有任课教师的NAME和DEPART。 • select name,depart • from teacher • --(17)列出所有未讲课教师的NAME和DEPART。 • select as 教师姓名,depart as 所属院系 • from teacher • where tno not in • (select tno • from course • where cno in ( • select cno • from scores group by cno)); • --(18)列出至少有2名男生的班号。 • select class as 班号 • from student • where sex='男' group by class having count(class) >= 2; • --(19)查询不姓“王”的学生记录。 • select * • from student • where name not in (select name from student where name like '王%'); • --(20)查询每门课最高分的学生的NO、CNO、CRADE。
sql语句练习50题
sql语句练习50题Student(Sid,Sname,Sage,Ssex) 学⽣表Course(Cid,Cname,Tid) 课程表SC(Sid,Cid,score) 成绩表Teacher(Tid,Tname) 教师表练习内容:1.查询“某1”课程⽐“某2”课程成绩⾼的所有学⽣的学号;SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b WHEREa.score>b.score AND a.sid=b.sid;此题知识点,嵌套查询和给查出来的表起别名2.查询平均成绩⼤于60分的同学的学号和平均成绩;SELECT sid,avg(score) FROM sc GROUP BY sid having avg(score) >60;此题知识点,GROUP BY 语句⽤于结合合计函数,根据⼀个或多个列对结果集进⾏分组。
group by后⾯不能接where,having代替了where3.查询所有同学的学号、姓名、选课数、总成绩SELECT Student.sid,Student.Sname,count(SC.cid),sum(score)FROM Student left Outer JOIN SC on Student.sid=SC.cid GROUP BY Student.sid,Sname4.查询姓“李”的⽼师的个数;select count(teacher.tid)from teacher where teacher.tname like'李%'5.查询没学过“叶平”⽼师课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student WHERE sid not in (SELECT distinct( SC.sid) FROM SC,Course,Teacher WHERE SC.cid=Course.cid AND Teacher.id=Course.tid AND Teacher.Tname='叶平');此题知识点,distinct是去重的作⽤6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名;select a.SID,a.SNAME from (select student.SNAME,student.SID from student,course,sc where cname='c++'and sc.sid=student.sid and sc.cid=course.cid) a,(select student.SNAME,student.SID from student,course,sc where cname='english'and sc.sid=student.sid and sc.cid=course.cid) b where a.sid=b.sid;标准答案(但是好像不好使)SELECT Student.S#,Student.Sname FROM Student,SC WHERE Student.S#=SC.S# ANDSC.C#='001'and exists( SELECT * FROM SC as SC_2 WHERE SC_2.S#=SC.S# AND SC_2.C#='002');此题知识点,exists是在集合⾥找数据,as就是起别名7.查询学过“叶平”⽼师所教的所有课的同学的学号、姓名;select a.sid,a.sname from (select student.sid,student.sname from student,teacher,course,scwhere teacher.TNAME='杨巍巍' and teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid) a标准答案:SELECT sid,Sname FROM Student WHERE sid in (SELECT sid FROM SC ,Course ,Teacher WHERE SC.cid=Course.cid AND Teacher.tid=Course.tid AND Teacher.Tname='杨巍巍' GROUP BY sid having count(SC.cid)=(SELECT count(cid) FROM Course,Teacher WHERE Teacher.tid=Course.tid AND Tname='杨巍巍'))8.查询课程编号“”的成绩⽐课程编号“”课程低的所有同学的学号、姓名;select a.sid,a.sname from(select student.SID,student.sname,sc.SCORE from student,sc where student.sid=sc.sid and sc.cid=1) a, (select student.SID,student.sname,sc.score from student,sc where student.sid=sc.sid and sc.cid=2) b where a.score<b.score anda.sid=b.sid标准答案:SELECT sid,Sname FROM (SELECT Student.sid,Student.Sname,score ,(SELECT score FROM SC SC_2 WHERE SC_2.sid=Student.sid AND SC_2.cid=1) score2 FROM Student,SCWHERE Student.sid=SC.sid AND cid=1) S_2 WHERE score2 <score;9.查询所有课程成绩⼩于分的同学的学号、姓名;SELECT sid,Sname FROM Student WHERE sid not in (SELECT Student.sid FROM Student,SC WHERE Student.sid=SC.sid AND score>60);此题知识点,先查出⼤于60分的,然后not in 就是⼩于60分的了10.查询没有学全所有课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student,SCWHERE Student.sid=SC.sid GROUP BY Student.sid,Student.Sname having count(cid) <(SELECT count(cid) FROM Course);11.查询⾄少有⼀门课与学号为“”的同学所学相同的同学的学号和姓名;12.查询⾄少学过学号为“”同学所有⼀门课的其他同学学号和姓名;SELECT student.sid,student.Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHERE sid=1)此题知识点,SELECT sid,Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHEREsid=1)这样写是错误的,因为from后⾯是两个表,不能明确是哪个表⾥⾯的sid和sname所以错误提⽰是“未明确定义列”13.把“SC”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩;update sc set score=(select avg(score) from sc,course,teacher where course.cid=sc.cid and course.tid=teacher.tid andteacher.tname='杨巍巍')14.查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;SELECT sid FROM SC WHERE cid in (SELECT cid FROM SC WHERE sid=6) GROUP BY sid having count(*)=(SELECT count(*) FROM SC WHERE sid=6);此题知识点,⽤数量来判断15.删除学习“叶平”⽼师课的SC表记录;delete from sc s where s.cid in (select c.cid from teacher t,course c where t.tid = c.tid and tname='李⼦')此题知识点,嵌套查询可以分布考虑,先查出李⼦⽼师都交了什么课的id,然后再删除那些id的值16.向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、课程的平均成绩;Insert into SC SELECT sid,2,(SELECT avg(score) FROM SC WHERE cid=2) FROM Student WHERE sid not in (SELECT sid FROM SC WHERE cid=2);17.按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:学⽣ID,,数据库,企业管理,英语,有效课程数,有效平均分;(没做出来)18.查询各科成绩最⾼和最低的分:以如下形式显⽰:课程ID,最⾼分,最低分;select cid as 课程号,max(score)as 最⾼分,min(score) as 最低分 from sc group by cid标准答案(但是运⾏不好使)SELECT L.cid As 课程ID,L.score AS 最⾼分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.cid = R.cid ANDL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.cid = IL.cid AND IM.sid=IL.sidGROUP BY IL.cid)AND R.Score = (SELECT MIN(IR.score) FROM SC AS IR WHERE R.cid = IR.cid GROUP BY IR.cid );19.按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序26.查询每门课程被选修的学⽣数select sc.cid,count(sc.sid) from sc,course where sc.cid=course.cid group by sc.cid27.查询出只选修了⼀门课程的全部学⽣的学号和姓名SELECT SC.sid,Student.Sname,count(cid) AS 选课数 FROM SC ,StudentWHERE SC.sid=Student.sid GROUP BY SC.sid ,Student.Sname having count(cid)=1;32.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列SELECT Cid,Avg(score) FROM SC GROUP BY cid ORDER BY Avg(score),cid DESC ;37.查询不及格的课程,并按课程号从⼤到⼩排列SELECT cid,sid FROM sc WHERE score <60 ORDER BY cid38.查询课程编号为且课程成绩在分以上的学⽣的学号和姓名;select student.sid,student.sname from sc,student where sc.cid=1 and sc.score>60 and sc.sid=student.sid40.查询选修“叶平”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩select student.sname,sc.score from sc,student,teacher,course c where teacher.tname='李⼦'and teacher.tid=c.tid and c.cid=sc.cid and sc.sid=student.sid and sc.score=(select max(score)from sc where sc.cid=c.cid)41.查询各个课程及相应的选修⼈数select sc.cid ,count(sc.sid)from sc,student where sc.sid=student.sid group by sc.cid43.查询每门功成绩最好的前两名44.统计每门课程的学⽣选修⼈数(超过⼈的课程才统计)。
数据库中SQL查询语句习题含的答案
查询问题:设教学数据库Education有三个关系:学生关系S (SNO t SNAME, AGE, SEX, SDEPT);学习关系SC (SNO, CNO, GRADE);课程关系C (CNO, CNAME, CDEPT, TNAME) (5)检索至少选修课程号为C2和C4的学生学号;SELECT SnoFROM SC X, SC YWHERE X. Sno=Y. Sno AND X. Cno= <C2,AND Y. Cno= 'C4,;(1)检索计算机系的全体学生的学号,姓名和性别;(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS”的学生学号与姓名;(4)检索选修课程号为C2或C4的学生学号;(5)检索至少选修课程号为C2和C4的学生学号;(6)检索不学C2课的学生姓名和年龄;(7)检索学习全部课程的学生姓名;(8)查询所学课程包含学生S3所学课程的学生学号。
(6)检索不学C2课的学生姓名和年龄;(1)检索计算机系的全体学生的学号,姓名和性别;SELECT Sno, Sname, SexFROM SWHERE Sdept CS\(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS”的学生学号与姓名本查询涉及到学号、姓名和课程名三个属性,分别存放在S和C表中,但S和C表没有直接联系,必须通过SC表建立它们二者的联系。
Cf SC f 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'));(7)检索学习全部课程的学生姓名;在表S中找学生,要求这个学生学了全部课程。
SQL语句练习及参考答案(2021年整理精品文档)
SQL语句练习及参考答案编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(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 。
数据库的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语句进行解答。
祝你练习愉快,取得好成绩!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL查询语句课堂练习和习题一、试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:S(sno,sname,SAGE,SSEX) 各字段表示学号,姓名,年龄,性别Sc(sno,cno,grade) 各字段表示学号,课程号,成绩C(cno,cname, TEACHER) 各字段表示课程号,课程名和教师名其中SAGE, grade是数值型,其他均为字符型。
要求用SQL查询语句实现如下处理:1.统计有学生选修的课程门数。
2.求选修C4课程的学生的平均年龄。
3.求LIU老师所授课程的每门课程的学生平均成绩。
4.统计每门课程的学生选修人数(超过2人的课程才统计)。
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
5.检索学号比WANG同学大,而年龄比他小的学生姓名。
6.检索姓名以WANG打头的所有学生的姓名和年龄。
7.在SC中检索成绩为空值的学生学号和课程号。
8.求年龄大于女同学平均年龄的男学生姓名和年龄。
9.求年龄大于所有女同学年龄的男学生姓名和年龄。
其中涉及单表题:1.4.6.7参考答案:1.统计有学生选修的课程门数。
SELECT COUNT(DISTINCT Cno) FROM SC2.求选修C4课程的学生的平均年龄。
SELECT AVG(SAGE )FROM SWHERE SnoIN(SELECT Sno FROM SC WHERE Cno='4')或者,SELECT AVG(SAGE )FROM S,SC WHERE S.Sno=SC.Sno AND Cno='4'3.求LIU老师所授课程的每门课程的学生平均成绩。
SELECT AVG(GRADE)FROM SC join C on o=oWHERE TEACHER='liu'GROUP BY o另:SELECT CNAME,AVG(GRADE) FROM SC ,CWHERE o=o AND TEACHER='liu'GROUP BY o,cname4.统计每门课程的学生选修人数(超过2人的课程才统计)。
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
SELECT DISTINCT Cno,COUNT(Sno)FROM SCGROUP BY CnoHAVING COUNT(Sno)>2ORDER BY 2 DESC, Cno ASC或:SELECT DISTINCT Cno,COUNT(Sno) as 人数FROM SCGROUP BY CnoHAVING COUNT(Sno)>2ORDER BY 人数DESC, Cno ASC5.检索学号比WANG同学大,而年龄比他小的学生姓名。
SELECT X.SNAMEFROM S AS X, S AS YWHERE Y.SNAME='WANG' AND X.Sno>Y.Sno AND X.SAGE<Y.SAGE或:SELECT SNAMEfrom swhere sno>(select sno from s where SNAME='WANG')and SAGE<(select sAGE from s where SNAME='WANG')6.检索姓名以WANG打头的所有学生的姓名和年龄。
SELECT SNAME,SAGEFROM SWHERE SNAME LIKE 'WANG%'7.在SC中检索成绩为空值的学生学号和课程号。
SELECT Sno,Cno FROM SC WHERE GRADE IS NULL8.求年龄大于女同学平均年龄的男学生姓名和年龄。
SELECT SNAME,SAGEFROM SWHERE SSEX='男'AND SAGE>(SELECT AVG(SAGE) FROM S WHERE SSEX='女')9.求年龄大于所有女同学年龄的男学生姓名和年龄。
SELECT SNAME,SAGEFROM S AS XWHERE X.SSEX='男' AND X.SAGE >ALL (SELECT SAGE FROM S AS Y WHERE Y.SSEX='女')二、试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:要求用SQL更新语句实现如下处理:1.往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
2.在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表S1(Sno,SNAME,SSEX)。
3.在基本表SC中删除尚无成绩的选课元组。
4.把WANG同学的学习选课和成绩全部删去。
5.把选修数据库原理课不及格的成绩全改为空值。
6.把低于总平均成绩的女同学成绩提高5%。
7.在基本表SC中修改4号课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。
参考答案:1.往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
INSERT INTO S(Sno,SNAME,SAGE) VALUES('59','WU',18)2.在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表S1(Sno,SANME,SSEX)。
select Sno,SNAME,SSEX into s1 from studentdelete from s1INSERT INTO S1(Sno,SNAME,SSEX)SELECT Sno,SNAME,SSEXFROM S WHERE NOT EXISTS(SELECT * FROM SC WHEREGRADE<80 AND S.Sno=SC.Sno)select * from s1考虑:以上会有什么问题?INSERT INTO S1(Sno,SNAME,SSEX)SELECT Sno,SNAME,SSEXFROM S WHERE NOT EXISTS(SELECT * FROM SC WHEREGRADE<80 AND S.Sno=SC.Sno or S.Sno=SC.Sno and grade is null)and sno in (select sno from sc)3.在基本表SC中删除尚无成绩的选课元组。
DELETE FROM SC WHERE GRADE IS NULL4.把WANG同学的学习选课和成绩全部删去。
DELETE FROM SC WHERE Sno IN(SELECT SnoFROM SWHERE SNAME='WANG')5.把选修数据库原理课不及格的成绩全改为空值。
UPDATE SC SET GRADE=NULLWHERE GRADE<60 AND CnoIN(SELECT Cno FROM CWHERE CNAME='数据库原理')6.把低于总平均成绩的女同学成绩提高5%。
UPDATE SCSET GRADE=GRADE*1.05WHERE GRADE<(SELECT AVG(GRADE) FROM SC)AND Sno IN (SELECT Sno FROM S WHERE SSEX='女')7.在基本表SC中修改4号课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。
UPDATE SCSET GRADE=GRADE*1.05WHERE Cno='4' AND GRADE<=75UPDATE SCSET GRADE=GRADE*1.04WHERE Cno='4' AND GRADE>75三、问题描述:为管理岗位业务培训信息,建立3个表: S (Sno,SN,SD,SA) Sno,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄C (Cno,CN ) Cno,CN 分别代表课程编号、课程名称SC ( Sno,Cno,G ) Sno,Cno,G 分别代表学号、所选修的课程编号、学习成绩要求实现如下5个处理:1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位4. 使用标准SQL嵌套语句查询只选修了一门课程的学员姓名和所属单位5. 查询选修了课程的学员人数6. 查询选修课程超过5门的学员学号和所属单位参考答案:1.使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名SELECT SN,SD FROM SWHERE [Sno] IN(SELECT [Sno] FROM C,SCWHERE C.[Cno]=SC.[Cno]AND CN=N'税收基础')2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位SELECT S.SN,S.SD FROM S,SCWHERE S.[Sno]=SC.[Sno]AND SC.[Cno]='C2'3.使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位SELECT SN,SD FROM SWHERE [Sno] NOT IN(SELECT [Sno] FROM SCWHERE [Cno]='C5')4.使用标准SQL嵌套语句查询只选修了一门课程的学员姓名和所属单位SELECT SN,SD FROM SWHERE [Sno] IN(SELECT [Sno] FROM SC inner JOIN C ON SC.[Cno]=C.[Cno]GROUP BY [Sno]HAVING COUNT(*)=1)5.查询选修了课程的学员人数SELECT 学员人数=COUNT(DISTINCT [Sno]) FROM SC6.查询选修课程超过5门的学员学号和所属单位SELECT SN,SD FROM SWHERE [Sno] IN(SELECT [Sno] FROM SCGROUP BY [Sno]HAVING COUNT(DISTINCT [Cno])>5)四、问题描述:已知关系模式:S (SNO,SNAME)学生关系。