数据库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人的课程才统计)。

2023 SQL 数据库查询练习题及答案

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)。

实验6-SQL-查询附答案

实验6-SQL-查询附答案

实验六SQL 查询一、实验目的:1.熟练掌握SELECT语句的语法格式2.掌握联接的几种方法3.掌握子查询的表示和执行4.能够对SELECT查询结果进行分组、排序及统计5.能够运用T-SQL语句对表进行数据的插入、修改、删除6.能够通过导入/导出向导进行数据的导入导出二、实验内容:利用实验四中的数据库做如下操作:1.在“学生表”中,找出性别为“男”的学生记录,字段包括“姓名”、“出生日期”和“专业”。

2.在“课程表”中,找出“课程名”中包含“计算机”三个字的课程。

3.在“成绩表”中,找出“课程编号”为“001”的课程成绩前三名学生。

4.在“成绩表”、“学生表”和“课程表”中,找出“课程编号”为“001”的课程成绩在[80,90]之间的学生的姓名、课程名和成绩。

5.在“学生表”中,找出“专业”为“计算机软件”、“电子商务”专业的学生信息。

6.统计“计算机应用基础”课程的平均分。

7.查找各门课程的修课人数。

8.在“成绩表”中,找出课程编号为“001”的这门课程的所有学生的分数以及最高分、最低分和平均分。

9.找出所有女生的“计算机应用基础”这门课的成绩,包括字段:姓名、课程名、成绩。

10.查找“成绩表”中,课程编号为“001”的成绩高于平均分的所有学生的学号、姓名、课程名和成绩。

11.查找“成绩表”中,高于各门课程平均分的学生信息。

12.查找“课程表”中,没有被学生修课的课程信息。

13.将“课程表”中的课程编号为“001”的学分增加1学分。

14.删除学号为“”学生的相关信息。

三、实验过程:启动“查询分析器”,在其文本窗口中输入相应的Transcat-SQL语句,分析并执行,观察输出结果。

1.Use 学生select 姓名,出生日期,专业 from 学生表 where 性别='男'2.use 学生select * from 课程表 where 课程名 like '%计算机%'3.use 学生select top 3 * from 成绩表 where 课程编号='001' order by 成绩 desc4.Use 学生select a.姓名,c.课程名,b.成绩 from 学生表 as a join 成绩表 as b on b.课程编号=001 and a.学号=b.学号 and b.成绩 between 80 and 90 join 课程表 as c on c.课程编号=b.课程编号5.use 学生select * from 学生表 where 专业 in ('计算机软件','电子商务')6.use 学生select avg(成绩)as 平均成绩 from 成绩表 as a join 课程表 as bon b.课程名='计算机应用基础' and b.课程编号=a.课程编号7.use 学生select 课程编号,count(学号)as 修课人数 from 成绩表 group by 课程编号8.use 学生select * from 成绩表 where 课程编号=001compute max(成绩),min(成绩),avg(成绩)9.use 学生select a.姓名,b.课程名,c.成绩 from 学生表 as a join 成绩表 as c on a.学号=c.学号 and a.性别='女'join 课程表 as bon b.课程编号=c.课程编号 and b.课程名='计算机应用基础'10.use 学生select a.学号,a.姓名,b.课程名,c.成绩 from 课程表 as b join 成绩表 as c on b.课程编号=c.课程编号 and c.课程编号=001 and c.成绩>(select avg(成绩) from 成绩表 where c.课程编号=001)join 学生表 as a on a.学号=c.学号11.use 学生select * from 成绩表 as a where 成绩>(select avg(成绩) from 成绩表 as b where a.课程编号=b.课程编号)12.use 学生select * from 课程表 where not exists(select * from 成绩表 where 成绩表.课程编号=课程表.课程编号)13.use 学生update 课程表 set 学分=学分+1 where 课程编号=00114.use 学生delete 成绩表 where 学号='20030101'。

sql查询题目及答案

sql查询题目及答案

sql查询题目及答案1、查询所有数学系学生的信息。

--select * from s where 系='数学系'2、查询李老师所教的课程号、课程名--select 课程号,课程名from c where 教师like '李%'3、查询年龄大于20岁的女同学的学号和姓名。

--select 学号,姓名from s where year(getdate())-year(出生日期)+1>20 and 性别='女'4、查询学号为‘H0301’所选修的全部课程成绩。

--select 成绩from sc where 学号= 'H0301'5、查询平均成绩都在80分以上的学生学号及平均成绩。

--select 学号,AVG(成绩) from sc group by 学号having AVG(成绩)>=806、查询至少有6人选修的课程号。

--select 课程号from sc group by 课程号having count(*)>67、查询C02号课程得最高分的学生的学号--select 学号from sc where 课程号='c02' and 成绩=(select max(成绩) from sc where 课程号='c02')8、查询学号为’J0101’的学生选修的课程号和课程名--select 课程号,课程名from c,sc where 学号='j0101' and c.课程号=sc.课程号9、‘李小波’所选修的全部课程名称。

--Select c.课程名from s,c,sc where s.学号=sc.学号and c.课程号=sc.课程号and 姓名='李小波'10、所有成绩都在70分以上的学生姓名及所在系。

--select 姓名,系from s,sc where s.学号=sc.学号group by 学号having min(成绩)>=7011、英语成绩比数学成绩好的学生--select sc2.学号from c c1,c c2,sc sc1,sc sc2 where c1.课程名='英语'--and c2.课程名='数学' and sc1.成绩>sc2.成绩and sc1.学号=sc2.学号--and c1.课程号=sc1.课程号and c2.课程号=sc2.课程号12、至少选修了两门课及以上的学生的姓名和性别select 姓名,性别from s,sc--where s.学号=sc.学号group by 学号having count(*)>=213、选修了李老师所讲课程的学生人数--select count(*) from C,sc where 教师like '李%' and c.课程号=sc.课程号group by sc.课程号14、‘操作系统’课程得最高分的学生的姓名、性别、所在系--select 姓名,性别,系from s,sc--where s.学号=sc.学号and 成绩=--(select max(成绩) from c,sc where sc.课程号=c.课程号and 课程名='操作系统')15、显示所有课程的选修情况。

sql查询举例(含答案)

sql查询举例(含答案)

查询练习一、简单查询(无条件查询):1、查询“学生档案”表中所有的记录SELECT * FORM 学生档案2、查询“学生档案”表中全体学生的姓名、学号、家庭地址SELECT 姓名, 学号, 家庭地址 FROM 学生档案二、有条件查询1、查询“成绩管理”表中语文成绩在80分以下的学生的学号。

SELECT 学号 FROM 成绩管理 WHERE 语文<802、查询“成绩管理”表中语文成绩在80分到90分之间的学生的学号,语文,数学,英语成绩。

SELECT 学号,语文,数学,英语FROM成绩管理WHERE 语文 >= 80 AND 语文<=90==(语文 BETWEEN 80 AND 90)3、查询“成绩管理”表中数学成绩不在75分到85分之间的学生的学号,语文,数学,英语成绩。

SELECT 学号,语文,数学,英语FROM 成绩管理WHERE 数学 NOT BETWEEN 75 AND 854、查询“学生档案”表中李成刚,刘艺梅,郑莉三名学生的信息。

SELECT *FROM 学生档案WHERE 姓名 IN (“李成刚”,“刘艺梅”,“郑莉”)==(姓名 =“李成刚” OR 姓名=“刘艺梅” OR 姓名=“郑莉”)5、查询“学生档案”表中所有姓张的学生的姓名、学号和性别SELECT 姓名,学号,性别 FROM学生档案WHERE 姓名 LIKE “张*”6、查询“学生档案”表中所有姓张且全名为三个汉字的学生的姓名SELECT 姓名FROM 学生档案WHERE姓名 LIKE “张??”7、查询“学生档案”表中第二个字符为“建”字的学生的学号和姓名SELECT 学号,姓名FROM 学生档案WHERE姓名 LIKE “?建*”8、查询“学生档案”表中家庭住址为“人民路”和“育才路”的学生学号,姓名,性别和家庭住址。

SELECT 学号,姓名,性别,家庭住址FROM 学生档案WHERE家庭住址 LIKE “人民路*” OR家庭住址 LIKE “育才路*”9、查询“学生档案”表中所有团员的学生班级和姓名。

SQL查询习题及答案

SQL查询习题及答案

36.设教学用的四个基本表(S,C,T,SC)(2)查询年龄大于23岁的女同学的学号和姓名select 姓名,学号from swhere 性别='女' and 年龄>23(3)查询至少选修了刘老师所讲授课程中的一门课程的女同学姓名select s.姓名from s,scwhere s.性别='女'and s.学号=sc.学号and sc.课程编号in(select c.课程编号from c,twhere c.教师编号=t.教师编号and t.姓名='刘%')(4)查询至少选修了2门课程的学生学号select sc.学号from scgroup by 学号having count(课程编号)>2(5)查询全部学生都选修的课程号与课程名select c.课程编号,c.课程名称from c,scwhere sc.课程编号=c.课程编号and sc.学号=(select distinct s.学号from s)(6)计算机系每个教师讲授的课程号select t.教师编号,课程编号from c,twhere t.所在系='计算机系(7)查询没有选修过任何一门课程的学生的学号select s.学号from swhere s.学号not in(select distinct sc.学号from sc)(10)统计个系教师的人数select count (教师编号)from tgroup by 所在系(11)统计出教师人数超过10人的系的名称select t.所在系from tgroup by 所在系having count(教师编号)>10(12)在选课表SC中查询成绩为NULL的学生的学号和课程号select 学号课程编号from scwhere 成绩='NULL'(13)姓王的同学的年龄、姓名、选课名称、成绩select 年龄,姓名,课程名称,成绩from s,c,scwhere s.学号=sc.学号and c.课程编号=sc.课程编号and s.姓名='王%'(14)查询年龄大于女同学平均年龄的男同学姓名和年龄select 姓名,年龄from swhere 性别='男' and 年龄>(select avg(年龄)from swhere 性别='女')37.在数据库{USER、ORDER}中,用户需要查询“所有于2009年5月25日下订单的女顾客姓名”。

sql查询举例(含答案)

sql查询举例(含答案)

sql查询举例(含答案)查询练习⼀、简单查询(⽆条件查询):1、查询“学⽣档案”表中所有的记录SELECT * FORM 学⽣档案2、查询“学⽣档案”表中全体学⽣的姓名、学号、家庭地址SELECT 姓名, 学号, 家庭地址 FROM 学⽣档案⼆、有条件查询1、查询“成绩管理”表中语⽂成绩在80分以下的学⽣的学号。

SELECT 学号 FROM 成绩管理 WHERE 语⽂<802、查询“成绩管理”表中语⽂成绩在80分到90分之间的学⽣的学号,语⽂,数学,英语成绩。

SELECT 学号,语⽂,数学,英语FROM成绩管理WHERE 语⽂ >= 80 AND 语⽂<=90==(语⽂ BETWEEN 80 AND 90)3、查询“成绩管理”表中数学成绩不在75分到85分之间的学⽣的学号,语⽂,数学,英语成绩。

SELECT 学号,语⽂,数学,英语FROM 成绩管理WHERE 数学 NOT BETWEEN 75 AND 854、查询“学⽣档案”表中李成刚,刘艺梅,郑莉三名学⽣的信息。

SELECT *FROM 学⽣档案WHERE 姓名 IN (“李成刚”,“刘艺梅”,“郑莉”)==(姓名 =“李成刚” OR 姓名=“刘艺梅” OR 姓名=“郑莉”)5、查询“学⽣档案”表中所有姓张的学⽣的姓名、学号和性别SELECT 姓名,学号,性别 FROM学⽣档案WHERE 姓名 LIKE “张*”6、查询“学⽣档案”表中所有姓张且全名为三个汉字的学⽣的姓名SELECT 姓名FROM 学⽣档案WHERE姓名 LIKE “张??”7、查询“学⽣档案”表中第⼆个字符为“建”字的学⽣的学号和姓名SELECT 学号,姓名FROM 学⽣档案WHERE姓名 LIKE “?建*”8、查询“学⽣档案”表中家庭住址为“⼈民路”和“育才路”的学⽣学号,姓名,性别和家庭住址。

SELECT 学号,姓名,性别,家庭住址FROM 学⽣档案WHERE家庭住址 LIKE “⼈民路*” OR家庭住址 LIKE “育才路*”9、查询“学⽣档案”表中所有团员的学⽣班级和姓名。

SQL数据库查询练习题及答案(四十五道题)

SQL数据库查询练习题及答案(四十五道题)

SQL数据库查询练习题及答案(四⼗五道题)题⽬:设有⼀数据库,包括四个表:学⽣表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。

四个表的结构分别如表1-1的表(⼀)~表(四)所⽰,数据如表1-2的表(⼀)~表(四)所⽰。

⽤SQL语句创建四个表并完成相关题⽬。

表1-1数据库的表结构表(⼀)Student (学⽣表)属性名数据类型可否为空含义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(成绩表)属性名数据类型可否为空含义Sno varchar (20)否学号(外码)Cno varchar (20)否课程号(外码)Degree Decimal(4,1)可成绩主码:表(四)Teacher(教师表)属性名数据类型可否为空含义Tno varchar (20)否教⼯编号(主码)Tname varchar (20)否教⼯姓名Tsex varchar (20)否教⼯性别Tbirthday datetime可教⼯出⽣年⽉Tbirthday datetime可教⼯出⽣年⽉Prof varchar (20)可职称Depart varchar (20)否教⼯所在部门表1-2数据库中的数据表(⼀)StudentSno Sname Ssex Sbirthday class 108曾华男1977-09-0195033 105匡明男1975-10-0295031 107王丽⼥1976-01-2395033 101李军男1976-02-2095033 109王芳⼥1975-02-1095031 103陆君男1974-06-0395031表(⼆)CourseCno Cname Tno3-105计算机导论8253-245操作系统8046-166数字电路8569-888⾼等数学831表(三)ScoreSno Cno Degree1033-245861053-245751093-245681033-105921053-105881093-105761013-105641073-105911073-105911083-105781016-166851076-166791086-16681表(四)TeacherTno 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列。

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

1实验目的1 .熟悉数据库的交互式SQL工具,2 . 熟悉通过SQL对数据库进行操作。

3 . 完成作业的上机练习。

2 实验工具sql server利用Sql server及其交互式查询工具-查询分析器来熟悉SQL。

3实验内容和要求1)实验内容:创建数据库boat,包括Sailors ,Boats,Reserves三个表,表结构如下:Sailors(sid: integer, sname: stri ng, rat ing: in teger, age:real)船员(船员编号,姓名,级别,年龄)Boats(bid: integer, bname: stri ng, color: stri ng)船(船编号,名称,颜色)Reserves(sid: integer, bid: integer, day: date) _____租赁(船员编号,船编号,日期)(注:下划线表示主键),并插入一定数据2 )完成下列要求:(1)查询所有船员的信息(2)查询所有姓王的船员的信息(3 )查询租用过103 号船的船员姓名(4)查找租用过船只的船员编号(5 )查找rating>7 且年龄>25 的水手编号(6)查找租用过红船和绿船的水手名字(7 )查找租用过红船或绿船的水手编号(8)查找最年长的水手的年龄和名字(9 )在18 岁以上水手中,对于每个rating 级别中最少有两个水手以上的组中最年轻水手的年龄(10 )查找每条红色船只被租用的次数(11 )把30 岁以上船员的级别调高一级(12 )删除所有年龄超过40 岁的船员信息(13 )建立年龄超过25 岁的船员的视图(14 )对(13 )建立的视图,举一操作的例子(查询、删除、修改均可)2)要求:a.建立boat 数据库的SQL 脚本,插入所有数据项的SQL 脚本(包括所有的测试数据)。

b.记录完成查询要求的SQL 语句脚本。

C •记录完成查询的查询结果。

《数据库系统概论》实验报告 题目:交互式SQL学号:日期:2012年4月29日 实验内容与完成情况:(一)实验所用数据(截图):Sailors 表協査 汕护“将莒腕.匹昱 咋业导-flocci ]上Boats 表El Lr it i HE aseg .刖亠慢划工杞舞帕仏刚压音飞一忌恃傩江丑妞羽 竽列李诸曹n 宇孙輻吕畫孚勾刘蘇掘野I®.卵亠才開瓦壬3O2325-I 1271 ]踊2B -3O Z 1羽Z7购白335U却曲筍533 1za 37Reserves 表(二)实验内容和要求1)实验内容:创建数据库boat,包括Sailors , Boats , Reserves三个表,表结构如下:Sailors(sid: integer, sname: stri ng, rati ng: in teger, age: real)船员(船员编号,姓名,级别,年龄)Boats(bid: integer, bname: stri ng, color: stri ng)船(船编号,名称,颜色)Reserves(sid: integer, bid: integer, day: date)租赁(船员编号,船编号,日期)(注:下划线表示主键),并插入一定数据。

2 )完成下列要求:(1 )查询所有船员的信息。

1. 正确结果:3. 执行结果:亮思皇东民IS鳩S1S鬻鬻黑Er空玉2.头现语句:select from Sailors241sid rating age4. 正确,无冋题 (2) 查询所有姓李的船员的信息 1. 正确结果: sid sn ame rat ing age 2李世民 2 20 4 李刚 4 25 13李刚5272. 实现语句:select *from Sailorswhere sn ame like ' 李 %'3执行结果:3 5 17 152 23 24 23 0 1872 3 2 2 2 8 331823 2 3 3 3 2 3 6 1872 3 2 31 2 34 6 48 2 452457245666 3 64 7] 12 23 34 a 55& ■?— ? S g 9~ 910 10 11 11 12 12 13^ 1314H - i5 16 ~W W TT 17 IS -1819 20 20 21 22^ Z1 22 23 23_ 24 24东民 _長 思 皇 平 空 玉 辜世宁刚頂操克工权理怖始刖讎备飞云小憎悟汉宝蛆羽 車李列李诸W 马宋孙紹吕寿李包刘张赵那屈孙末贾風关4.正确,无问题(3) 查询租用过6号船的船员姓名1. 正确结果:2. 实现语句:select disti net sn amefrom Sailors,Reserveswhere Sailors.sid=Reserves.sidand bid=63执行结果4.正确,无问题(4) 查找租用过船只的船员编号1.正确结果:2. 实现语句:select dist inct sidfrom Reserves3 •执行结果4.正确,无问题(5) 查找rating>7且年龄>25的水手编号from Sailorswhere rati ng>7 and age>25 3执行结果:4.正确,无问题(6) 查找租用过红船和白船的水手名字1.正确结果:sn ame张飞2.实现语句:select sidfrom Sailorswhere Sailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color=' 红' in tersect select sid from Sailors where Sailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color=' 白'3执行结果礬釦握常鄴臨蕊朦54.无法执行,改变实现语句【2 .实现语句:select snamefrom Sailors,Reserves,Boats whereSailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color=' 红'And sn ame in(select sn amefrom Sailors,Reserves,Boatswhere Sailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color=' 白')3. 执行结果:4. 正确。

】(7) 查找租用过红船或绿船的水手编号1.正确结果:2.实现语句:select dist inct sidfrom boats,Reserves where boats.bid=Reserves.bid andcolor='绿'or color='红'3,执行结果4.执行错误,改变实现语句:【2.实现语句:select distinct sidfrom boats,Reserveswhere boats.bid=Reserves.bid and(color=' 绿'or color=' 红');3. 执行结果:4. 正确。

】(8) 查找最年长的水手的年龄和名字1. 正确结果:2.实现语句:select sn ame,agefrom sailorswhere age>=all(select age from sailors)3执行结果4.正确,无问题(9 )在18岁以上水手中,对于每个rati ng级别中最少有两个水手以上的组中最年轻水手的年龄1. 正确结果:2. 实现语句:select rati ng,agefrom sailors xwhere age=(select min( age)from sailors ywhere age>20 andy.rati ng=x.rati ng group by rat ing hav ing count(sid)>1)3执行结果4.正确,无问题。

(10)查找每条红色船只被租用的次数1. 正确结果:2. 实现语句:select boats.bid,co un t(sid) from Reserves,boats whereboats.bid=Reserves.bid and color='红' group by boats.bid3执行结果4.注意bid前面需要加boats以加以明确(11 )把30岁以上船员的级别调高一级1.正确结果:1.正确结果:2. 实现语句: update sailorsset rati ng=rat in g+1where age>30 select * from sailors3执行结果:3L j5txixn.e rating19加232&3i2T .ll 262s 30212M 273s筋3L J03182茁"起71234B 4Q -245245B .25k J 75T 35 4D 左£3;f趕b 耳hi气匸£爭世宁刚萬幔歪工欖扯ffi 恰11哇空飞乞取憎冒工呈1fl 3l 毛于刁于暗劳T .T 刃韶吕毒季J 7.7J J.”l<.心巨丹.T 爲帆.'\2 2insq 4^~lo "7~~|7 s 8 9 9 10 1C 11 11 12 12 13 13 14 N 10lb 16 IE IT 17 18 IS 19 IE 20 2C 21 21 22 22鬥疋2440岁的船员信息(12 )删除所有年龄超过2.实现语句: sid 1 2 3 百51011 1213 snamc 毛拜京 李世貝列宁李刚李刚日勾践 市1刘备6789017-3 41 1 1 12 p ^- 7- 2 n r ^平七工玉飞云小憎嚅哲宝姐羽>越邓唐孙宋贾駁关delete from sailors ratir^ age 1勺 20 2327朋2230 21 2S6_ 28 I 381 oo 23 2 3sidbiddate1 i2011/1/1 n a 22011/VI23 32011/1/124 4 2011/1/135 5 2011/1/14f.6 3Q11/1A51 2011/l/l!>9 2 2011/1/1610 3 2011/1/1? 11 4 2011/1/17 12 11 2011/1/1 r 13 "1 Q -12011/1/17142014/1/IFIS2011/I A 816 2 2011/^1/18 17 g 2011/1/18 IS 2 2011/1/19 17 3 2011/1/19 15 s 3011/1/19Lo7 2011/1/19146 2011/1/20in A 7 2Q11/1/2L662011/1/21where age>40 delete from Reserveswhere sid in (select sid from sailors where age>40) select * from sailors select * from Reserves3执行结果:4.正确,无问题 (13)建立年龄超过25岁的船员的视图1.实现语句: create view is_sailorsas select sid,s name,rati ng,age from sailors where age>252.执行结果Id厂I 2 3 J6* E : 1110 L 2 1 3 1 4153d -5W U I 8-y -o4 L L I L L I E [ d 2 2 埶蚱■!■刚專橫rr 収邛州竝汕必晋飞二心 佶叱江空蛆羽 毛学>]$出善扌补貂E 臺卑勾川比狀邯麻孙耒董民\S O 35176-8-O 1 8 783101826147 I 2 23222^213 232323dlt = 201L-OJ-C1 2011-0]-12 2Q1L-01-12 1-01-13 2Q11-0J-K 2aH-El]-15 2011-01-15 SQil-01-lb 烈m 2011-01-17 3011-03-n 2011-01-11 2011-01-17 2011-01-1? 2011-0]-18 2011-01-10 3011-01-19 2011-03-1^ 2on-o]-rg 3011-01-20sid snane_______ r ating 亘IP 12 ' 03S495lCi612J 13E」14 g is10' 1711J 18 1F 19 n so82-2?182 53231421328 is22更宝玉£31 1523凤姐423[17~|24黄羽S37(14 )对(13 )建立的视图,举一操作的例子(查询、删除、修改均可)1. 实现语句:select *from is_sailorswhere rati ng>52. 执行结果:(三)出现的问题1 .数据写入的时候没有注意导致某些问题无法解决2.交运算无法执行。

相关文档
最新文档