3.数据查询(实验报告)

该实验旨在让学习者掌握Transact-SQL的SELECT语句,包括基本查询、条件查询、聚合函数、排序、联合查询、嵌套查询和连接查询等操作。通过在SQLServer2005或2008环境下执行一系列示例查询,来提升对数据库操作的理解和技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

一﹑实验目的

二﹑实验平台

三﹑实验内容和步骤

四﹑命令(代码)清单

五﹑调试和测试清单


一﹑实验目的

  1. 掌握使用Transact-SQL的SELECT语句进行基本查询的方法;
  2. 掌握使用SELECT语句进行条件查询的方法;
  3. 掌握SELECT语句的GROUP BY、ORDER BY以及UNION子句的作用和使用方法。
  4. 掌握嵌套查询的方法;
  5. 掌握连接查询的操作方法。

二﹑实验平台

操作系统:Windows xp或Win7

DBMS:SQL Server 2005或SQL Server 2008

三﹑实验内容和步骤

(1)在studentdb数据库中,运行下列SQL语句将输出什么?

① select count(*) from grade

② select substring(姓名,1,2) from student_info

③ select sqrt(分数) from grade where 分数>=85

④ select year(getdate()),month(getdate()),day(getdate())

(2)在studentdb数据库中使用select语句进行基本查询。

①在student_info表中,查询每个学生的学号、姓名和出生日期信息。

②查询学号为’0002’的学生的姓名和家庭住址。

③找出所有男同学的学号和姓名。

(3)使用select语句进行条件查询。

①在grade表中查找分数在70-90范围内的学生的学号和分数。

②在grade表中查询课程编号为0003的学生的平均分。

③在grade表中查询学习各门课程的人数。

④将学生信息按出生日期由大到小顺序排序。

⑤查询所有姓“张”的学生的学号和姓名。

(4)对student_info表,按性别顺序列出学生的学号、姓名、性别、出生日期及家庭住址,性别相同的按学号由小到大顺序排列。

(5)使用group by子句列出各个学生的平均成绩。

(6)使用union运算符将student_info表中姓“张”的学生的学号和姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称。

(7)嵌套查询

① 在student_info表中查找与“刘卫平”性别相同的所有学生的姓名、出生日期。

② 使用in子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。

③列出学号为0001的学生的分数比学号为0002号的学生的最低分数高的课程编号和分数。

④列出学号为0001的学生的分数比学号为0002号的学生的最高成绩还要高的课程编号和分数。

(8)连接查询。

①查询分数在80-90范围内的学生的学号、姓名和分数信息。

②查询学习“C语言程序设计”课程的学生的学号、姓名和分数。

③查询所有男同学的选课情况,要求列出学号、姓名、课程名称和分数。

④查询每个学生的所选课程的最高成绩,要求列出学号、姓名、课程编号和分数。

⑤查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。

⑥ 为grade表添加数据行:学号为0004、课程编号为0006、分数为76。查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。

四﹑命令(代码)清单

2

select 学号,姓名,出生日期 from student_info

select 姓名,家庭住址 from student_info where 学号='0002'

select 学号,姓名 from student_info where 性别='男'

(3)

select 学号,分数 from grade where 分数>=70 and 分数<=90

select avg(分数) from grade where 课程编号='0003'

select 课程编号,count(课程编号)as 学号 from grade
group by 课程编号

select * from student_info
order by 出生日期 desc

select 学号,姓名 from student_info
where 姓名 like '张%'

(4)

select 学号,姓名,性别,出生日期,家庭住址 from student_info
order by 性别,学号

(5)

select 学号,avg(分数)平均成绩 from grade group by 学号

(6)

select 学号 u_编号,姓名 u_名称 from student_info where 姓名 like '张%'
union
select 课程编号,课程名称 from curriculum

(7)

select 姓名,出生日期 from student_info where
性别=(select 性别 from student_info where 姓名='刘卫平')

select 学号,姓名,性别 from student_info where
学号 in(select 学号 from grade where 课程编号 in ('0002','0005'))

select 课程编号,分数 from grade where
学号='0001'and 分数>(select min(分数) from grade where 学号='0002')

select 课程编号,分数 from grade where
学号='0001'and 分数>(select max(分数) from grade where 学号='0002')

(8)

select grade.学号,姓名,分数 from grade,student_info where
grade.学号=student_info.学号 and (分数 between 80 and 90)

select grade.学号,姓名,分数 from grade,student_info,curriculum where
grade.学号=student_info.学号 and curriculum.课程编号=grade.课程编号
and 课程名称='C语言程序设计'

select grade.学号,姓名,课程名称,分数 from grade,student_info,curriculum where
grade.学号=student_info.学号 and curriculum.课程编号=grade.课程编号
and 性别='男'

select grade.学号,姓名,课程编号,分数 from grade,student_info where
grade.学号=student_info.学号 and 分数 in(select max(分数) from grade group by 学号)

select student_info.学号,姓名,总成绩
from student_info left outer join
(select 学号,sum(分数)as 总成绩 from grade group by 学号)
grade on student_info.学号=grade.学号

insert into grade values('0004','0006',76,null)

select curriculum.课程编号,课程名称,选修人数
from curriculum right outer join
(
select 课程编号,count(*)as 选修人数
from grade group by 课程编号
)
grade on curriculum.课程编号=grade.课程编号

五﹑调试和测试清单

1

 

 

(2)

(3)

(4)

(5)

(6)

(7)

(8)

 

 

本文档为数据库上机实验报告,是自己认认真真一步一步写的,报告包含试验中的具体步骤,过程以及代码和实验结果截图,和实验总结。 实验一 实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的使用和数据库设计的一般方法。 实验内容: (1)SQL SERVER2005的使用 (2)数据库的设计过程并利用SQL SERVER2005建立数据库。 实验二 实验题目: 数据库的定义 实验目的:掌握数据表建立、修改、删除、索引的SQL语句。 实验内容: (1)数据表的建立 (2)数据表的修改 (3)数据表的删除 (4)数据表的索引建立 为S表的DEPT建立唯一索引 (5)视图的建立与删除 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE) 查询1983年以后出生的计算机系学生基本信息。 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。 查询计算机系学生选课多于3门的学生学号。 查询计算机系学生2号课不及格的学生学号和成绩。 实验三 实验题目: 数据表的操作 实验目的: 掌握数据表数据操作的SQL语句。 实验内容: SQL语句插入数据操作 SQL语句修改数据操作 SQL语句删除数据操作 SQL语句查询数据操作 维护数据SQL语句: (1)在学生表中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’) (2)删除数据库中学号为’200213801’的退学学生有关信息。 (3)将计算机系学生2号课成绩全部提高5%。 查询数据SQL语句: (4)统计有学生选修的课程门数。 (5)统计HU老师所授每门课程的学生平均成绩。 (6)统计所有选修人数多于20的课程号和选课人数,并按人数降序排列,若人数相等,则按课程号升序排列。 (7)检索所有缓考即成绩为NULL的同学学号、姓名和缓考课程号。 (8)检索‘OS’课成绩高于该课平均成绩的同学学号。 (1) 检索计算机系女生的学号和姓名。 (2) 检索全体学生姓名、出生年份和所在系。 (3) 检索未选修任何课程的学生学号。 (4) 检索WANG老师所授课程号、课程名。 (5) 检索所有姓LI同学的基本信息。 (6) 检索选修‘DATABASE’课程的学生学号。 (7) 检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。 (8) 检索选修TIAN老师所授全部课程的学生学号。 实验四 实验题目: T-SQL编程 实验目的: 掌握T-SQL语句的使用。 实验内容: 1.定义一个表变量,用来存储两名学生的学号,姓名,所在系。 2.编写一个自定义的函数,该函数接受一个学生姓名,返回其学生表中基本信息及选课情况。 3.试用CASE语句输出学生表中各年龄段的学生人数。 4.编写存储过程,以系别作为参数,统计指定系别的人数,并作为存储过程的输出。 实验题目: 数据库的完整性 实验目的: 掌握数据库的完整性约束定义,完整性检查及违约处理方式。 掌握触发器的定义及使用。 实验内容: 1. 定义S, C表的完整性约束 2. 定义SC表的完整性约束,要求当其被参照表发生删除操作时,违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。 3. 触发器 ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内 ☆ 建立一个INSTEAD OF触发器,每当修改课程表中记录时,利用触发器动作替代修改操作。 ☆ 建立一个DDL 触发器,不允许删除数据库中表,并作出响应。 实验六 实验题目: 数据库的安全性 实验目的: 掌握SQL SERVER 2005的安全控制机制 实验内容: 1. 创建登录 创建lg1,lg2,并设定口令 2. 定义用户 定义user1,user2,user1以lg1登录,user2以lg2登录,user1定义角色ddl_admin,datareader,datawriter 3. 掌握SQL SERVER 2005架构和用户分离的概念 为user1创建架构u1,并建立test表,通过授权模式的方法,授权给user2表访问test的权限 4. 数据库的授权、收权语句 ☆ 将查询SC表和修改GRADE属性的权限授予用户user1。 ☆ 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。 ☆ 收回所有用户对表S的插入权限。 实验七 实验题目: 数据库的设计 实验目的: 掌握数据库的概念结构设计和逻辑结构与设计,掌握ER图的表示方法即如何将ER模型转化为关系模型 1.学校有若干系,每个系有若干班级和教研室,每个教研室有若干教师,其中有教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课有若干学生选修。 2.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料组成,不同零件所用的材料可以相同。有些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。
以下是数据查询实验报告: 实验目的:学习使用SQL语言对数据库进行查询和操作。 实验环境:MySQL数据库 实验步骤: 1. 创建数据库和数据表 首先,需要创建一个数据库和一张数据表,可以使用以下命令: ``` CREATE DATABASE test; USE test; CREATE TABLE students ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, age INT(11) NOT NULL, gender VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); ``` 这个命令创建了一个名为“test”的数据库,并在其中创建了一张名为“students”的数据表。这个数据表包含了学生的ID、姓名、年龄和性别四个属性,其中ID是自增的主键。 2. 插入数据 接下来,可以插入一些数据到数据表中,可以使用以下命令: ``` INSERT INTO students (name, age, gender) VALUES (&#39;张三&#39;, 20, &#39;男&#39;), (&#39;李四&#39;, 22, &#39;女&#39;), (&#39;王五&#39;, 21, &#39;男&#39;), (&#39;赵六&#39;, 23, &#39;女&#39;); ``` 这个命令向“students”数据表中插入了四条记录,分别表示四个学生的信息。 3. 查询数据 使用SELECT语句可以查询数据表中的数据,可以使用以下命令: ``` SELECT * FROM students; ``` 这个命令会返回“students”数据表中所有记录的信息,包括ID、姓名、年龄和性别四个属性。 如果只想查询满足某个条件的记录,可以使用WHERE子句,例如: ``` SELECT * FROM students WHERE gender = &#39;男&#39;; ``` 这个命令会返回“students”数据表中所有性别为“男”的记录。 4. 更新数据 使用UPDATE语句可以更新数据表中的数据,可以使用以下命令: ``` UPDATE students SET age = 24 WHERE name = &#39;张三&#39;; ``` 这个命令会将“students”数据表中姓名为“张三”的记录的年龄属性更新为24。 5. 删除数据 使用DELETE语句可以删除数据表中的数据,可以使用以下命令: ``` DELETE FROM students WHERE name = &#39;赵六&#39;; ``` 这个命令会将“students”数据表中姓名为“赵六”的记录删除。 实验总结: 通过本次实验,学习了SQL语言对数据库进行查询和操作的基本知识,包括创建数据库和数据表、插入数据、查询数据、更新数据和删除数据。这些基础知识是进行后续数据库应用开发的必备技能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值