SQL查询语句练习题27道

练习环境为:XP+SQL2000数据库练习使用的数据库为:学生管理数据库数据库下载地址为:http://download.csdn.net/download/friendan/4648150说明        这是我在学习数据库课时,老师给的27道SELECT语句练习题,在写这篇文章时,老师并没有给参考答案,写这篇文章的目的完全是为了加深我对SQL语句的理解和方便我以后

大家好,又见面了,我是你们的朋友全栈君。

练习环境为:XP+SQL2000数据库

练习使用的数据库为:学生管理数据库

数据库下载地址为: http://download.csdn.net/download/friendan/4648150

说明

         这是我在学习数据库课时,老师给的27道SELECT语句练习题,在写这篇文章时,老师并没有给参考答案,

写这篇文章的目的完全是为了加深我对SQL语句的理解和方便我以后复习、查阅,

文中难免有错误之处,发现的朋友,望指正一二,感激不尽。

数据库中有三张表,分别为student,course,SC(即学生表,课程表,选课表)

//三张表截图如下:

SQL查询语句练习题27道

SQL查询语句练习题27道

SQL查询语句练习题27道

–1.分别查询学生表和学生修课表中的全部数据。
SELECT * FROM student–查询学生表
SELECT * FROM course–查询课程表

–2.查询成绩在70到80分之间的学生的学号、课程号和成绩。
SELECT Sno 学号,Cno 课程号,Grade 成绩
FROM SC
WHERE Grade BETWEEN 70 AND 80

–3.查询C01号课程成绩最高的分数
SELECT TOP 1 Grade
FROM SC
WHERE Cno=’C01′
ORDER BY Grade DESC–降序DESC,升序ASC

–4.查询学生都选修了哪些课程,要求列出课程号。
SELECT Cname AS 学生选修的课程,Cno AS 课程号
FROM course
WHERE Cno IN(SELECT DISTINCT Cno FROM SC)–DISTINCT用来去除重复

–5.查询Northwind数据库中orders表的OrderID、CustomerID和OrderDate,
–并将最新的定购日期(OrderDate)列在前边。
USE Northwind
GO
SELECT OrderID,CustomerID,OrderDate
FROM orders
ORDER BY OrderDate DESC–降序DESC,升序ASC

–6.查询Northwind数据库中orders表的ShipCountry列以B,C,D,F –//ShipCountry BCDF
–开始且第三个字符为”a”的OrderID、CustomerID和ShipCountry的信息。//OrderID、CustomerID第三个字符为”a”
USE Northwind
GO
SELECT OrderID,CustomerID,ShipCountry FROM orders
WHERE ShipCountry LIKE ‘[BCDF]_a%’–_下划线表示任意一个字符,%表示一个或多个字符

–7.查询Northwind数据库中orders表的ShipCountry列不以A,B,C,D,E,F开始且最后一个字
–母是”a”的OrderID、CustomerID和ShipCountry的信息。
USE Northwind
GO
SELECT OrderID,CustomerID,ShipCountry
FROM orders
WHERE ShipCountry LIKE ‘[^ABCDEF]%a’

–8.查询修了C02号课程的所有学生的平均成绩、最高成绩和最低成绩。
SELECT AVG(Grade) 平均成绩,MAX(Grade) 最高成绩,MIN(Grade) 最低成绩
FROM SC
WHERE Cno=’C02′

–9.统计每个系的学生人数。
SELECT Sdept 系别,COUNT(*) 人数
FROM student
WHERE Sdept IN(SELECT DISTINCT Sdept FROM student)
GROUP BY Sdept

–10.统计每门课程的修课人数和考试最高分。
SELECT Cname 课程名,COUNT(*) 修课人数,MAX(Grade) 考试最高分
FROM SC,course
WHERE SC.Cno IN(SELECT DISTINCT Cno FROM SC ) AND course.Cno=SC.Cno
GROUP BY course.Cname

–11.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。
SELECT student.Sname 学生姓名,student.Sno 学生学号,COUNT(SC.Sno) 选课门数
FROM student
inner join SC ON SC.Sno=student.Sno
GROUP BY student.Sname,student.Sno
ORDER BY COUNT(SC.Sno) ASC

–12.统计选修课的学生总数和考试的平均成绩。
SELECT COUNT(DISTINCT(Sno)) AS 学生总数,AVG(Grade) AS 平均成绩
FROM SC  –//用DISTINCT消除重复的行

–13.查询选课门数超过2门的学生的平均成绩和选课门数。
SELECT Student.Sname,AVG(Sc.Grade) 平均成绩,COUNT(SC.Sno) 选课门数
FROM SC
–内联接join或inner join,内联系是比较运算符,只返回符合条件的行
    JOIN Student ON (SC.Sno = Student.Sno)
    JOIN Course ON (SC.Cno = Course.Cno)
GROUP BY Student.Sname
HAVING COUNT(distinct Course.Cno) >2–分组条件

–14.列出总成绩超过200分的学生,要求列出学号、总成绩。
SELECT Sno 学号,SUM(Grade) 总成绩
FROM SC
GROUP BY Sno
HAVING SUM(Grade)>200

–15.查询pubs数据库的titles表中每类图书的平均价格超过12.0元的书的类型(Type)、
–平均价格和最高价格。
USE pubs
GO
SELECT Type AS 书的类型,AVG(price) AS 平均价格,MAX(price) AS 最高价格
FROM titles
GROUP BY Type
HAVING AVG(price)>12.0

–16.查询pubs数据库的titles表中每类图书中图书的数目超过3本的图书的总价格。
USE pubs
GO
SELECT 图书类型=Type,图书的数目=count(Type),图书的总价格=SUM(price)
FROM titles
GROUP BY Type
HAVING count(Type)>3

–17.查询选修了c02号课程的学生的姓名和所在系。
SELECT Sname 学生姓名,Sdept 所在系,SC.Cno AS 选修课程
FROM student
inner join SC ON student.Sno=SC.Sno
WHERE SC.Cno=’C02′

–18.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。
SELECT Sname 学生姓名,SC.Cno 课程号,SC.Grade 成绩
FROM student
inner join SC ON student.Sno=SC.Sno–内连接表SC查询
WHERE SC.Grade>80
ORDER BY SC.Grade DESC

–19.查询计算机系男生修了”数据库基础”的学生的姓名、性别、成绩。
SELECT Sname 姓名,Ssex 性别,SC.Grade 成绩
FROM student
inner join SC ON Cno IN(SELECT Cno FROM course WHERE Cname=’数据库基础’) –显示成绩的条件
AND student.Sno=SC.Sno –显示成绩的学生的学号
WHERE Sdept=’计算机系’ AND Ssex=’男’

–20.查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。
–这题使用到了表的自连接,所以需要给表取两个别名,如A和B
SELECT A.Sname 年龄相同的学生的姓名,A.Sage 年龄
FROM student A
inner join student B ON A.Sage IN(SELECT Sage FROM student WHERE A.Sage=B.Sage AND A.Sname!=B.Sname)
GROUP BY A.Sname,A.Sage
ORDER BY A.Sage

–21.查询哪些课程没有人选,要求列出课程号和课程名。
SELECT Cno AS 课程号,Cname AS 课程名
FROM course
WHERE Cno NOT IN(SELECT DISTINCT SC.Cno FROM SC)

–22.查询有考试成绩的所有学生的姓名、修课名称及考试成绩
–要求将查询结果放在一张新的永久表(假设新表名为new-sc)中。
SELECT student.Sname AS 有考试成绩的学生的姓名,course.Cname AS 修课名称,SC.Grade AS 考试成绩
INTO [new_sc] –将查询结果放入新表new_sc中
FROM student,course,SC
WHERE SC.Grade IS NOT NULL AND student.Sno=SC.Sno AND course.Cno=SC.Cno

–23.分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩,
–并要求将这两个查询结果合并成一个结果集,
–并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。
–//此题用到了并union查询
SELECT Sdept 系名,Sname 姓名,Ssex 性别,course.Cname 修课名称,SC.Grade 修课成绩
FROM student
inner join SC     ON student.Sno=SC.Sno
inner join course ON course.Cno=SC.Cno
WHERE Sdept=’信息系’
UNION
SELECT Sdept 系名,Sname 姓名,Ssex 性别,course.Cname 修课名称,SC.Grade 修课成绩
FROM student
inner join SC     ON student.Sno=SC.Sno
inner join course ON course.Cno=SC.Cno
WHERE Sdept=’计算机系’

select sdept, sname,ssex,cname,grade from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and (sdept=’信息系’ or sdept=’计算机系’)
SQL查询语句练习题27道

–24.用子查询实现如下查询:
–(1)    查询选修了C01号课程的学生的姓名和所在系。
SELECT Sname AS 选修了C01号课程的学生的姓名,Sdept AS 所在系
FROM student
WHERE Sno IN(SELECT Sno FROM SC WHERE Cno=’C01′)

–(2)    查询数学系成绩80分以上的学生的学号、姓名。
SELECT Sno AS 数学系成绩80分以上的学生的学号,Sname AS 姓名
FROM student
WHERE Sno IN(SELECT Sno FROM SC WHERE Grade>80)
AND   Sno IN(SELECT Sno FROM student WHERE Sdept=’数学系’)

–(3)    查询计算机系学生所选的课程名.
SELECT Cname AS 计算机系学生所选的课程名
FROM course
WHERE
course.Cno IN(SELECT DISTINCT Cno FROM SC WHERE SC.Sno IN(SELECT Sno FROM student WHERE Sdept=’计算机系’))

–25.将计算机系成绩高于80分的学生的修课情况插入到另一张表中,分两种情况实现://?????/
–(1)    在插入数据过程中建表。
–使用SELECT INTO插入数据的方法,是在插入数据的过程中建立新表
SELECT student.Sname AS 学生名字,course.Cname AS 选修课程,SC.Cno AS 课程编号
INTO [SC_Info1]–将计算机系成绩高于80分的学生的修课情况插入到表SC_Info1中
FROM student,course,SC
WHERE student.Sdept=’计算机系’ AND SC.Grade>80 AND course.Cno=SC.Cno AND student.Sno=SC.Sno

–(2)    先建一个新表,然后再插入数据。
–创建表SC_Info2
CREATE TABLE SC_Info2
(
    Sname char(7),
    Cname char(20),
    Cno   char(10)
)

–往表SC_info2插入查询得到的结果
INSERT SC_Info2
SELECT student.Sname AS 学生名字,course.Cname AS 选修课程,SC.Cno AS 课程编号
FROM student,course,SC
WHERE student.Sdept=’计算机系’ AND SC.Grade>80 AND course.Cno=SC.Cno AND student.Sno=SC.Sno

–26.删除修课成绩小于50分的学生的修课记录
DELETE SC WHERE Grade<50 OR Grade IS NULL

–27.将所有选修了”c01″课程的学生的成绩加10分。
UPDATE SC
SET Grade=Grade+10
WHERE Cno=’C01′

SQL查询语句练习题27道

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127045.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 华为ensp安装步骤_网购200多的平板电脑靠谱吗

    华为ensp安装步骤_网购200多的平板电脑靠谱吗华为ENSP安装教程有需要的请点击这个连接下载自行下载:https://pan.baidu.com/s/1ORprW88r5RBKfHFmEzimow?pwd=0118提取码:0118下载好了可以看到以下这四个程序:软件安装顺序:WinPcap、Wireshark、VirtualBox、eNSP前三个建议均采用默认安装路径安装特别提示:不准出现中文路径,如果可以四个都默认安装路径的话,那最好!注………..

    2022年10月15日
  • 安防监控必备的基础知识「建议收藏」

    安防监控必备的基础知识「建议收藏」安防监控必备的基础知识 什么是云镜控制解码器?答:解码器是将前端发出的控制信号转换为电压信号从而控制云台、镜头的的装置。什么是同轴电缆?答:同轴电缆(COARIALCABLE)的得名与它的结构相关。同轴电缆也是监控中最常见的传输介质之一。它用来传递信息的一对导体是按照一层圆筒式的外导体套在内导体(一根细芯)外面,两个导体间用绝缘材料互相隔离的结构制选的,外层导体和中心轴芯线的…

  • silverlight:telerik RadControls for Silverlight 主题使用心得

    silverlight:telerik RadControls for Silverlight 主题使用心得默认情况下:telerikRadControls控件使用的是OfficeBlack主题,就算在App.xaml.cs里写上StyleManager.ApplicationTheme=newWindows7Theme();  在blend中,看到的仍然是OfficeBlack主题,如果想在设计期就看到某种主题风格,有一个简单的办法:找到telerikradc…

  • 寻找最长回文子串

    寻找最长回文子串最长回文子串的问题描述:给出一个字符串S,求S的最长回文子串的长度。样例:字符串”PATZJUJZTACCBCC”的最长回文子串为“ATZJUJZTA”,长度为9。先看暴力解法:枚举子串的两个端点i和j,判断在i,区间内的子串是否回文。从复杂度上来看,枚举端点需要O(n2),判断回文需要O(n),因此总复杂度是O(n3)。介绍动态规划的方法,使用动态规划可以达到…

  • 台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线

    台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线2017-03-1121:36:28电脑直接拨号上网(有宽带账号和密码)或者自动获取IP(有帐号没密码)上方式设置见图2016-12-1013:29:30右击网上邻居,点属性,创建一个新的连接,按照下一步下一步的步骤就可以了,然后成功之后输入你的宽带号码和密码就可以了,如果你使用的是ASDL拨号的,你可以下一个宽带我世界,电信的话你…2016-12-2917:28:19方法如下1、第一,…

  • 数据绑定之DataFormatString

    数据绑定之DataFormatString设定BoundField的DataFormatString,通常有以下几种DataFormatString='{0:C}’货币,货币的格式取决于当前Thread中Culture的设置DataF

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号