一、实验目的
1.熟悉SQL Server数据库中的数据查询、统计、分组、排序等操作。
2.掌握使用查询分析器对数据进行简单查询、连接查询、嵌套查询和组合查询。
二、实验仪器
计算机、SQL Server 2019软件,U盘(学生自备)。
三、实验原理
1.启动数据库服务软件SQL Server 2019的查询分析器,用SELECT语句对表进行简单查询操作,整个查询过程只涉及到一个表,是最基本的查询语句。
2.用SELECT语句对表进行连接查询操作,连接查询涉及被连接和连接两个表,所以数据源一般为多个表。
3.用SELECT语句对表进行嵌套查询操作,一个Select…From…Where语句称为一个查询块,将一个查询块嵌套在另一个查询块的Where子句或Having短语的条件中的查询,就是嵌套查询。主要有使用In操作符、使用比较运算符的嵌套查询方式。
4.用SELECT语句对表进行组合查询操作,将SELECT语句的查询结果集再进行集合运算就构成了SQL的组合查询。组合查询操作符有Union(并操作)、Intersect(交操作)和Minus(差操作)。
- 实验内容
1.具体操作任务
(1)打开数据库SQL Server 2019的查询分析器。
(2)用INSERT语句向表xs_kc中插入记录
利用以前建立的xs,kc,xs_kc进行查询。
2.简单查询
(1)查询全体学生的详细记录;
(2)查询所有选修过课的学生的学号;
(3)查询考试成绩不及格的学生的学号;
(4)查询通信工程和计算机科学系的学生的姓名和性别;
(5)查询所有姓王的学生的姓名、学号和性别;
(6)查询“计算机基础”课程的课程号和学分;
(7)查询选修了101号课程的学生的学号及其成绩,查询结果按分数降序排列;
(8)查询选修了102号课程的学生的最高分数;
(9)查询xs表中计算机科学系学生的学号、姓名、总学分,结果中各列的标题分别指定为number,name,mark;
(10)对xs表中数据只选择专业名和总学分;
(11)查询xs表中姓名、专业名和总学分,只返回结果集的前5行;
(12)查询xs表中总学分尚未确定的学生情况;
(13)查询通信工程专业总学分大于等于42分的学生情况;
- 小结
本次实验的重点在于查询数据,由于现实生活中数据的庞大性和所需要的数据的多样性,导致了查询语句也要满足各种需求。比如本次实验涉及到取最大值、去掉重复值、升降序操作等,尤其是在指定查询结果的标题时,由于对这个操作很陌生,所以不得不借助网络资源来完成学习并成功查询。这些查询语句虽然多样,但是也具有很多共性,它们的主体框架是一样的,所以只需要根据自己的需要来增加一定的操作即可。而这部分也是数据库的应用中非常重要的一部分,所以需要多练习多应用。
实验报告:
实验题目:数据库的查询(一)
- 实验目的
1.熟悉SQL Server数据库中的数据查询、统计、分组、排序等操作。
2.掌握使用查询分析器对数据进行简单查询、连接查询、嵌套查询和组合查询。
- 实验内容及步骤
1.具体操作任务
(1)打开数据库SQL Server 2019的查询分析器。
(2)用INSERT语句向表xs_kc中插入记录,利用以前建立的xs,kc,xs_kc进行查询。
代码:insert into dbo.xs_kc
values
(001101,101,74),
(001102,101,83),
(001103,102,91),
(001103,101,56),
(001104,103,88);
2.简单查询
(1)查询全体学生的详细记录;
代码:select *
from dbo.xs;
- 查询所有选修过课的学生的学号;
代码:select distinct(sno)
from dbo.xs_kc;
- 查询考试成绩不及格的学生的学号;
代码:select distinct(sno)
from dbo.xs_kc
where grade<60;
- 查询通信工程和计算机科学系的学生的姓名和性别;
代码:select sname,ssex
from dbo.xs
where sdept='is' or sdept='CE';
- 查询所有姓王的学生的姓名、学号和性别;
代码:select sno,sname,ssex
from dbo.xs
where sname like '王%';
- 查询“计算机基础”课程的课程号和学分;
代码:select cno,Ccredit
from dbo.kc
where cname='计算机基础';
- 查询选修了101号课程的学生的学号及其成绩,查询结果按分数降序排列;
代码:select sno,grade
from dbo.xs_kc
where cno='101'
order by grade desc;
- 查询选修了102号课程的学生的最高分数;
代码:select max(grade)
from dbo.xs_kc
where cno='102';
- 查询xs表中计算机科学系学生的学号、姓名、总学分,结果中各列的标题分别指定为number,name,mark;
代码:select sno as'number',sname as'name',scredit as'mark'
from dbo.xs
where sdept='is';
- 对xs表中数据只选择专业名和总学分;
代码:select sdept,scredit
from dbo.xs;
- 查询xs表中姓名、专业名和总学分,只返回结果集的前5行;
代码:select top 5 sname,sdept,scredit
from dbo.xs ;
- 查询xs表中总学分尚未确定的学生情况;
代码:select *
from dbo.xs
where scredit is null;
- 查询通信工程专业总学分大于等于42分的学生情况;
代码:select *
from dbo.xs
where scredit>=42 and sdept='CE';
三、实验数据的记录及处理
以上操作内容使用SQL语句编程并运行成功后,将程序进行记录,并写在报告纸上。
1.(2)代码:
insert into dbo.xs_kc
values
(001101,101,74),
(001102,101,83),
(001103,102,91),
(001103,101,56),
(001104,103,88);
2.(1)代码:
select *
from dbo.xs;
2.(2)代码:
select distinct(sno)
from dbo.xs_kc;
2.(3)代码:
select distinct(sno)
from dbo.xs_kc
where grade<60;
2.(4)代码:
select sname,ssex
from dbo.xs
where sdept='is' or sdept='CE';
2.(5)代码:
select sno,sname,ssex
from dbo.xs
where sname like '王%';
2.(6)代码:
select cno,Ccredit
from dbo.kc
where cname='计算机基础';
2.(7)代码:
select sno,grade
from dbo.xs_kc
where cno='101'
order by grade desc;
2.(8)代码:
select max(grade)
from dbo.xs_kc
where cno='102';
2.(9)代码:
select sno as'number',sname as'name',scredit as'mark'
from dbo.xs
where sdept='is';
2.(10)代码:
select sdept,scredit
from dbo.xs;
2.(11)代码:
select top 5 sname,sdept,scredit
from dbo.xs ;
2.(12)代码:
select *
from dbo.xs
where scredit is null;
2.(13)代码:
select *
from dbo.xs
where scredit>=42 and sdept='CE';
四、思考题
1.top主要应用场合是什么?
答:TOP关键字在SQL语言中用来限制返回结果集中的记录条数,其使用方法有两种形式:
- 返回确定数目的记录个数,其语法格式: SELECT TOP n <列名表> FROM <表名> [查询条件],其中,n为要返回结果集中的记录条数
- 返回结果集中指定百分比的记录数,其语法格式: SELECT TOP n PERCENT <列名表> FROM <表名> [查询条件],其中,n为所返回的记录数所占结果集中记录数目的百分比数
- 可以代替between用法的语句或符号是什么?举例说明。
答:可以用 <= 和 >= 来代替BETWEEN AND
例如:查询年龄在20—23岁(包括20和23岁)之间的学生的姓名,系别和年龄:
SELECT Sname,sdept,sage
FROM xs
WHERE sage BETWEEN 20 AND 23;
可以替换为:
SELECT Sname,sdept,sage
FROM xs
WHERE sage >= 20 AND sage <= 23;
五、实验过程中遇到的问题及解决方法
本次实验是为了完成数据库中的数据查询、统计、分组、排序等操作,在查询所有选修过课的学生的学号的操作时,由于存在一个学生选修了多门课程,所以需要使用distinct语句去掉重复值;查询通信工程和计算机科学系的学生的姓名和性别时,由于两个系是并列的关系,所以要使用or来连接,而初次写代码时误用了and;‘like’和‘=’之间还是存在区别的,这一点通过实验可以发现;最陌生的一点就是在进行指定查询后的数据的列名的操作,这个语句之前并不知道,所以在网络上进行了查询,最后找到了对应的语句成功的完成了查询。本次实验由于用到了很多新的查询方式,所以课本上的例题和网络资源成为了我解决问题的主要信息来源。