SQL课上作业与答案

合集下载

SQL经典习题及答案(新手必看)

SQL经典习题及答案(新手必看)

Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') a,(select s#,scorefrom SC where C#='002') bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup by S# having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;select Student.S#,Student.Sname,count(SC.C#),sum(score)from Student left Outer 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# and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_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 where Teacher.T#=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>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#,Sname from Student,SC where 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 where S#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# ) from Course,Teacher where 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 where S#='1002')group by S# having count(*)=(select count(*) from SC where S#='1002');15、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;Insert SC select S#,'002',(Select avg(score)from SC where C#='002') from Student where S# not in (Select S# 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# andL.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#)ANDR.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)>=60THEN 1ELSE 0END)/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' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' AND score >= 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 SC AS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SC AS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SC AS 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 WITH TIESISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) FROM scLEFT JOIN sc AS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN sc AS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN sc AS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN sc AS 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 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -] FROM SC,Coursewhere SC.C#=Course.C#GROUP BY SC.C#,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT S#,AVG(score) AS 平均成绩FROM SCGROUP BY S#) AS T1WHERE 平均成绩> T2.平均成绩) as 名次,S# as 学生学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S#) AS T2ORDER BY 平均成绩desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;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#)=1; 28、查询男生、女生人数Select count(Ssex) as 男生人数from Student group by Ssex having Ssex='男';Select count(Ssex) as 女生人数from Student group by Ssex having Ssex='女';29、查询姓“张”的学生名单SELECT Sname FROM Student WHERE Sname like '张%';30、查询同名同性学生名单,并统计同名人数select Sname,count(*) from Student group by Sname having count(*)>1;;31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select Sname, CONVERT(char (11),DATEPART(year,Sage)) as agefrom studentwhere CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60;35、查询所有学生的选课情况;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.Sname from SC,Student where SC.S#=Student.S# and Score>80and C#='003';39、求选了课程的学生人数select count(*) from sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩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='叶平' and SC.score=(select max(score)from SC where C#=C.C# );41、查询各个课程及相应的选修人数select count(*) from sc group by C#;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;44、统计每门课程的学生选修人数(超过10人的课程才统计)。

sql练习题及答案

sql练习题及答案

sql练习题及答案SQL练习题及答案在学习SQL(Structured Query Language)时,练习题是非常重要的一部分。

通过练习题,我们可以巩固和应用所学的SQL知识,提高自己的实践能力。

本文将介绍几个常见的SQL练习题,并提供相应的答案,希望对大家的学习有所帮助。

1. 查询员工表中所有员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表;```2. 查询员工表中薪水大于5000的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 薪水 > 5000;```3. 查询员工表中职位为经理的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 职位 = '经理';```4. 查询员工表中薪水在4000到6000之间的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 薪水 BETWEEN 4000 AND 6000;```5. 查询员工表中薪水最高的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 薪水 = (SELECT MAX(薪水) FROM 员工表);```6. 查询员工表中没有分配部门的员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表WHERE 部门 IS NULL;```7. 查询员工表中按照薪水从高到低排列的前5名员工的姓名和薪水。

答案:```sqlSELECT 姓名, 薪水FROM 员工表ORDER BY 薪水 DESCLIMIT 5;```8. 查询员工表中每个部门的员工数量。

答案:```sqlSELECT 部门, COUNT(*) AS 员工数量FROM 员工表GROUP BY 部门;```9. 查询员工表中薪水排名在第3到第5位的员工的姓名和薪水。

SQL练习题及答案1(合集五篇)

SQL练习题及答案1(合集五篇)

SQL练习题及答案1(合集五篇)第一篇:SQL练习题及答案1SQL练习题:商品销售数据库商品销售数据库Article(商品号 char(4),商品名char(16),单价 Numeric(8,2),库存量 int)Customer(顾客号char(4),顾客名 char(8),性别 char(2),年龄 int)OrderItem(顾客号 char(4),商品号 char(4),数量 int, 日期date)1.用SQL建立三个表,须指出该表的实体完整性和参照完整性,对性别和年龄指出用户自定义的约束条件。

(性别分成男女,年龄从10到100)。

顾客表的数据用插入语句输入数据,其它两表可用任意方式输入数据。

create table OrderItem(顾客号char(4),商品号char(4),日期datetime,数量 smallint,primary key(顾客号,商品号,日期),foreign key(商品号)references Article(商品号), foreign key(顾客号)references Custommer(顾客号));2.检索定购商品号为…0001‟的顾客号和顾客名。

select distinct 顾客号,顾客名from OrderItem where 商品号='0001'3.检索定购商品号为…0001‟或…0002‟的顾客号。

select distinct 顾客号 from OrderItem where 商品号='0001' or 商品号='0002';4.检索至少定购商品号为…0001‟和…0002‟的顾客号。

select 顾客号 from OrderItem where 商品号='0001' and 顾客号 in(select 顾客号 from OrderItem where 商品号='0002');5.检索至少定购商品号为…0001‟和…0002‟的顾客号。

sql练习题及答案

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练习与答案3

sql练习与答案3

31. 分数表scores设计如下:courseID(课程编号)studentID(学生编号)score(分数)另有一个学生信息表student,包含studentID,sname(学生姓名)。

已知并非所有学生都参加了courseID为0001的考试,现在查询所有参加0001号课程考试及格学生的学生姓名,下面正确的是()。

(选择一项)AA. select sname from student where studentID in (select studentID from scores where courseID = 0001 and score>=60)B. select sname from student where studentID = (select studentID from scores where courseID = 0001 and score>=60)C. select sname from student where studentID not in (select studentID from scores where courseID = 0001 and score<=60)D. select sname from student where studentID exists (select studentID from scores where courseID = 0001 and score>=60)32. 在()的列上更适合创建索引。

(选择两项)ADA. 需要对数据进行排序B. 具有默认值C. 频繁更改D. 频繁搜索33. SQL Server数据库有2种登录认证方式。

其中在()方式下,需要客户端应用程序连接时提供登录时需要用户标识和密码。

CA. Windows身份认证。

B. 以超级用户身份登录。

C. SQL Server身份认证。

SQL语言习题及答案(好)

SQL语言习题及答案(好)
(第一大题)
职工 E(ename,e#,bdate,addr,salary,se#,d#) 部门 D(dname,d#,部门负责人的工号mgre#)
项目 P(pname,p#,所在城市city,主管部门编号d#) 工作 W(职工工号e#,项目编号p#,工作时间hours) 职工家属Depend(e#,家属的姓名name,家属的性别sex)
2021/6/16 18
9.检索为居住在Duluth的所有客户订购过商品的经销商
的编号及其佣金百分比,并按照佣金百分比的降序输 出查询结果
➢ 关系代数
▪ 答案 Select aid, percent From Agents A
Where not exist ( select * from Customers C where C.city = ‘Duluth’ and C.cid not in ( select O.cid from Orders O where O.aid = A.aid)) Order by percent desc
2021/6/16 1
(第一大题) 1.检索部门Research的所有职工的姓名和家庭地址
➢ 关系代数
select ename, addr from E, D where D.d# = E.d# and dname = ’Research’
2021/6/16 2
(第一大题)
2.检索位于Stafford的每个项目的编号、主管部门的 编号及其部门负责人的姓名和家庭地址
2021/6/16 15
6.检索居住在Dallas的所有客户都订购过的商品编号
➢ 关系代数 Select pid from Products P where not exist ( select * from Customers C where C.city = ‘Dallas’ and C.cid not in ( select O.cid from Orders O where O.pid = P.pid ) )

数据库语言SQL作业解答

数据库语言SQL作业解答

S Q L语言习题1.关系数据模型如下:学生S(SNO,SN,SEX,AGE)课程C(CNO,CN,PCNO)PCNO为直接先行课号选课SC(SNO,CNO,GR)GR为课程考试成绩用SQL写出查询程序:选修课程“DB”的学生姓名SN。

方法1.SELECTSNFROMSWHERESNOIN(SELECTSNOFROMSCWHERECNO IN(SELECTCNO/*=*/FROMCWHERECN=‘DB’));方法2.SELECTSNFROMS,SC,CWHERE S.SNO=SC.SNOAND O=OANDCN=“DB”;2.关系数据模型如下:学生S(SNO,SN,SEX,AGE)课程C(CNO,CN,PCNO)PCNO为直接先行课号选课SC(SNO,CNO,GR)GR为课程考试成绩用SQL写出查询程序:查询课程名和它的直接先行课的课程名以及它的间接先行课的课程名。

SELECTCN,,FROMC,CCX,CCYWHEREC.PCNO=OANDCX.PCNO=O[例41]找出每个学生超过他选修课程平均成绩的课程号。

SELECTSno,CnoFROMSC xWHERE Grade>=(SELECT AVG(Grade)FROMSC yWHERE y.Sno=x.Sno);3.关系数据模型如下P84例4.26学生S(SNO,SN,SEX,AGE)课程C(CNO,CN,PCNO)PCNO为直接先行课号选课SC(SNO,CNO,GR)GR为课程考试成绩用SQL写出查询程序:所有学生都选修的课程名CN。

方法1.SELECTCNFROMCWHERE NOTEXISTS(SELECT*FROMSWHERE NOTEXISTS(SELECT*FROMSCWHERESNO=S.SNOANDCNO=O);变换后语义:不存在这样的学生x,该学生没有选修P。

(?x)P≡?(?x(?P))方法2.SELECTCNFROMCWHERECNOIN(SELECTCNOFROMSCGROUPBYCNOHAVINGCOUNT(*)=(SELECT COUNT(*)FROMS));[例46]查询选修了全部课程的学生姓名。

sql习题及答案

sql习题及答案

sql习题及答案SQL习题及答案SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。

它是许多软件开发人员和数据分析师必备的技能之一。

在学习SQL的过程中,练习是非常重要的,因为它可以帮助我们更好地理解和掌握这门语言。

以下是一些常见的SQL习题及答案,供大家练习和参考:1. 查询所有学生的信息```sqlSELECT * FROM students;```2. 查询所有学生的姓名和年龄```sqlSELECT name, age FROM students;```3. 查询所有学生的姓名和年龄,并按年龄从小到大排序```sqlSELECT name, age FROM students ORDER BY age;```4. 查询所有学生的平均年龄```sqlSELECT AVG(age) FROM students;```5. 查询所有学生的姓名和其所在班级的名称```sqlSELECT , c.class_nameFROM students sJOIN classes c ON s.class_id = c.class_id;```6. 查询所有学生的姓名和其所在班级的名称,如果没有班级则显示“未分配班级”```sqlSELECT , COALESCE(c.class_name, '未分配班级')FROM students sLEFT JOIN classes c ON s.class_id = c.class_id;```7. 查询每个班级的学生数量```sqlSELECT class_id, COUNT(*) AS student_countFROM studentsGROUP BY class_id;```以上是一些常见的SQL习题及答案,希望能够帮助大家更好地理解和掌握SQL 语言。

通过不断的练习和实践,相信大家一定能够成为SQL的高手!。

SQL习题及答案

SQL习题及答案

SQL习题及答案实验设有以下关系模式:S(SNO,SNAME,CITY)其中,S表示别SUPPLIER(供应者),SNO为供应者代号,SNAME为供应者的名字,CITY为供应商所在的城市.主键为SNO。

P(PNO,PNAME,COLOR,WEIGHT)其中,P表示PART(零件),PNO为零件代号,PNAME为零件名,COLOR为零件颜色,WEIGHT 为零件重量,主键为PNO。

J(JNO,JNAME,CITY)其中,J表示JOB(工程),JNO为工程编号,JNAME 为工程名,CITY为工程所在城市,主键为JNO。

SPJ(SNO,PNO,JNO,QTY)其中,SPJ表示供应关系,SNO是为指定工程提供零件的供应者代号,PNO是所提供的零件代号,JNO 为工程编号,QTY表示提供的零件数量,主键为(SNO,PNO,JNO),外部键分别为SNO,PNO,JNO。

试做以下各题:1、用SQL的DDL语言创建S,P,J,SPJ四个基本表。

2、按照下面表格提供的数据,用SQL的插入语句插入所有记录。

3、给出下列各题的查询、存储等操作的语句序列,并且上机验证结果。

1)取出所有工程的全部细节;2)取出所在城市为上海的所有工程的全部细节;3)取出重量最轻的那些零件的号码;4)取出为工程J1提供零件的供应者的代号;5)取出为工程J1提供零件P1的供应者的代号;6)取出由供应者S1提供零件的工程的名称;7)取出由供应者S1提供的零件的颜色;8)取出为工程J1和J2提供零件的供应者的代号;9)取出为工程J1提供红色零件的供应者的代号;10)取出为所在城市为上海的工程提供零件的供应者的代号;11)取出为所在城市为上海或北京的工程提供红色零件的供应者的代号;12)取出供应者与工程所在城市相同的供应者提供的零件的代号;13)取出上海的供应者提供给上海的任一工程的零件的代号;14)取出至少有一个和工程不在同一城市的供应者提供零件的工程的代号;15)取出上海供应者不提供任何零件的工程的代号;16)取出这样一些供应者的代号,他们能够提供至少一种由红色零件的供应者提供的零件;17)取出由供应者S1提供零件的工程的代号;18)取出所有这样的三元组<CITY,PNO,CITY>,使得第一个城市的供应者为第二个城市的工程提供零件;19)取出为所有工程提供同样零件的供应者的代号;20)取出提供给上海的所有工程的零件代号;21)取出至少需要供应者S1提供的所有零件的工程的代号;22)把所有红色零件改成橙色;23)删除所有红色零件和对应的SPJ记录;24)取出供应者Sl提供的代号为P1的零件总数;25)取出每个工程的供应商数;26)取出所需的零件总数大于1000的工程代号;1.CREATE TABLE S(SNO CHAR(5) PRIMARY KEY, SNAME CHAR(5),CITY CHAR(10));CREATE TABLE P(PNO CHAR(5) PRIMARY KEY,PNAME CHAR(5),COLOR CHAR(5),WEIGHT INT);CREATE TABLE J(JNO CHAR(5) PRIMARY KEY,JNAME CHAR(5),CITY CHAR(10));CREATE TABLE SPJ(SNO CHAR(5),PNO CHAR(5),JNO CHAR(5),QTY INT,CONSTRAINT PK_SPJ PRIMARY KEY(SNO,PNO,JNO),CONSTRAINT FK_SNO FOREIGN KEY(SNO)REFERENCES S(SNO), CONSTRAINT FK_PNO FOREIGN KEY(PNO)REFERENCES P(PNO), CONSTRAINT FK_JNO FOREIGN KEY(JNO)REFERENCES J(JNO));2.SELECT * FROM J;3.SELECT * FROM J WHERE CITY='上海';4.SELECT PNO FROM P WHERE WEIGHT=(SELECT MIN(WEIGHT) FROM P);5.SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1';6.SELECT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1';7.SELECT DISTINCT JNAME FROM J,SPJ WHERE J.JNO=SPJ.JNO AND SPJ.SNO='S1';8.SELECT DISTINCT COLOR FROM P,SPJ WHERE P.PNO=SPJ.PNO AND SPJ.SNO='S1;9.SELECT X.SNO FROM SPJ X WHERE X.JNO='J1'AND EXISTS(SELECT * FROM SPJ Y WHERE Y.SNO=X.SNO AND Y.JNO='J2');10.SELECT DISTINCT SNO FROM SPJ,P WHERE SPJ.JNO='J1' AND SPJ.PNO=P.PNO AND P.COLOR='红';11.SELECT DISTINCT SNO FROM SPJ,J WHERE SPJ.JNO=J.JNO AND J.CITY='上海';12.SELECT DISTINCT SPJ.SNO FROM SPJ,J,P WHERE SPJ.JNO=J.JNO AND SPJ.PNO=P.PNO AND P.COLOR ='红' AND (J.CITY='上海' OR J.CITY=' 北京') ;13.SELECT DISTINCT P.PNO FROM S,J,P,SPJ WHERE P.PNO=SPJ.PNO AND SPJ.SNO=S.SNO AND SPJ.JNO=J.JNO AND S.CITY=J.CITY;14.SELECT DISTINCT P.PNO FROM S,J,P,SPJ WHERE P.PNO=SPJ.PNO AND SPJ.SNO=S.SNO AND SPJ.JNO=J.JNO AND S.CITY='上海' AND J.CITY='上海';15.SELECT DISTINCT JNO FROM J WHERE EXISTS (SELECT * FROM S,SPJ WHERE SPJ.SNO=S.SNO AND J.JNO=SPJ.JNO AND J.CITY<>S.CITY);16.SELECT DISTINCT JNO FROM J WHERE NOT EXISTS(SELECT * FROM S,SPJ WHERE J.JNO=SPJ.JNO AND SPJ.SNO=S.SNO AND S.CITY='上海');17.SELECT DISTINCT SNO FROM SPJ WHERE PNO IN(SELECT DISTINCT PNO FROM SPJ WHERE SNO IN(SELECT DISTINCT SNO FROM SPJ,PWHERE SPJ.PNO=P.PNO AND P.COLOR='红'));18.SELECT DISTINCT JNO FROM SPJ WHERE SNO='S1';19.SELECT DISTINCT S.CITY,SPJ.PNO,J.CITY FROM S,J,SPJ WHERE S.SNO=SPJ.SNO AND J.JNO=SPJ.JNO AND S.CITY<>J.CITY;20.SELECT DISTINCT SNO FROM S WHERE NOT EXISTS(SELECT * FROM J WHERE NOT EXISTS (SELECT * FROM P,SPJ WHERE S.SNO=SPJ.SNO AND SPJ.PNO=P.PNO AND J.JNO= SPJ.JNO));21.SELECT DISTINCT PNO FROM P WHERE NOT EXISTS(SELECT * FROM J WHERE J.CITY='上海' AND NOT EXISTS(SELECT * FROM SPJ WHERE SPJ.PNO=P.PNOAND SPJ.JNO=J.JNO));22.SELECT DISTINCT JNO FROM SPJ SX WHERE NOT EXISTS(SELECT * FROM SPJ SY WHERE SY.SNO='S1' AND NOT EXISTS(SELECT * FROM SPJ SZ WHERE SY.PNO=SZ.PNO AND SX.JNO=SZ.JNO));23.UPDATE P SET COLORE='橙' WHERE COLORE='红';24.DELETE FROM SPJ WHERE SPJ.PNO IN (SELECT PNO FROM P WHERE COLOR='红'); DELETE FROM P WHERE COLOR='红';25.SELECT SUM(QTY) FROM SPJ WHERE SNO='S1' AND PNO='P1';26.SELECT JNO,COUNT(DISTINCT SNO) FROM SPJ GROUP BY JNO;27.SELECT JNO FROM SPJ GROUP BY JNO HAVING SUM(QTY)>1000;1.//创建s表CREATE TABLE S(SNO CHAR(8) NOT NULL UNIQUE, SNAME VARCHAR(20) NOT NULL UNIQUE, CITY VARCHAR(8),CONSTRAINT CS PRIMARY KEY(SNO));//创建p表CREATE TABLE P(PNO CHAR(8) NOT NULL UNIQUE, PNAME VARCHAR(20) NOT NULL UNIQUE, COLOR CHAR(1),WEIGHT INT,CONSTRAINT CP PRIMARY KEY(PNO));//创建j表CREATE TABLE J(JNO CHAR(8) NOT NULL UNIQUE, JNAME VARCHAR(20) NOT NULL UNIQUE, CITY VARCHAR(8),CONSTRAINT CJ PRIMARY KEY(JNO));//创建spj表CREATE TABLE SPJ(SNO CHAR(8) NOT NULL NUIQUE,PNO CHAR(8) NOT NULL UNIQUE,JNO CHAR(8) NOT NULL UNIQUE, QTY INT,CONSTRAINT CSPJ PRIMARYKEY(SON,PNO,JNO), CONSTRAINT CSPJ FOREING KEY(SNO)REFERENCES S(SNO), CONSTRAINT CSPJ FOREING KEY(PNO)REFERENCES P(PNO), CONSTRAINT CSPJ FOREING KEY(JNO)REFERENCES J(JNO));2.//向s表插入数据INSERT INTO S(SNO,SNAME,CITY) VALUES(‘S1’,’N1’,’上海’); INSERT INTO S(SNO,SNAME,CITY) VALUES(‘S2’,’N2’,’北京’); INSERT INTO S(SNO,SNAME,CITY) VALUES(‘S3’,’N3’,’北京’);VALUES(‘S4’,’N4’,’上海’);INSERT INTO S(SNO,SNAME,CITY)VALUES(‘S5’,’N5’,’南京’);//向p表插入数据INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES(‘P1’,’PN1’,’红’,’12’); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES(‘P2’,’PN2’,’绿’,’18’); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES(‘P3’,’PN3’,’蓝’,’20’); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES(‘P4’,’PN4’,’红’,’13’); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES(‘P5’,’PN5’,’蓝’,’11’); INSERT INTO P(PNO,PNAME,COLOR,WEIGHT) VALUES(‘P6’,’PN6’,’红’,’15’);//向j表插入数据INSERT INTO J(JNO,JNAME,CITY)VALUES(‘J1’,’JN1’,’上海’);INSERT INTO J(JNO,JNAME,CITY)VALUES(‘J2’,’JN2’,’广州’);VALUES(‘J3’,’JN3’,’南京’); INSERT INTO J(JNO,JNAME,CITY) VALUES(‘J4’,’JN4’,’南京’); INSERT INTO J(JNO,JNAME,CITY) VALUES(‘J5’,’JN5’,’上海’); INSERT INTO J(JNO,JNAME,CITY) VALUES(‘J6’,’JN6’,’武汉’); INSERT INTO J(JNO,JNAME,CITY) VALUES(‘J7’,’JN7’,’上海’);//向表spj中插入数据INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S1’,’P1’,’J1’,’200’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S1’,’P1’,’J4’,’700’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S2’,’P3’,’J1’,’400’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S2’,’P3’,’J2’,’200’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S2’,’P3’,’J3’,’200’);VALU ES(‘S2’,’P3’,’J4’,’500’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S2’,’P3’,’J5’,’600’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S2’,’P3’,’J6’,’400’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S2’,’P3’,’J7’,’800’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S2’,’P5’,’J2’,’100’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S3’,’P3’,’J1’,’200’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S3’,’P4’,’J2’,’500’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S4’,’P6’,’J7’,’300’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P2’,’J2’,’200’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P2’,’J4’,’100’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P5’,’J5’,’500’);VALUES(‘S5’,’P5’,’J7’,’100’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P6’,’J2’,’200’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P1’,’J4’,’1000’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P3’,’J4’,’1200’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P4’,’J4’,’800’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P5’,’J4’,’400’); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES(‘S5’,’P6’,’J4’,’500’);3.1SELECT * FROM J;3.2SELECT * FROM J WHERE CITY LIKE ‘上海’;3.3SELECT PNO FROM P WHEREWEIGHT=(SELECT MAX(WEIGHT)FROM P);3.4SELECT SNO FROM SPJ WHERE JNOIN(SELECT JNO FROM J WHERE JNO=‘J1’);3.5SELECT SNO FROM SPJ WHERE JNO=‘J1’ AND PNO=‘P1’;3.6SELECT JNAME FROM J,SPJ WHEREJ.JNO=SPJ.JNO AND SPJ.SNO=‘S1’;3.7SELECT COLOR FROM P,SPJ WHEREP.PNO=SPJ.PNO AND SPJ.SNO=‘S1’;3.8SELECT DISTINCT SNO FROM SPJ WHERE JNO=‘J1’ OR JNO=‘J2’;3.9SELECT SNO FROM SPJ,P WHEREP.PNO=SPJ.PNO AND SPJ.JNO=‘J1’ AND P.COLOR=‘红’’3.10SELECT SNO FROM SPJ,J WHEREJ.JNO=SPJ.JNO AND J.CITY=‘上海’;3.11SELECT SNO FROM SPJ,J,PWHERE SPJ.PNO=P.PNO AND J.JNO=SPJ.JNO AND P.COLOR=‘红’;3.12SELECT SPJ.PNO FROM SPJ,S,JWHERE S.SNO=SPJ.SNO AND J.JNO=SPJ.JNO AND S.CITY=J.CITY;3.13SELECT SPJ.PNO FROM SPJ,S,JWHERE S.SNO=SPJ.SNO AND J,JNO=SPJ.JNO AND S.CITY=‘上海’ AND J.CITY=‘上海’; 3.14SELECT SPJ.JNO FROM SPJ,S,JWHERE S.SNO=SPJ.SNO AND J.JNO=SPJ.JNO AND S.CITY<>J.CITY;3.15SELECT JNO FROM SPJ WHERE JNO NOT IN (SELECT SPJ.JNO FROM S,SPJ WHERES.SNO=SPJ.SNO AND S.CITY =‘上海’);3.16SELECT SPJ.SNO FROM SPJ,P WHERE SPJ.PNO IN(SELECT SPJ.PNO FROM SPJ,S,PWHERE S.SNO=SPJ.SNO ANDP.PNO=SPJ.PNO AND P.COLOR=‘红’);3.17SELECT SPJ.JNO FROM S,P,SPJWHERE S.SNO=SPJ.SNO ANDJ.JNO=SPJ.JNO;3.18SELECT S.CITY,J.CITY FROM S,J,SPJWHERE S.SNO=SPJ.SNO ANDJ.JNO=SPJ.JNO;3.19SELECT S.CITY,SPJ.PNO,J.CITY FROM S,J,SPJ WHERE S ,=SPJ.SNO AND J.JNO =SPJ.JNO; 3.20SELECT S.CITY,SPJ.PNO,J.CITY FROM SPJ,S,J WHERE S.SNO=SPJ.SNO AND J.JNO=SPJ.JNO AND S.CITY<>J.CITY;3.21SELECT JNO FROM SPJ AS SPJ1。

SQL语言练习题及答案

SQL语言练习题及答案

SQL语言练习题及答案第三章SQL语言一、选择题1.SQL语言是(B)的语言,容易学习。

A.过程化B.非过程化C.格式化D.导航式2.SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。

其中最重要的,也是使用最频繁的语句是(A)。

A.SELECTB.INSERTC.UPDATED.DELETE3.在视图上不能完成的操作是()。

A.更新视图B.查询C.在视图上定义新的表D.在视图上定义新的视图CREATE、4.SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,DROP、ALTER语句是实现哪种功能()。

A.数据查询B.数据操纵C.数据定义D.数据控制5.SQL语言中,删除一个视图的命令是()。

6.在SQL语言中的视图VIEW是数据库的()。

7.下列的SQL语句中,()不是数据定义语句。

8.若要撤销数据库中已经存在的表S,可用()。

9.若要在基本表S中增加一列CN(课程名),可用()。

TABLE S(CN CHAR(8))TABLE S ALTER(CN CHAR(8))TABLE S ADD(CN CHAR(8))TABLE S(ADD CN CHAR(8))10.学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。

要在表S中删除一个属性“年龄”,可选用的SQL 语句是()。

A.DELETE Age from SB.ALTER TABLE S DROP AgeC.UPDATE S AgeD.ALTER TABLE S‘Age’11.有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S #,C#,GRADE)。

其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄,C#是课程号,CNAME是课程名称。

要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL 语句是SELECTSNAMEFROMS,C,SC WHERE子句。

第四章SQL作业参考答案及常见错误说明

第四章SQL作业参考答案及常见错误说明
c.
UPDATE works SET salary = 1.1*salary WHERE pany-name = 'First Bank Corporation'
AND works.employee-name IN( SELECT manager-name FROM manages
这道题做错率非常高,下面是各种做法:
做法 1:
select employee-name from works where salary > (
SELECT employee-name FROM works WHERE company-name <> 'First Bank Corporation'
SELECT employee-name FROM works WHERE NOT (company-name = 'First Bank Corporation')
AND manages.manager-name = managers.employee-name
f.
SELECT employee-name FROM employee WHERE employee-name NOT IN (
SELECT employee-name FROM works WHERE company-name = 'First Bank Corporation' )
b)
由于创建的视图中含有一个导出列 avg(salary),它无法与 works 或 manages 中的具体一列相 对应,所以这样的视图不能更新。设想,如果更新此视图,修改了 avg(salary)的值,此时表 works 中的 salary 该如何修改? 一般说来简单的行列视图(从基本表中通过投影和选择得到的视图)是可以更新的,含有分 组、聚集函数的视图是不可更新的。 另外简单行列视图还有 with check option 约束,可参考相关资料理解其含义。

数据库(sql)课堂练习题(答案)

数据库(sql)课堂练习题(答案)

假设有如下4个样表student(学号,姓名,性别,出生日期,班级) teacher(教工号,姓名,性别,出生日期,职称,所在系) course(课程号, 课程名,教工号) score(学号,课程号,成绩)1、查询学生信息表中所有的姓名、性别和班级select sname,sex,class from student2、查询成绩表中成绩在60到80之间的所有记录select * from score where degree between 60 and 803、查询学生信息表中‘95031’班的学生或性别为‘女’的学生记录select * from student where class=95031 or sex='女'4、以班级降序显示学生信息表的所有记录select * from student order by class desc5、以课程号升序、成绩降序显示成绩表的所有记录select * from score order by cno asc , degree desc6、查询‘95031’班的学生人数select count(sno) 人数 from student where class=950317、查询成绩表中的最高分的学生的学号,课程号select sno,cno from score where degree=(select max(degree) from score)8、查询成绩表中课程号为‘3-105’的平均分*/select avg(degree) 平均成绩 from score where cno='3-105'9、显示成绩表中至少有5名学生选修的并以3开头的课程号的平均分数select avg(degree) 平均分数 from score where cno like '3%' group by cno having count(sno)>=510、列出95033班和95031班全体学生的记录select * from student where class in('95031','95033')11、显示所有学生的姓名、课程号和成绩select sname,cno,degree from student,score where student.sno=score.sno12、列出所有同学的姓名、课程名和成绩select sname,cname,degree from student,score,course where student.sno=score.sno and o=o13、显示'张旭'教师任课的学生成绩select student.sno, sname,degree from student,scorewhere student.sno=score.sno and cno in(select cno from coursewhere tno in (select tno from teacher where name='张旭' ) )14、列出存在有85分以上成绩的课程号select distinct cno from score where degree in (select degree from score where degree>85)15、列出最高分同学的学号、课程号和成绩*/select * from score where sno=(select sno from score where degree=(select max(degree) from score))16、列出所有未讲课的教师的姓名和系别select name,depart from teacher where not exists (select * from course where course.tno=teacher.tno)17、列出成绩比该课程平均成绩低的同学的成绩表select * from score x where degree<(select avg(degree) from score y where o=o)18、列出所有选修‘计算机导论’课程的‘男’同学的成绩表select student.sno,sname,degreefrom score,studentwhere student.sno=Score.sno and cno=( select cnofrom coursewhere cname='计算机导论' )and sex='男'第三章习题5.试用SQL语言完成以下各项操作:四个关系模式:S(SNO,SNAME,STATUS,CITY)P(PNO,PNAME,COLOR,WEIGHT)J(JNO,JNAME,CITY)SPJ(SNO,PNO,JNO,QTY)(1) 找出所有供应商的姓名和所在城市。

SQL课后作业10题参考答案

SQL课后作业10题参考答案

1、假设每个职工可以在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示E#,MUM,SUM_SALARY分别表示工号、公司数目和工资总数。

分析:涉及到表为works表;按照职工来统计公司的数目和工资总额select E#,count(c#) NUM,sum(salary) SUM_SALARYfrom worksgroup by E#2、检索”联华公司”中低于本公司平均公司的职工工号和姓名.(10题2小题) (1)查找联华公司职工的平均工资。

方法一:连接查询实现select avg(salary) from works,compwhere works.c#=comp.c#and cname='联华公司'方法二:嵌套查询实现Select avg(salary) from worksWhere c#=(select c# from compWhere cname='联华公司')------------------------------------5799.5(2)查找联华公司工资低于(1)的职工工号和姓名。

方法一:连接查询实现外层查询select emp.e#,enamefrom emp,works,compwhere emp.e#=works.e#and works.c#=comp.c#and cname='联华公司'and salary<(Select avg(salary) from worksWhere c#=(select c# from compWhere cname='联华公司'))方法二:嵌套查询实现外层查询(自己思考)3、检索工资高于其所在公司职工平均工资的所有职工的工号和姓名。

(1)先查找各公司的平均工资select c#,avg(salary) avg_salfrom worksgroup by c#(2) 检索所有职工的工号、姓名、公司,工资select emp.e#,ename,works.c#,salary,from emp,workswhere emp.e#=works.e#(3)检索所有职工的工号、姓名、公司,工资,所在公司和平均工资select emp.e#,ename,works.c#,salary,a.c#,a.avg_salfrom emp,works,(select c#,avg(salary) avg_salfrom works group by c#) awhere emp.e#=works.e#and works.c#=a.c#and salary>avg_sal4、检索职工人数最多的公司的编号和名称(10题的4小题).(1)按照公司来统计公司的人数(涉及到works)select c#,count(e#) from worksgroup by c#(2) 从(1)的结果中查找人数最多的公司的人数select max(cont) from (select c#,count(e#) contfrom worksgroup by c#) a(3) 根据(2)查询的结果,从(1)的结果中查找人数最多的公司的编号.select c# from (select c#,count(e#) cont from works group by c#) awhere cont=(select max(cont) from (select c#,count(e#) contfrom worksgroup by c#) a)(4)已知公司编号,在COMP表中查找公司编号和名称select c#,cname from compwhere c# in(select c# from (select c#,count(e#) cont from works group by c#) awhere cont=(select max(cont) from (select c#,count(e#) contfrom worksgroup by c#) a))5、检索工资总额最小的公司的编号和名称。

(完整版)sql练习题+答案

(完整版)sql练习题+答案

(一)新建以下几个表student(学生表):其中约束如下:(1)学号不能存在相同的(2)名字为非空(3)性别的值只能是'男'或'女'(4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系(5)出生日期为日期格式(6)年龄为数值型,且在0~100 之间create table student (age smallint constraint d check ( age between 0cs(成绩表):其中约束如下: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 between 0 and100 ), 检查约束——cj( 成绩) 只能在~100 之间,可以不输入值constraint f primary key ( sno , cno ) ----- 定义学生学号和课程号为sc 表的主键)course 课程表)其约束如下:1)课程号( cno)不能有重复的2)课程名( cname)非空三)针对学生课程数据库查询(1)查询全体学生的学号与姓名。

(2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。

(3)查询全体学生的详细记录。

select * from student(4)查全体学生的姓名及其出生年份。

select sname , birth from student(5)查询学校中有哪些系。

select distinct dept from student(6)查询选修了课程的学生学号。

sql练习题及答案

sql练习题及答案

sql练习题及答案SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。

在这篇文章中,我们将提供一些SQL练习题及其答案,旨在帮助读者加深对SQL的理解,并提供实践操作的机会。

练习题一:学生表考虑一个名为"Students"的学生表,包含以下字段:- 学生编号(StudentID)- 学生姓名(StudentName)- 学生年级(Grade)- 学生所在学校(School)请使用SQL语句创建并插入示例数据到"Students"表中。

答案:```sqlCREATE TABLE Students (StudentID INT,StudentName VARCHAR(50),Grade INT,School VARCHAR(50));INSERT INTO Students (StudentID, StudentName, Grade, School)VALUES (1, '张三', 11, '中学A'),(2, '李四', 10, '中学B'),(3, '王五', 10, '中学A'),(4, '赵六', 12, '中学C');```练习题二:查询学生表信息请编写SQL查询语句,查询出所有学生的姓名和所在学校。

答案:```sqlSELECT StudentName, School FROM Students;```练习题三:更新学生信息假设有一位新生加入学校,学生姓名为"李华",年级为11,学校为"中学B"。

请编写SQL语句将该学生信息插入到学生表中。

答案:```sqlINSERT INTO Students (StudentName, Grade, School)VALUES ('李华', 11, '中学B');```练习题四:删除学生信息假设"赵六"这位学生已经转学离开学校,需要从学生表中将其信息删除。

SQL数据库 上课参考答案

SQL数据库 上课参考答案
A.多对多 B.一对一
C.多对一 D.一对多
二、判断题
1. 因为通过视图可以插入.修改或删除数据,因此视图也是一个实在表,SQL SERVER将它保存在syscommens系统表中。(F)
2. DELETE语句只是删除表中的数据,表本身依然存在数据库中。(T)
3. 在数据库中建立的索引越多越好。(F)
D.外键一定要与相应的主键同名,但并不一定唯一
9.在T-SQL语言中,修改表结构时,应使用的命令是( C )
A.UPDATE B. INSERT
C. ALTER D. MODIFY
10.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从部门到职员的联系类型是( D )
9.设置惟一约束的列可以为空吗?(T)
10. 语句 select 15/2 的执行结果是: 7.5 吗 (F)
三、填空题
1. 目前最常用的数据库有层次数据库、(网状) 数据库和(关系型)数据库,其中(关系)数据库是目前应用最广泛的一种数据库。
2. 关系数据库的数据操作主要包括插入、删除、修改、查询数据。
go
create table syllabus
(
sid char(6) primary key,
sname nvarchar(10) not null,
)
go
if exists(select name from sysobjects where name='t_s' and xtype='u')
if exists(select name from sysobjects where name='getDetailByName' and xtype='p')

数据库sql课后练习题及答案解析

数据库sql课后练习题及答案解析

数据库sql课后练习题及答案解析第一篇:数据库sql课后练习题及答案解析先创建下面三个表:(book表)(borrow表)(reader表)1)找出姓李的读者姓名(NAME)和所在单位(COMPANY)。

2)列出图书库中所有藏书的书名(BOOK_NAME)及出版单位(OUTPUT)。

3)查找“高等教育出版社”的所有图书名称(BOOK_NAME)及单价(PRICE),结果按单价降序排序。

4)查找价格介于10元和20元之间的图书种类(SORT),结果按出版单位(OUTPUT)和单价(PRICE)升序排序。

5)查找书名以”计算机”开头的所有图书和作者(WRITER)。

6)检索同时借阅了总编号(BOOK_ID)为112266和449901两本书的借书证号(READER_ID)。

##7)* 查找所有借了书的读者的姓名(NAME)及所在单位(COMPANY)。

8)* 找出李某所借所有图书的书名及借书日期(BORROW_DATE)。

9)* 无重复地查询2006年10月以后借书的读者借书证号(READER_ID)、姓名和单位。

##10)* 找出借阅了一书的借书证号。

11)找出与”赵正义”在同一天借书的读者姓名、所在单位及借书日期。

12)查询2006年7月以后没有借书的读者借书证号、姓名及单位。

#13)求”科学出版社”图书的最高单价、最低单价、平均单价。

##14)* 求”信息系”当前借阅图书的读者人次数。

#15)求出各个出版社图书的最高价格、最低价格和总册数。

#16)分别找出各单位当前借阅图书的读者人数及所在单位。

17)* 找出当前至少借阅了2本图书(大于等于2本)的读者姓名及其所在单位。

18)分别找出借书人次数多于1人次的单位及人次数。

19)找出藏书中各个出版单位的名称、每个出版社的书籍的总册数(每种可能有多册)、书的价值总额。

20)查询经济系是否还清所有图书。

如果已经还清,显示该系所有读者的姓名、所在单位和职称。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、查询xs 表中计算机专业同学的学号、姓名和总学分,结果中各列的标题分别指定为number 、name 和mark 。

Select 学号as number姓名as name总学分as mark from xs where 专业名=" 计算机";2、查询xs 表中计算机专业各同学的学号、姓名和总学分,对总学分按如下规则进行替换:若总学分为空值,替换为“尚未选课” ;若总学分小于50,替换为“不及格” ;若总学分在50〜52之间,替换为“合格”;若总学分大于52,替换为“优秀”。

总学分列的标题更改为“等级” 。

select 学号,姓名,casewhen 总学分is null then " 尚未选课"when 总学分< 50 then " 不及格"when 总学分>=50 and 总学分<=52 then "合格"else "优秀"end as 等级from xswhere 专业名="计算机";3、按120分制重新计算成绩,显示xs_kc表中学号为81101的学生成绩信息。

select 学号,课程号,成绩*1.2 as 成绩120 from xs_kc where 学号="81101";3 rows in set4、对xscj数据库的xs表只选择专业名和总学分,消除结果集中的重复行。

select distinct 专业名,总学分from xs;8 rows in set5、统计备注不为空的学生数目。

select count(备注) as 人数from xs where 备注is not null;6、统计总学分在50分以上的人数。

select count(总学分) as 人数from xs where 总学分> 50;1 row in set7、求选修101 课程的学生的最高分和最低分。

select max(成绩)as 最高分,min(成绩)as 最低分from xs_kc where 课程号="101";1 row in set8、求学号081101 的学生所学课程的总成绩。

select sum(成绩)as 总成绩from xs_kc where 学号="81101";9、求选修101 课程的学生的平均成绩。

select 学号,avg(成绩)from xs_kc where 课程号="101";10、求选修101 课程的成绩的方差。

select variance(成绩)from xs_kc where 课程号="101";11、求选修101 课程的成绩的标准差。

select stddev(成绩) from xs_kc where 课程号="101";12、求选修了206 课程的学生的学号。

select group_concat(学号) from xs_kc where 课程号="206";13、从xs 表中检索出所有学生的信息,并使用表别名student 。

select * from xs as student;14、查找xscj 数据库中所有学生选过的课程名和课程号select distinct kc.课程名,xs_kc.课程号from kc,xs_kc where kc.课程号=xs_kc课程号; 3 rows in set15、用FROM 子句的JOIN 关键字表达下列查询:查找选修了206 课程且成绩在80 分以上的学生姓名及成绩。

select 姓名,成绩from xs inner join xs_kc on xs.学号=xs_kc.学号where 课程号="206"and 成绩> 80;3 rows in set16、用FROM 的JOIN 关键字表达下列查询:查找选修了“计算机基础”课程且成绩在80 分以上的学生学号、姓名、课程名及成绩。

select xs学号,姓名,课程名,成绩from xs join xs_kc on xs.学号=xs_kc.学号join kc on xs_kc.课程号=kc.课程号where课程名="计算机基础"and成绩> 80;8 rows in set17、查找xscj 数据库中课程不同、成绩相同的学生的学号、课程号和成绩。

select a.学号,a.课程号,b.课程号,a.成绩from xs_kc as a join xs_kc as b on a.成绩=b. 成绩and a.学号=b.学号and a.课程号!= b.课程号;2 rows in set18、查找所有学生情况及他们选修的课程号,若学生未选修任何课,也要包括其情况。

select xs_kc.*,课程号from xs left outer join xs_kc on xs.学号=xs_kc.学号;19、查找被选修了的课程的选修情况和所有开设的课程名。

select xs_kc.*,课程名from xs_kc right join kc on xs_kc.课程号=kc.课程号;20、列出学生所有可能的选课情况。

mysql> select 学号,姓名,课程号,课程名-> from xs cross join kc;21、查询xscj 数据库xs 表中学号为81101 的学生的情况。

select 学号,姓名,总学分from xswhere 学号="81101";1 row in set22、查询xs 表中总学分大于50 分的学生的情况。

select * from xs where 总学分> 50;23、查询xs 表中备注为空的同学的情况。

select * from xs where 备注is null;mysql> select * from xs where 备注<=> null;24、查询xs 表中专业为计算机,性别为女(0)的同学的情况。

select * from xs where 专业名="计算机" and 性别=0;25、查询xscj 数据库xs 表中姓“王”的学生学号、姓名及性别。

select 学号,姓名,性别from xs where 姓名like "王%";26、查询xscj 数据库xs 表中,学号倒数第二个数字为0 的学生的学号、姓名及专业名。

select 学号,姓名,专业名from xs where 学号like "%0_";| 查询xs 表中名字包含下画线的学生学号和姓名。

select 学号,姓名from xs where 学号like "%#_%" escape "#";28、查询xscj 数据库xs 表中不在1993 年出生的学生情况。

select * from xs where 出生时间<=>1993;29、查询xs 表中专业名为“计算机” 、“通信工程”或“无线电”的学生的情况。

select * from xs where 专业名=" 计算机" or 专业名=" 通信工程" or 专业名=" 无线电";30、查询xscj 数据库中总学分尚不定的学生情况。

select * from xs where 总学分is null;31、查找在xscj数据库中选修了课程号为206的课程的学生的姓名、学号。

select 姓名,学号from xs where 学号in(select 学号from xs_kc where 课程号="206");32、查找未选修离散数学的学生的姓名、学号、专业名。

select 姓名,学号,专业名from xs where 学号not in (select 学号from xs_kc where 课程号in (select 课程号from xs where 课程号="离散数学"));33、查找选修了离散数学的学生学号。

select 学号from xs_kc where 课程号= (select 课程号from kc where 课程名="离散数学"); 34、查找xs表中比所有计算机系的学生年龄都大的学生学号、姓名、专业名、出生日期。

select 学号,姓名,专业名,出生时间from xs where 出生时间<all(select 出生时间from xs where 专业名="计算机");35、查找xs_kc表中课程号206的成绩不低于课程号101的最低成绩的学生的学号。

select 学号from xs_kc where 课程号="206" and 成绩>any(select 成绩from xs_kc where 课程号="101");36、查找选修206 号课程的学生姓名。

select 姓名from xs where exists (select * from xs_kc where 课程号="206" and 学号=xs学号); 37、查找选修了全部课程的同学的姓名。

select 姓名from xs where not exists (select * from kc where not exists (select * from xs_kc where 学号=xs学号and课程号=kc课程号));38、从xs表中查找总学分大于50分的男同学的姓名和学号。

select 姓名,学号from xs where 总学分>50 and 性别=1;select 姓名,学号from xs where 学号in (select 学号from xs where 总学分>50 and 性别=1);select 姓名,学号,总学分from (select 姓名,学号,性别,总学分from xs where 总学分> 50) as student where 性别=1;39、从xs表中查找所有女学生的姓名、学号,以及与81101号学生的年龄差距。

select 姓名,学号,year(出生时间)-year((select 出生时间from xs where 学号="81101" )) as 年龄差距from xs where 性别=0;40、查找与81101 号学生性别相同、总学分相同的学生学号和姓名。

相关文档
最新文档