当前位置: 首页 > news >正文

数据库day-05

一、实验目的

1.掌握数据的基本检索方法;

2.掌握数据查询的join和Order by子句的使用;

3. 掌握聚集函数的使用方法。

二、实验的软硬件环境要求

硬件环境要求:

       PC机(单机)

使用的软件名称、版本号以及模块:

       Windows 10等下的SQL Server 2019

三、知识准备

前期要求掌握的知识:

数据检索的语句格式:

SELECT [ALL|DISTINCT] <目标列表达式列表>                                                  

FROM <表名或视图名列表>  join    <表名或视图名列表> on <连接条件>

[ WHERE <条件表达式> ]

 [ ORDER BY <列名2> [ ASC|DESC ] ]

 其中,SELECT后的目标列表达式可以是列名、表达式或函数。

ORDER BY子句:对查询结果表按指定列值的升序或降序排序

注意:T-SQL语句中关键字不区分大小写

四、实验内容

1.对数据表进行简单检索;

2.对数据表进行排序检索;

3.多表查询;

SQL语句创建四个表:

create database STUXXX
go
use STU
XXX
go
create table student
XXX
(
Sno char(3) not null primary key ,--
学号
Sname  nchar(4) not null,--学生姓名
Ssex nchar(1) not null, --学生性别
Sbirthday date,--学生出生年月
Class char(5)--学生所在班级
)
go
create table teacher
XXX--老师
(
Tno  char(3) not null primary key ,--
教工编号(主码)
Tname nchar(4) not null,--教工姓名
Tsex nchar(1) not null, --教工性别
Tbirthday date,--教工出生年月
Prof nchar(3),--职称
Depart nchar(5) not null--教工所在部门
)
go
create table Course
XXX--课程
(
Cno  char(5) not null primary key ,--
课程号
Cname Nvarchar(25) not null,--课程名称
Tno  char(3) not null references teacher(Tno) --教工编号(外码)
)
go
create table Score
XXX--分数
(

Sno  char(3) not null references student(Sno), --学号(外码)
Cno char(5) not null references Course(Cno), --课程号(外码)
primary key(Sno,Cno),
Degree Decimal(4,1)--
成绩

)

五、验证性实验

以下查询要求在逐个语句执行,执行后将执行结果记录下来:

  1. 无条件查询全部数据

USE STUDENT

SELECT * FROM STUDENT023

  1. 在SELECT关键字后指明要检索的列名

(1) 查询学生表的学生学号和姓名

SELECT SNO,SNAME FROM  STUDENT023

(2) 查询STUDENT表中的班级名

SELECT class FROM STUDENT023

(3)查询S表中不重复的班级

SELECT DISTINCT class FROM STUDENT023

  1. 改变列标题的检索
    1. 使用 空格 形式: 列名 新标题

SELECT SNO 学号 , SNAME 姓名 FROM STUDENT023

    1. 使用“AS”形式,列名  AS  新标题

SELECT SNO AS ‘学号’, SNAME AS  ‘姓名’ FROM STUDENT023

    1. 使用“AS”形式,列名  AS  新标题

SELECT SNO AS ‘学  号’, SNAME AS  ‘姓  名’ FROM STUDENT023

    1. 使用“AS”形式,列名  AS  新标题

SELECT  ‘学  号’=SNO  , ‘姓  名’=SNAME   FROM STUDENT023

  1. 有条件选择的查询

在S表检索“95033”的学生信息

SELECT  *  FROM  STUDENT023

 WHERE CLASS=’ 95033

    1. 在S表中检索姓“王”的学生信息

SELECT  *  FROM  STUDENT023

WHERE  sname  like  ‘王%’

    1. 在SC表检索’ 3-105’选修课成绩为空的选课记录

SELECT  SNO, CNO  FROM  SCORE023

WHERE  cno=’3-105’  and Degree  is  null

    1. 检索年龄为21,25,22的学生学号、姓名

SELECT  SNO,SNAME  FROM  STUDENT023

WHERE YEAR(GETDATE())-YEAR([Sbirthday]) IN  in (21,25,22)

  1. 多表查询

查询所有人的学号,姓名,课程号,课程名,成绩

Select s.sno sname,c.cno,cname , Degree  from  STUDENT023 s join SCORE023 sc

On s.sno=sc.sno  join course023 c on c.cno=sc.cno

注意:表的别名

  1. 对检索结果进行排序

SELECT  *  FROM  SCORE023

WHERE Degree  IS not NULL

ORDER  BY  SNO,CNO  DESC

六、设计性实验

(1).实验要求

1 查询Student表中95031的所有记录的snoSname Ssex列。

SELECT Sno, Sname, Ssex

FROM student023

WHERE Class = '95031';

2 查询教师所有的单位即不重复的Depart列。

SELECT DISTINCT Depart

FROM teacher023;

3 查询Score表中成绩在6080之间的所有记录。

SELECT *

FROM Score023

WHERE Degree BETWEEN 60 AND 80;

4 查询Score表中成绩为858688的记录。         

SELECT *

FROM Score023

WHERE Degree IN (85, 86, 88);

5 查询Student表中“95031”班或性别为的同学记录。

SELECT *

FROM student023

WHERE Class = '95031' OR Ssex = '女';

6 Cno升序、Degree降序查询Score表的所有记录。

SELECT *

FROM Score023

ORDER BY Cno ASC, Degree DESC;

7、查询课程名中的第15个字符是‘’课程信息。

SELECT *

FROM Course023

WHERE LEN(Cname) >= 15 AND SUBSTRING(Cname, 15, 1) = '理';

8、查询Student表中不姓且姓名第二字为‘’的同学记录。

SELECT *

FROM student023

WHERE LEFT(Sname, 1) <> '王' AND SUBSTRING(Sname, 2, 1) = '君';

9、查询Student表中每个学生的姓名和年龄。

SELECT Sname, YEAR(GETDATE()) - YEAR(Sbirthday) AS Age

FROM student023;

10、查询Student表中最大和最小的Sbirthday日期值。

SELECT MAX(Sbirthday) AS MaxBirthday, MIN(Sbirthday) AS MinBirthday

FROM student023;

11、以班号和年龄从大到小的顺序查询Student表中的全部记录。

SELECT *

FROM student023

ORDER BY Class DESC, YEAR(GETDATE()) - YEAR(Sbirthday) DESC;

12. 查询Student表本月过生日同学的信息,包括学号,姓名,课程号,课程名,任课教师和成绩。

SELECT s.Sno, s.Sname, co.Cno, co.Cname, t.Tname, sc.Degree

FROM student023 s

JOIN Score023 sc ON s.Sno = sc.Sno

JOIN Course023 co ON sc.Cno = co.Cno

JOIN teacher023 t ON co.Tno = t.Tno

WHERE MONTH(s.Sbirthday) = MONTH(GETDATE());

13. 查询选修课程名中含有%的信息,包括学号,姓名,课程号,课程名和成绩。

SELECT s.Sno, s.Sname, c.Cno, c.Cname, sc.Degree

FROM student023 s

JOIN Score023 sc ON s.Sno = sc.Sno

JOIN Course023 c ON sc.Cno = c.Cno

WHERE c.Cname LIKE '%\%%' ESCAPE '\';

14. 查询选修课程名中含有’[‘’]’的信息,包括学号,姓名,课程号,课程名和成绩。

SELECT s.Sno, s.Sname, c.Cno, c.Cname, sc.Degree

FROM student023 s

JOIN Score023 sc ON s.Sno = sc.Sno

JOIN Course023 c ON sc.Cno = c.Cno

WHERE c.Cname LIKE '%\[%' ESCAPE '\'

   OR c.Cname LIKE '%\]%' ESCAPE '\';

15. 查询选修课程名中含有’[‘’]’的课程信息,包括学号,姓名,课程号,课程名和成绩。

   SELECT s.Sno, s.Sname, c.Cno, c.Cname, sc.Degree

FROM student023 s

JOIN Score023 sc ON s.Sno = sc.Sno

JOIN Course023 c ON sc.Cno = c.Cno

WHERE c.Cname LIKE '%\[%\]%' ESCAPE '\';

16. 查询所有学生信息,包括学号,姓名,课程号,课程名,任课教师和成绩(包括没上课的学生,没有选修的课程以及没上课的教师)。

SELECT s.Sno, s.Sname, c.Cno, c.Cname, t.Tname, sc.Degree

FROM student023 s

LEFT JOIN Score023 sc ON s.Sno = sc.Sno

LEFT JOIN Course023 c ON sc.Cno = c.Cno

LEFT JOIN teacher023 t ON c.Tno = t.Tno

ORDER BY s.Sno, c.Cno;

七、试验小结

通过实验,熟练掌握了使用SQL语句进行数据的基本检索方法,包括无条件查询全部数据、指定列名查询、改变列标题的检索以及有条件选择的查询等多种方式。例如,能够准确使用SELECT语句结合WHERE子句,根据不同的条件筛选出所需的学生信息、课程信息等,像查询“95031”班的学生记录、查询姓“王”的学生信息等操作都能轻松实现。

相关文章:

  • 关于Spring解决循环依赖的一些思考
  • STM32H503CB升级BootLoader
  • 【广州华锐互动】汽车生产引入数字孪生系统,优化生产流程,提升汽车产品质量
  • 2025年Q2(门式)起重机司机考试的题目及答案
  • Android学习总结之算法篇七(图和矩阵)
  • mybatis-plus整合springboot与使用方式
  • 【初阶数据结构】——算法复杂度
  • 实体转型互联网营销:破局与新生-中小企实战运营和营销工作室博客
  • 一本通 2061:【例1.2】梯形面积
  • [音视频]基于h264的直播与点播技术栈整理
  • 模拟浏览器指纹:生成与定制特定属性
  • 【数据资产入表】数据确权
  • tortoiseSVN切换登录账号失败【已解决】
  • 实验二 两个多位十进制数相加实验
  • IPC(进程间通信)---- 信号
  • Java实现AES加密解密终极指南:从基础到高阶实战
  • Python网络编程从入门到精通:Socket核心技术+TCP/UDP实战详解
  • 实战指南 | 通过 Amazon Bedrock 快速接入 DeepSeek-R1 大模型
  • 最佳归并树的虚短怎么处理
  • 【刷题2025】贪心算法+KMP算法+暴力枚举+扫描树线段树+LFU缓存
  • 南京84.57亿元成交8宗宅地:仅秦淮区一宗地块溢价成交
  • 董明珠卸任格力电器总裁,张伟接棒
  • 事故调查报告:东莞一大楼装修项目去年致1人死亡,系违规带电作业
  • “雷公”起诉人贩子王浩文案将开庭:索赔6元,“讨个公道”
  • 牛市早报|国常会:要持续稳定股市,4月LPR今日公布
  • 《“四有”好老师系列丛书》发布,由顾明远总主编