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日
    浏览(56)
  • 【数据库Microsoft SQL Server】实验一 数据库的定义与单表查询

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

    2024年02月05日
    浏览(59)
  • 无人机基本知识

    目录 前言 一、总体概况 二、机身 三、涵道 四、动力系统 1、 螺旋桨  2、电机 3、电调 4、电池 五、遥控器 六、自动驾驶仪(飞控) 1、组成 (1)传感器 (2)接口 2、飞控的连接 3、控制逻辑 4、作用 5、产品 七、地面站 八、数传 九、深度相机 总结 参考文献 四旋翼飞机

    2024年01月19日
    浏览(39)
  • Git基本知识

    Git 官网: https://book.git-scm.com/ Git 完整命令手册地址: http://git-scm.com/docs Git 中文文档: https://git-scm.com/book/zh/v2 Git 各平台安装包下载地址为: http://git-scm.com/downloads 2.1 Windows下的安装 安装包下载地址: https://github.com/git-for-windows/git/releases/ https://gitforwindows.org/ 官网慢,可以用

    2024年02月08日
    浏览(32)
  • shell基本知识

    一、为什么学习和使用shell编程 二、什么是shell 系统当前支持的所有的shell: 三、shell的分类 为nologin,运行进程的,不允许登录系统,考虑系统安全性 用户名:密码的占位符:uid(用户的id):gid(用户所属基本组的id:关于账号的描述信息:用户家目录:当前用户与系统交

    2024年02月12日
    浏览(49)
  • 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日
    浏览(34)
  • Qt 基本知识

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

    2024年02月22日
    浏览(36)
  • 电容的基本知识

    1、电容是电路中重要的元件,种类多、用途广,主要有插件类和贴片类两种。 2、电容主要特性参数:标称容量、耐压、误差、温度         2.1电容容量常用单位有微法《uF)、纳法《nF)、皮法《pF)        单位换算:1uF=10^3nF=10\\\"6pF《电容的基本单位用法拉(F)表示)例如: 105

    2024年02月11日
    浏览(47)
  • 数学向量基本知识

    1.向量相关定义 2.向量的线性运算 3.向量积与数量积    向量积与数量积的区别 名称 标积/内积/数量积/点积 矢积/外积/向量积/叉积 运算式(a,b和c粗体字,表示向量) a·b=|a||b|·cosθ a×b=c,其中|c|=|a||b|·sinθ,c的方向遵守右手定则 几何意义 向量a在向量b方向上的投影与向

    2023年04月08日
    浏览(79)
  • 前端基本知识介绍

    目录 一.前端三剑客 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日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包