数据库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)。

sql,经典数据库题型附答案

sql,经典数据库题型附答案

sql,经典数据库题型附答案1.某电视购物公司采用面向对象技术实现商品销售计算机系统,基本需求如下:(1)公司提供多种类商品,每种商品通过委托订单来进行征订。

(2)公司下属多个分公司,每个分公司负责本地区委托订单的收录,打印收款凭证单。

(3)公司负责分类、统计各分公司送来的委托单,进行分类统计。

要求:按照上述模型建立对象模型。

(11分)2.有两个表表一AA种类T 库存总量SA 997B 1234表二BB种类T 出库数量SA 105A 213B 116B 211B 303用一条SQL语句求出A,B各剩下多少?答:select distinct AA.T kind ,AA.S-(select sum(BB.S) sumnum from BB group by T having AA.T=BB.T) stock from AA,BB where AA.T=BB.T3.一个订单表Orders中有包含日期字段,OrderDate,同一天的订单可能有多笔记录,把所有有订单的日期查出来,并按日期显示当日共有多少笔订单。

答:SELECT OrderDateCOUNT(*)FROM Orders4.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

答:select(case when A > B then A else B end) as E,(case when B > C then B else C end) as FfromtestTb5.有如下数据:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2005-05-10 负如果要生成如下结果,该如何写SQL语句?胜负2005-05-09 2 22005-05-10 1 2reate table #tmp(rqvarchar(10),shengfunchar(1))insert into #tmp values('2005-05-09','胜')insert into #tmp values('2005-05-09','胜')insert into #tmp values('2005-05-09','负')insert into #tmp values('2005-05-09','负')insert into #tmp values('2005-05-10','胜')insert into #tmp values('2005-05-10','负')insert into #tmp values('2005-05-10','负')select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq6.有三个表Tables,定义如下:TableA:code value01 3.302 2.3TableB:code value02 4.303 6.3TableC:code name01 xxx102 xxx203 xxx3要求:设计一个SQL查询语句,得到下列结果:result:code name value01 xxx1 3.302 xxx2 2.302 xxx2 4.303 xxx3 6.3答::select * from a union (select * from b union select * from c)7.请指出下面哪种实现方法的执行效率高,为什么(1)for(i=0;i<n;i++)< p="">{if(condition)DoSomething();elseDoSomething();}(2)if(conditon){for(i=0;i<n;i++)< p="">DoSomething();}else{for(i=0;i<n;i++)< p="">DoSomething();}答:理由:2效率高,1中把逻辑判断放在循环以内,打断了循环的流水线作业,编译器不能对循环做优化处理,降低了效率(理由:循环的时候没有中断,循环次数有差别,1每次循环都要判断。

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查询语句习题含答案

查询问题:设教学数据库Education有三个关系:学生关系S(SNO,SNAME,AGE,SEX,SDEPT);学习关系SC(SNO,CNO,GRADE);课程关系C(CNO,CNAME,CDEPT,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的学生学号与姓名;(3)检索选修课程名为“DS”的学生学号与姓名本查询涉及到学号、姓名和课程名三个属性,分别存放在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=‘C4’;(5)检索至少选修课程号为C2和C4的学生学号;SELECT SnoFROM SC X,SC YWHERE X.Sno=Y.Sno AND o=‘C2’ AND o=‘C4’;(6)检索不学C2课的学生姓名和年龄;(7)检索学习全部课程的学生姓名;在表S中找学生,要求这个学生学了全部课程。

  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: string, rating: integer, age: real)船员(船员编号,姓名,级别,年龄)Boats(bid: integer, bname: string, color: string) 船(船编号,名称,颜色)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表Boats表Reserves表(二)实验内容和要求1)实验内容:创建数据库boat,包括Sailors,Boats,Reserves三个表,表结构如下:Sailors(sid: integer, sname: string, rating: integer, age: real) 船员(船员编号,姓名,级别,年龄)Boats(bid: integer, bname: string, color: string)船(船编号,名称,颜色)Reserves(sid: integer, bid: integer, day: date)租赁(船员编号,船编号,日期)(注:下划线表示主键),并插入一定数据。

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

1.正确结果:2.实现语句:select * from Sailors3.执行结果:4.正确,无问题(2)查询所有姓李的船员的信息1.正确结果:sid sname rating age2 李世民 2 204 李刚 4 2513 李刚 5 272.实现语句:select *from Sailorswhere sname like '李%'3执行结果:4.正确,无问题(3)查询租用过6号船的船员姓名1.正确结果:sname曹操勾践2.实现语句:select distinct snamefrom Sailors,Reserveswhere Sailors.sid=Reserves.sidand bid=63执行结果4.正确,无问题(4)查找租用过船只的船员编号1.sid1234567891011121314151617182.实现语句:select distinct sidfrom Reserves3.执行结果4.正确,无问题(5)查找rating>7且年龄>25的水手编号1.正确结果:sid72.实现语句:select sidfrom Sailorswhere rating>7 and age>25 3执行结果:4.正确,无问题(6)查找租用过红船和白船的水手名字1.sname张飞2.实现语句:select sidfrom Sailorswhere Sailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color='红'intersectselect sidfrom Sailorswhere Sailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color='白' 3执行结果4.无法执行,改变实现语句【2.实现语句:select snamefrom Sailors,Reserves,Boatswhere Sailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color='红'And sname in(select snamefrom Sailors,Reserves,Boatswhere Sailors.sid=Reserves.sid andBoats.bid=Reserves.bid and color='白') 3.执行结果:4.正确。

】(7)查找租用过红船或绿船的水手编号1.sid1368101716142.实现语句:select distinct sidfrom boats,Reserveswhere 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.Sname Age马克思412.实现语句:select sname,agefrom sailorswhere age>=all(select age from sailors) 3执行结果4.正确,无问题(9)在18岁以上水手中,对于每个rating级别中最少有两个水手以上的组中最年轻水手的年龄1.正确结果:Rating Age2 203 234 255 276 317 372.实现语句:select rating,agefrom sailors xwhere age=(select min(age)from sailors ywhere age>20 andy.rating=x.ratinggroup by ratinghaving count(sid)>1)3执行结果4.正确,无问题。

(10)查找每条红色船只被租用的次数1.bid count1 28 12.from Reserves,boatswhere boats.bid=Reserves.bidand color='红'group by boats.bid3执行结果4.注意bid前面需要加boats以加以明确。

(11)把30岁以上船员的级别调高一级1.正确结果:2.实现语句:update sailorsset rating=rating+1where age>30 select * from sailors 3执行结果:1.正确结果:2.实现语句:deletefrom sailorswhere age>40deletefrom Reserveswhere sid in(select sid from sailors where age>40)select * from sailors select * from Reserves 3执行结果:4.正确,无问题。

1.实现语句:create view is_sailorsasselect sid,sname,rating,agefrom sailorswhere age>252.执行结果(14)对(13)建立的视图,举一操作的例子(查询、删除、修改均可)1.实现语句:select *from is_sailorswhere rating>52.执行结果:(三)出现的问题1.数据写入的时候没有注意导致某些问题无法解决。

2.交运算无法执行。

3.and与or的运算顺序搞错。

4.出现指代不明的情况。

(四)解决的问题1.修改数据2.查阅电脑,问题为:3.如果想先算or带括号,如题(7)。

4.带上其所属的表,如有连接的话,select后面应该加sailors.bid而不是只有bid。

(五)未解决的问题1.修改一旦执行就不能返回了么?2.另:由于数据输入的原因,为使结果更据代表性,某些题目可能做了修改,但不改变题目考察意图。

相关文档
最新文档