SQL SERVER专题实验4 复杂查询

这篇具有很好参考价值的文章主要介绍了SQL SERVER专题实验4 复杂查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第1关:基本知识

任务描述

本关任务:根据复杂查询相关知识介绍,完成相关选择题。

知识要求

为了完成本关任务,你需要掌握:

  1. 基于多个表或视图的SELECT语法结构;
  2. 包括自然连接、普通连接、自身连接在内的各种连接查询使用场景及语法要点;
  3. 包括左外连接、右外连接和全外连接的外连接查询使用场景及语法要点;
  4. 包括相关子查询和不相关子查询的嵌套查询使用场景及语法要点;
  5. 包括并集、交集和差集的集合查询使用场景及语法要点。
  6. 基于派生表的查询。

知识链接

关于SELECT语句在复杂查询中的使用场景、语法要点等相关内容和分类示例请参看:4-1 实验导引

测试说明

本关主要介绍的是概念性知识,因此测试以选择题的形式对本关介绍的知识进行测试。

开始你的任务吧,祝你成功!

1、关于自身连接,下面说法正确的有:(ABC)

A、自身连接的表必须取别名

B、自身连接的目标列表达式必须带上表的别名

C、自身连接往往用于查询同一个表中不同属性之间满足某种比较条件的结果

D、自身连接也可以使用相同属性值的比较条件的作为连接条件

2、关于自然连接,下面说法正确的有:(ABC)

A、自然连接可以理解为是主外码值相等且目标列表达式去掉外码保留主码的连接

B、两个表即便没有参照完整性也可以有自然连接

C、自然连接的两个表中必然要有两组相同的属性名及其数据类型和宽度

D、自然连接就是自身连接

3、关于嵌套查询,下面说法正确的有:(ABCD)

A嵌套查询就是查询的条件表达式中含有查询块的查询

B、不相关子查询的执行顺序从层查询开始逐级向上一层查询推进,查询的结果放在上一层查询的条件表达式的常量部分

C、相关子查询一定有WHERE子句,而且都会带有父查询的某个属性作为条件表达式中常量部分的内容

D、某些嵌套子查询也可以用连接查询来实现

4、关于集合查询,下面说法正确的有:(ABCD)

A、集合查询就是把表的查询操作当集合操作理解的查询

B、集合查询要求参与运算的子查询的目标列表达式必须个数相同且能按对应顺序进行比较

C、有些集合查询也可以用嵌套查询或连接查询替代

D、集合查询的查询表目标列表达式为第一个子查询的目标列表达式

5、关于基于派生表的查询,下面说法正确的有:(ABD)

A、派生表就是子查询放到WHERE语句中作为查询对象的查询表

B、派生表在SELECT语句中必须使用别名

C、派生表的目标列表达式必须也使用别名

D、派生表的目标列表达式只有在含有聚集函数、计算表达式等情况下才必须使用别名

第2关:连接查询(含普通连接、自然连接和外连接)

SET NOCOUNT ON
GO
USE JX
GO
----------------------BEGIN-------------------
--*****1、查询选修了‘3’号课程且成绩在70分以上的学生信息*****
select  Student.*
from  Student,SC
where Student.Sno=SC.Sno and Cno='3' and Grade>70
--*****2、查询选修了‘3’课程的学生姓名,成绩及任课教师姓名*****
select Sname,Grade,Tname
from Student,SC,Teacher
where Student.Sno=SC.Sno and Teacher.Tno=SC.Tno and Cno= '3'
--*****3、列出所有参加了"操作系统"课程考试的学生姓名和成绩*****
select Sname,Grade
from Student,SC,Course
where Student.Sno= SC.Sno AND SC.Cno=Course.Cno and Cname='操作系统'
--*****4、查询已开出课程中选课人数不足4人的课程号及人数信息*****
select Cno 课程号,count(*) 选课人数
from Student,SC
where Student.Sno=SC.Sno  
GROUP BY SC.Cno HAVING count(*)<4
--*****5、查询有间接先修课的课程信息,以‘课程名’、‘间接先修课名’作列名*****
select a.Cname 课程名,c.Cname 间接先修课名
from Course a,Course b,Course c
where a.Cpno = b.Cno and b.Cpno= c.Cno
--*****6、查询所有同学的基本信息及选课情况(包含未选课同学的信息)*****
select Student.*,Cno,Tno,Grade
FROM Student LEFT JOIN SC ON Student.Sno=SC.Sno

----------------------END-----------------------
GO

第3关:嵌套查询(含相关子查询和不相关子查询)

任务描述

本关任务:

  1. 用 SELECT 嵌套查询获取满足指定条件的结果;
  2. 按要求返回查询表的属性列。

相关知识

为了完成本关任务,你需要掌握:

  1. 不相关子查询的执行过程及使用方法;
  2. 相关子查询的执行过程及使用方法;

具体使用示例请参考:4-3 嵌套查询示例

编程要求

本次编程任务是:

  1. 根据4-1SELECT语法规则,参照4-2关于嵌套查询的使用方法示例,尽量先在本地或平台上完成示例内容练习;
  2. “评测”通关。

平台命令行练习方法

  1. 复制和自行录入如下内容,在命令窗口使用sqlcmd命令行工具连接SQL SERVER服务器,登录后检查数据库JX是否创建成功,数据表及数据是否正常:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>
  2. 若不正常,则导入本专题实验用的数据库脚本文件ex3.sql后再练习,命令如下:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>' -i '/data/workspace/myshixun/ex4.sql'

评测通关方法

  1. 将命令行中运行正确的语句复制到step4.sql中“-----------BEGIN-------”和“--------END------”区域,按序完成后进行“评测”。
  2. 也可直接使用T-SQL命令完成如下要求并补全到step4.sql中对应区域,确认后进行“评测”。
  3. 若“评测”不能通关,请检查补全内容的正确性。

具体任务

注意:请参考后面的正确运行结果,使用嵌套查询的方案写T-SQL语句

  1. 查询没有选修课程的同学的基本信息
  2. 查询选修课程数低于3门的学生信息(需含未选课的学生信息)
  3. 查询所有不比“电子工程”系所有学生年龄大的其他系的学生信息
  4. 查询选修‘3’号或‘4’号课程的同学的学号和姓名
  5. 查询选修‘3’号和‘4’号课程的同学的学号和姓名

测试说明

测试过程:

  • 本关将通过查询命令将执行结果与预期结果进行比较来判断命令是否正确
  • 请确保所有需补全部分内容的正确性

如果操作正确,你将得到如下的结果:

SQL SERVER专题实验4 复杂查询


开始你的任务吧,祝你成功!

 

SET NOCOUNT ON
GO
USE JX
GO

----------------------BEGIN-------------------
--*****1、查询没有选修课程的同学的基本信息*****
select Student.*
from Student left join SC on Student.Sno = SC.Sno
where SC.Sno is null
--*****2、查询选修课程数低于3门的学生信息(需含未选课的学生信息)*****
select *
from Student
where Sno NOT  IN (select Sno from SC
group by Sno
HAVING COUNT(*)>=3
)
--*****3、查询所有不比“电子工程”系所有学生年龄大的其他系的学生信息*****
select *
from Student
where Sbirth>all(select Sbirth from Student where Sdept='电子工程') and Sdept<>'电子工程'

--*****4、查询选修‘3’号或‘4’号课程的同学的学号和姓名*****
select distinct Sno,Sname from Student where Sno in
(select Sno from SC where Cno in('3','4')
);

--*****5、查询选修‘3’号和‘4’号课程的同学的学号和姓名*****
select  Student.Sno,Student.Sname
from SC,Student
WHERE SC.Sno=Student.Sno and  Cno='3' and SC.Sno IN (
    select Sno from SC where SC.Cno='4' 
)



----------------------END-----------------------

第4关:集合查询(并、交、差)

任务描述

本关任务:

  1. 使用并、交、差的查询方式获取满足条件的查询结果;
  2. 按要求返回查询表的属性列。

相关知识

为了完成本关任务,你需要掌握:

  1. 并集、差集、差集的集合查询语句对查询目标列表达式的要求;
  2. 三种集合查询的SELECT语句使用方法。

具体使用示例请参考:4-4 集合查询示例

编程要求

本次编程任务是:

  1. 根据4-1SELECT语句关于集合查询的语法规则,参照4-2关于并集、交集和差集的查询使用方法示例,尽量先在本地或平台上完成示例内容练习;
  2. “评测”通关。

平台命令行练习方法

  1. 复制和自行录入如下内容,在命令窗口使用sqlcmd命令行工具连接SQL SERVER服务器,登录后检查数据库JX是否创建成功,数据表及数据是否正常:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>
  2. 若不正常,则导入本专题实验用的数据库脚本文件ex3.sql后再练习,命令如下:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>' -i '/data/workspace/myshixun/ex4.sql'

评测通关方法

  1. 将命令行中运行正确的语句复制到step4.sql中“-----------BEGIN-------”和“--------END------”区域,按序完成后进行“评测”。
  2. 也可直接使用T-SQL命令完成如下要求并补全到step4.sql中对应区域,确认后进行“评测”。
  3. 若“评测”不能通关,请检查补全内容的正确性。

具体任务

注意:请参考后面的正确运行结果,使用集合查询方案写T-SQL语句

  1. 查询选课人数不足4人的课程号及人数信息(含无学生选修的课程)
  2. 查询讲授‘3’号或 ‘4’号课程的老师姓名和课程名
  3. 查询同时选修了‘信息系统’和‘数据结构’课程的学生名单

测试说明

测试过程:

  • 本关将通过查询命令将执行结果与预期结果进行比较来判断命令是否正确
  • 请确保所有需补全部分内容的正确性

如果操作正确,你将得到如下的结果:

SQL SERVER专题实验4 复杂查询


开始你的任务吧,祝你成功!

SET NOCOUNT ON
GO
USE JX
GO
----------------------BEGIN-------------------
--*****1、查询选课人数不足4人的课程号及人数信息(含无学生选修的课程)****
select Cno '课程号',count(*) '选课人数' 
from SC 
group by Cno having count(*) < 4 union 
select Cno,0 
from Course where Cno not in(select Cno from SC);

--*****2、查询讲授‘3’号或 ‘4’号课程的老师姓名和课程名*****
select distinct Tname,Cname 
from Teacher,SC,Course 
where Teacher.Tno = SC.Tno and SC.Cno = Course.Cno and Sc.Tno in(select Tno from SC where Cno in('3','4'));

--*****3、查询同时选修了‘信息系统’和‘数据结构’课程的学生名单*****
select Sname 
from student 
where Sno in (select Sno from SC where Cno in (select Cno from Course where Cname = '信息系统'))
intersect select Sname 
from Student 
where Sno in (select Sno from SC where Cno in (select Cno from Course where Cname ='数据结构'))


----------------------END-----------------------
GO

 第5关:基于派生表的查询

任务描述

本关任务:

  1. 使用基于派生表的查询语句完成指定的数据查询;
  2. 按要求返回结果。

相关知识

为了完成本关任务,你需要掌握:

  1. 基于派生表查询的使用场景;
  2. SQL Server中基于派生表查询语法并灵活使用;
  3. 派生表查询中,子查询生成派生表别名的使用以及目标列表达式是否需要使用别名的判断。


**具体使用示例请参考:**[4-5 基于派生表的查询示例](https://data.educoder.net/api/attachments/2472063?disposition=inline)

编程要求

本次编程任务是:

  1. 根据3-1SELECT语句关于ORDER BY子句的语法规则,参照3-2关于单表的排序使用方法示例,尽量先在本地或平台上完成示例内容练习;
  2. “评测”通关。

平台命令行练习方法

  1. 复制和自行录入如下内容,在命令窗口使用sqlcmd命令行工具连接SQL SERVER服务器,登录后检查数据库JX是否创建成功,数据表及数据是否正常:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>
  2. 若不正常,则导入本专题实验用的数据库脚本文件ex3.sql后再练习,命令如下:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>' -i '/data/workspace/myshixun/ex4.sql'

评测通关方法

  1. 将命令行中运行正确的语句复制到step4.sql中“-----------BEGIN-------”和“--------END------”区域,按序完成后进行“评测”。
  2. 也可直接使用T-SQL命令完成如下要求并补全到step4.sql中对应区域,确认后进行“评测”。
  3. 若“评测”不能通关,请检查补全内容的正确性。

具体任务

注意:请参考后面的正确运行结果写T-SQL语句

  1. 查询年龄小于所在系平均年龄的学生信息及其所在系的平均年龄
  2. 查询所有讲授‘2’号课程的教师姓名

测试说明

测试过程:

  • 本关将通过查询命令将执行结果与预期结果进行比较来判断命令是否正确
  • 请确保所有需补全部分内容的正确性

如果操作正确,你将得到如下的结果:

SQL SERVER专题实验4 复杂查询


开始你的任务吧,祝你成功!

 

SET NOCOUNT ON
GO
USE JX
GO

----------------------BEGIN-------------------
--*****1、查询年龄小于所在系平均年龄的学生信息及所在系学生的平均年龄*****
select *,(
    select avg(2022-year(sbirth)) from student a where a.sdept=b.sdept group by sdept) 
    'avg_year' from student b where 2022-year(sbirth) < (select avg(2022-year(sbirth))
    from student c
    where b.sdept = c.sdept
    group by sdept
    )

--*****2、查询所有讲授‘2’号课程的教师姓名*****
select *
from teacher ,Course
where Cno='2'



----------------------END-----------------------

GO 
select *
from teacher where Tno = '4'

第6关:复杂查询综合应用

任务描述

本关任务:

  1. 在前几个实训的基础上,完成基于复杂查询的SELECT语句综合练习任务。

相关知识

为了完成本关任务,你需要掌握:

  1. EXISTS的用法
  2. 综合运用分析使用查询语句的能力。

编程要求

本次编程任务是:

  1. 结合前面的内容,综合运用复杂查询语句进行查询;
  2. “评测”通关。

平台命令行练习方法

  1. 复制和自行录入如下内容,在命令窗口使用sqlcmd命令行工具连接SQL SERVER服务器,登录后检查数据库JX是否创建成功,数据表及数据是否正常:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>
  2. 若不正常,则导入本实验用的数据库脚本文件ex4.sql后再练习,命令如下:
    sqlcmd -S localhost -U sa -P '<123123Aa!@>' -i '/data/workspace/myshixun/ex4.sql'

评测通关方法

  1. 将命令行中运行正确的语句复制到step4.sql中“-----------BEGIN-------”和“--------END------”区域,按序完成后进行“评测”。
  2. 也可直接使用T-SQL命令完成如下要求并补全到step6.sql中对应区域,确认后进行“评测”。
  3. 若“评测”不能通关,请检查补全内容的正确性。

具体任务

注意:请参考后面的正确运行结果写T-SQL语句

  1. 查询所有学生和教师的姓名(允许重名)并标识人员类型(学生/老师)。
  2. 查询没有选修2号课程的同学的学号、姓名和系别

测试说明

测试过程:

  • 本关将通过查询命令将执行结果与预期结果进行比较来判断命令是否正确
  • 请确保所有需补全部分内容的正确性

如果操作正确,你将得到如下的结果:

SQL SERVER专题实验4 复杂查询


开始你的任务吧,祝你成功!

SET NOCOUNT ON
GO
USE JX
GO
----------------------BEGIN-------------------
--*****1、查询所有学生和教师的姓名(允许重名)并标识人员类型(学生/老师)*****
select sname '姓名','学生' '人员类型' 
from Student union 
select tname '姓名','教师' '人员类型' 
from teacher;

--*****2、查询没有选修2号课程的同学的学号、姓名和系别*****
select Sno,Sname,Sdept 
from Student 
where not exists(select * from SC where SC.Sno=Student.Sno and SC.Cno='2')

----------------------END-----------------------
GO 

 文章来源地址https://www.toymoban.com/news/detail-435082.html

到了这里,关于SQL SERVER专题实验4 复杂查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

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

    实验名称          SQL语言进行简单查询 注意:原版word在下载资源里面(免费下载) 实验目的及要求: 掌握各种查询的SQL脚本写法,包括SELECT、FROM、WHERE、GROUP BY、HAVING子句的用法,特别要求比较内连接、外连接的结果 在XSGL数据库中,使用各种查询条件完成指定的查询

    2024年02月02日
    浏览(57)
  • 【数据库Microsoft SQL Server】实验一 数据库的定义与单表查询

    一、实验目的 1.要求学生熟悉掌握在DBMS中用SQL语言定义数据库、表、主码及外码。 2.熟悉关系数据库中常用数据类型,为关系表各属性定义合理的数据类型。 3.在建立好的数据库表中输入部分虚拟数据,实现基于单表的sql查询并分析查询结果。 二、实验环境与实验准备工作

    2024年02月05日
    浏览(18)
  • 光耦基本知识

    光耦基本知识

     1、光耦的种类          高速光耦、低速光耦;                 高速:6N137,HCPL-2601                 低速:PC817          线性光耦、非线性光耦;         以6N136与6N137为例         6N136是1Mbps的高速光耦,但是输出端采用的是 晶体管 ,所以输出电流的大小

    2024年02月02日
    浏览(36)
  • Linux 基本知识

    FHS(Filesystem Hierarchy Standard)—— 文件系统层次化标准 。 Filesystem Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的

    2024年02月16日
    浏览(10)
  • c++ 基本知识(一)

    一、c++调用python #include cstdlib int main() {     int result = system(\\\"python your_script.py\\\");     return 0; } 二、cmake、make、gcc的区别? 1、CMake(Cross-Platform Make)是一个跨平台的构建工具,用于生成适合不同操作系统和编译器的构建脚本。它使用CMakeLists.txt文件来描述项目的构建过程,并根据

    2024年02月16日
    浏览(9)
  • camera 硬件基本知识

    camera 硬件基本知识

    参考博客:1.【Camera专题】Qcom-你应该掌握的Camera调试技巧2_c枫_撸码的日子的博客-CSDN博客_outputpixelclock 2.浩瀚之水_csdn的博客_CSDN博客-深度学习,嵌入式Linux相关知识汇总,Caffe框架领域博主 3.一个早起的程序员的博客_CSDN博客-FPGA,PCIe应用实战,PCI-E理论剖析领域博主 一、硬件相关

    2024年02月15日
    浏览(13)
  • python基本知识学习

    python基本知识学习

    在控制台输出Hello,World! 单行注释:以#开头 多行注释: 选中要注释的代码Ctrl+/ 三单引号 三双引号 第一个字符必须是字母表中字母或下划线 _ 。 标识符的其他的部分由字母、数字和下划线组成。 标识符对大小写敏感。 标识符也叫变量名,变量名就是一个变量的名字,例如

    2024年02月15日
    浏览(10)
  • Qt 基本知识

    QMainWindow:主窗口 菜单栏 工具栏 状态栏 QWidget:空白的窗口 所有界面组件的基类 QDialog:对话框类 new project Qt Widget Application qmake 后缀为 .pro 基类:QWidget Generate form 不要去掉 自动生成 ui 文件 Kit 一般使用第一个 widget.ui 界面加个 label 就行 可以在右下角进行调整 GUI 程序结构

    2024年02月22日
    浏览(12)
  • CSS基本知识

    CSS基本知识

    CSS叫做层叠样式表。CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果。能够做到页面的样式和结构分离。 举个例子: 这里的style标签我们一般设置在head标签里。 可以看出被选择器修饰的和没被修饰的不同。 写在 style 标签中,嵌入到 html 内部,理

    2024年01月24日
    浏览(28)
  • 前端基本知识介绍

    前端基本知识介绍

    目录 一.前端三剑客 1.前导 2.三剑客的分工 二.VsCode的介绍与配置 1.vscode的介绍 2.vscode的下载安装 3.vscode的使用 3.1 图形界面操作 3.3 常用插件 三.HTML基础标签 HTML基础知识 1.HTML为何物? 2.标签介绍 3.HTML属性 4.HTML标签骨架 基本的HTML标签 1.HTML标题标签 2.换行与空格 3.HTML段落

    2024年02月03日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包