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

相关推荐

  • 集合转成数组的方法_数组转化为集合

    集合转成数组的方法_数组转化为集合1.转换方法1.遍历的方式,依次添加到集合中。2.Arrays.asList()方法3.List.of()方法4.Collections.addAll(集合,数组)方法,将集合存储到数组中1.1遍历的方式这种方式转换成的集合,集合长度可变,可以后续向集合添加数据int[]i={1,5,8,7,11,52};//1.遍历的方式Listlist=newArrayList();for(intx:i){

  • kafka集群搭建&zookeeper集群搭建

    kafka集群搭建&zookeeper集群搭建1.安装准备jdk-8u162-linux-x64.tarzookeeper-3.4.12.tar.gzkafka_2.11-2.0.0.tgz2.准备至少三台虚拟机192.168.196.128192.168.196.131192.168.196.1323.Java环境安装(略…自行百度)4.搭建zookeeper集群在每台主机下执行以下步骤:移动至/usr/local下:mvzookeeper-3.4.12.tar.gz/usr/local解压,重命名:tar-z

  • 蓝奏软件库合集[通俗易懂]

    蓝奏软件库合集[通俗易懂]蓝奏软件库合集文章标签游戏……

  • 分子模拟软件amber_分子模拟周刊: 第 23 期

    分子模拟软件amber_分子模拟周刊: 第 23 期■2020-06-1221:34:10每周杂记:谢谢记得父亲突然联系我,说,我初中的班主任让我发一张照片,同时写一段自我介绍用来给他们现在的学生做榜样.这让我大感意外.这些老师都已经近30年未见过面了,竟还记得我?再说,以我现在这样的境况,用来给人做榜样是不是有点难堪?其实这个老师并不是我初中时候的班主任,是我的语文老师.他人长得很高大,声音洪亮,性格粗线条…

  • SQLserver基础语句大全[通俗易懂]

    SQLserver基础语句大全[通俗易懂]SQL基础结构化查询语言(StructuredQueryLanguage)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQLDML和DDL可以把SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL)。SQL(结构化查询语言)是用于执行…

  • linux下的C语言开发

    在很多人的眼里,C语言和linux常常是分不开的。这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品。当然,linux操作系统本身对C语言的支持也是相当到位的。作为一个真正

    2021年12月27日

发表回复

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

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