jjzjj

数据库SQL Server实验报告 之 SQL语言进行简单查询(3/8)

君无戏言。 2025-02-18 原文

实验名称          SQL语言进行简单查询

注意:原版word在下载资源里面(免费下载)

实验目的及要求:

  1. 掌握各种查询的SQL脚本写法,包括SELECT、FROM、WHERE、GROUP BY、HAVING子句的用法,特别要求比较内连接、外连接的结果
  2. 在XSGL数据库中,使用各种查询条件完成指定的查询操作。

实验内容及步骤:

注:所有程序第一行均在XSGL数据库中进行,即每次运行程序第一行均为use XSGL

  1. 查询选修了课程的学生人数。

select count(distinct sno) 学生人数--distinct表示去掉重复行

from sc

  1. 查询学生200515001选修课程的总学分数。

select sum(credit)

from course,sc

where sno = '200515001'

and sc.cno = course.cno and grade>=60; --成绩超过60才有学分,并连接两个表

  1. 查所有有成绩的学生学号和课程号。

select sno,cno

from sc

where grade is not null; --排除空值

  1. 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。

select sname,sdept,sage

from student

where sage>=20and sage<=23; --范围条件语句  也可以用betweenand

  1. 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

select sno,grade

from sc

where cno=3

order by grade desc;--降序排列;

  1. 求哪些学生还没有被分配系?

select *--查询所有表的所有信息

from student

where sdept=' 'or sdept is null;--sdept 为空或者为空格

  1. 求CS系中所有男同学的学生姓名和年龄。

select sname,sage

from student

where ssex='男'and sdept='CS';

  1. 我校开设的课程中哪些课程名以“数据”两个字开头?

select cname

from course--like语句表示求相似的,

where cname like '数据%';--数据%表示以数据开头,后面0到无穷多个字符

  1. 求哪些学生的姓名中第2个字是“立”?

select sname

from student

where sname like '_向%';--_表示一个字符

  1. 求哪些学生的成绩为优秀,求出该学生的学号及相应的课程号。

select sno,cno

from sc

where grade>90;--以90分以上为优秀

  1. 求既不是CS系,也不是MA系的学生中年龄不小于20的学生姓名。

select sname

from student

where (sdept<>'cs'and sdept<>'ma')and sage>=20;--注意优先级,最好加括号

  1. 求CS系中男女学生的数量分别是多少?

select ssex,count(ssex) 人数--也可以用*代替ssex

from student

where sdept='cs'

group by ssex--分别输出男女需要分组

  1. 求各系中每个年龄段的学生总人数,要求结果中对系进行排序,同一个系的按年龄排序。

select count(sno) 人数,sdept,sage

from student

group by sdept,sagegroup by 语句后面的词数与 select后单个词数一致

order by sdept desc,sage ;--降序为desc 升序为asc可省略

  1. 查询各系的学生的人数并按人数从多到少排序 

select count(sno) 人数,sdept

from student

group by sdept

order by count(sno) desc;--降序为desc 升序为asc可省略

  1. 查询各系的男女生学生总数, 并按系别升序排列, 女生排在前

select sdept,ssex,count(sno) 人数

from student

group by sdept,ssex

order by sdept,ssex desc;--女生在前,按照第二字母顺序降序为desc

  1. 查询选修了3门课程已上的学生的学号和姓名

select student.sno,sname--必须加上student.或者sc.因为两个表都有sno

from sc,student

where student.sno=sc.sno--连接两个表

group by student.sno,sname

having count(*)>3--分组后显示选了三门以上的,而不是直接显示整个表三门以上的

  1. 查询每个学生所选课程的平均成绩, 最高分, 最低分和选课门数

select sno,avg(grade) 平均分,max(grade) 最高分,

min(grade) 最低分,count(cno) 选课门数

from sc

group by sno

  1. 查询至少选修了2门课程的学生的平均成绩.

select sno,avg(grade) 平均分

from sc

group by sno--查询的是选修至少两门的每个学生,然后计算每个学生的课程的信息,则对学生分组,每一个学生为一组

having  count(cno)>=2; --having后面可以使用聚合函数。聚合函数就是对一组值进行计算并且返回单一值的函数:sum---求和,count---计数,max---最大值,avg---平均值等。所以不用where。

  1. 查询平均分超过80分的学生的学号和平均分.

select sno,avg(grade) 平均分

from sc

group by sno

having  avg(grade)>=80;

比较: 求各学生的60分以上课程的平均分.

select sno,avg(grade) 平均分

from sc

where grade>60

group by sno--having既然是对查出来的结果进行过滤,那么就不能对没有查出来的值使用having。

  1. 查询”信息系”(IS)中选修了2门课程以上的学生的学号.

select student.sno

from sc,student

where sdept='is'and student.sno=sc.sno--一定要记得连接两个表

group by student.sno

having count(cno)>2;

  1. 打印李勇的成绩单(即求李勇所选修的课程名及其成绩)。

select cname,grade

from sc,student,course--需要连接三个表

where course.cno=sc.cno

and student.sno=sc.sno and sname='李勇 ';

  1. 求不及格和缺考的学生所在系、学号、姓名及相应课程名,要求按系排序,同一个系的按学号排序。

select sdept,student.sno,sname,cname

from student,course,sc

--sno是student表的主码,cno是course表的主码,需要用主码与sc表中的外码连接

where student.sno=sc.sno

and course.cno=sc.cno

and (grade<60 or grade is null)

--不用and因为成绩小于六十与成绩为空不能同时发生

--有or出现注意通过题目判断是否加括号

order by sdept ,student.sno--先按系排序,则系别在前面

  1. 求CS系不及格和缺考的学生学号、姓名及相应课程名,要求按学号排序。

select student.sno,sname,cname

from student,course,sc

where student.sno=sc.sno

and course.cno=sc.cno

and (grade<60 or grade is null)

and sdept='cs'

order by student.sno

  1. 求既不是CS系,也不是MA系缺考学生的学号、姓名及相应课程名。

select student.sno,sname,cname

from student, course, sc

where student.sno=sc.sno and course.cno=sc.cno

and grade is null

and sdept not in('cs','ma')--与sdept<>'cs'and sdept<>'ma'一致

  1. 求选修BD课程的学生平均成绩。

select avg(grade)

from course,sc

where course.cno=sc.cno and cname='DB'

  1. 求每一门课程的学生平均成绩,要求输出课程名及对应的平均成绩,并按平均成绩由大到小排序。

select cname, avg(grade) --成绩在sc表,课程名在course表

from course, sc

where course.cno=sc.cno

group by cname--求每一门课程,所以分组

order by avg(grade) desc--从大到小即为倒序

  1. 求李勇所选修的总学分(即成绩及格的课程学分总和)。

select sum(credit) 总学分

from student,course,sc--成绩在sc表,学分在course表,李勇在student表

where student.sno=sc.sno and course.cno=sc.cno

and sname='李勇' and grade>=60

有关数据库SQL Server实验报告 之 SQL语言进行简单查询(3/8)的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  5. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  8. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

随机推荐