数据库第二次试验:数据库的简单查询和连接查询

本文档详细介绍了数据库查询和连接查询的实验过程,包括简单查询、连接查询的操作,如投影、选择、排序、连接等。实验涉及SQLServer查询分析器的使用,加深了对SQL语言的理解。实验内容涵盖内连接、外连接、临时表和视图的创建等,通过实例展示了SQL语句的编写和执行,有助于提升数据库操作技能。
摘要由CSDN通过智能技术生成

前言

为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!

一、实验目的

使学生掌握 SQL Server 查询分析器的使用方法,加深对 SQL 语言的查询语句的理解。熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。

二、实验要求

1.简单查询操作
该实验包括投影、选择条件表达式、数据排序、使用临时表等。
2.连接查询操作
该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。

三、实验原理、方法和手段

1.将查询需求用 SQL 语言表示。
2.在 SQL Server 查询分析器的输入区中输入 SQL 查询语句。
3.设置查询分析器结果区为 Standard Execute(标准执行)或 Execute to Grid 方式。
4.发布执行命令,查看查询结果;如果结果不正确,进行修改,直到正确为止。
5.查询分析器及使用方法
查询分析器是在开发数据库应用系统时使用最多的工具。查询分析器的主要作用是编辑SQL 语句,将其发送到服务器,并将执行结果及分析显示出来(或进行存储)。查询分析功能主要通过测试查询成本,判断该查询是否需要增加索引以提高查询速度,并可以实现自动建立索引的功能。
在查询分析器中的左边窗口是对象浏览器,其中按树结构列出了数据库对象;右上方是SQL 代码区域,用于输入 SQL 的查询语句;右下方为结果区,用于显示查询结果和分析结果。对于 SQL 语句的执行结果,在结果区中可以有 4 中不同的输出形式;标准执行将结果直接显示在结果区;网格执行将结果以表格形式显示在结果区;计划执行显示执行计划;索引分析为在结果区中显示查询的索引情况。上述输出形式,可以通过菜单或按钮选择。

四、实验组织运行要求

本实验属于验证型实验,通过实验,加强对课堂讲授知识的理解。开始实验前,必须进行预习,写出实现所有查询要求的 SQL 语句。实验过程中,先集中由老师进行具体要求和注意事项的讲解,然后各自独立在机器上完成实验。实验过程中出现问题,在实验指导老师帮助下解决。

五、实验条件

(1)硬件条件:个人计算机。
(2)软件条件:Windows;MS SQL Server。

六、实验步骤

1.基本操作实验
(1)简单查询实验
1)用SQL语句表示下列操作,在学生选课库中实现其数据查询操作。
①求数学系学生的学号和姓名。
②求选修了课程的学生学号。
③求选修2号课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
④求选修2号课程且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
⑤求数学系或计算机系姓张的学生的信息。
⑥求缺少了成绩的学生的学号和课程号。
2)在图书读者库中实现其查询操作:将计算机类的书存入永久的计算机图书表中,将借书日期在 2019 年以前的借阅记录存入临时的超期借阅表。
(2)连接查询实验
用SQL语句表示,并在学生选课库中实现下列数据连接查询操作:
①查询每个学生的情况以及他所选修的课程。
②求学生的学号、姓名、选修的课程名及成绩。
③求选修1号课程且成绩为90分以上的学生学号、姓名及成绩。
④查询每一门课的间接先行课(即先行课的先行课)。
2.提高操作实验
(1)按如下表的格式,建立职工部门库和职工表、部门表,并向表中输入数据。

职工表(ZG)
职工号(Eno)姓名(Ename)性别(Egender)年龄(Eage)所在部门(Edep)
1010李勇2011
1011刘晨19
1012王敏2212
1014张立2113
部门表(BM)
部门号(bmh)部门名称(bmmc)电话(dh)
11生产科566
12计划科578
13一车间467
14科研所

(2)用 SQL 语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。

七、实验过程

1.基本操作实验
(1)简单查询实验
1)用SQL语句表示下列操作,在学生选课库中实现其数据查询操作。
附:dbo.Student、dbo.Course、dbo.SC:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
①求数学系学生的学号和姓名。

select [Sno],[Sname] from ST.dbo.Student where Sdep='MA'

在这里插入图片描述

②求选修了课程的学生学号。

select distinct Sno from ST.dbo.SC 

在这里插入图片描述

③求选修001号课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。

select [Sno],[Grade] from SC WHERE Cno='001' order by Grade DESC,Sno ASC

在这里插入图片描述

④求选修001号课程且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。

select distinct [Sno],[Grade],[Grade]*0.8 newgrade from ST.dbo.SC where Cno='001' and Grade between 80 and 90

在这里插入图片描述

⑤求数学系或计算机系姓张的学生的信息。

select * from Student where (Sdep='CS' or Sdep='MA') and Sname like '张%'

在这里插入图片描述

⑥求缺少了成绩的学生的学号和课程号。

select [Sno],[Cno] from SC where Grade is null

在这里插入图片描述

2)在图书读者库中实现其查询操作:将C类的书存入永久的计算机图书表中,将借书日期在 2019 年以前的借阅记录存入临时的超期借阅表。
附:dbo.Book、dbo.BORROW:
在这里插入图片描述
在这里插入图片描述

create table librarydb.dbo.pBook
(
Bno int primary key,
Bclass nchar(10),
Bpublish nchar(20),
Bauthor nchar(20),
Bname nchar(30),
Bprice float,
foreign key (Bno) references librarydb.dbo.Book(Bno)
);
insert into librarydb.dbo.pBook select * from librarydb.dbo.Book where [Bclass]='C';

在这里插入图片描述

create table tempdb.dbo.#eBk
(
Bno int,
Rno int,
BRdate date,
primary key(Bno, Rno),
)
insert into #eBk select * from librarydb.dbo.BORROW where BRdate<'2019-1-1 00:00:00'
select * from #eBk

在这里插入图片描述
在这里插入图片描述
使用创建视图的方式:

create view ebk as select * from librarydb.dbo.Book where [Bclass]='C';

在这里插入图片描述
在这里插入图片描述

(2)连接查询实验
用SQL语句表示,并在学生选课库中实现下列数据连接查询操作:
①查询每个学生的情况以及他所选修的课程。

select * from ST.dbo.Student left join ST.dbo.SC on Student.Sno=SC.Sno

在这里插入图片描述

②求学生的学号、姓名、选修的课程名及成绩。

select Student.Sno,Sname,Cname,Grade from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno

在这里插入图片描述

③求选修001号课程且成绩为90分以上的学生学号、姓名及成绩。

select distinct Student.Sno,Sname,grade from SC,Student where Student.Sno=SC.Sno and Cno='001' and Grade>=90

在这里插入图片描述

④查询每一门课的间接先行课(即先行课的先行课)。

select x.Cname Cname,y.Cname Cpno,z.Cname CpnoCpno  from Course x,Course y,Course z where x.Cpno=y.Cno and y.Cpno=z.Cno

在这里插入图片描述

2.提高操作实验
(1)按如下表的格式,建立职工部门库和职工表、部门表,并向表中输入数据。

职工表(Employee)
职 工 号(Eno)姓名(Ename)性别(Egender)年龄(Eage)所 在 部 门(Edep)
1010李勇2011
1011刘晨19NULL
1012王敏2212
1014张立2113
部门表(Department)
部门号(Dno)部门名称(Dname)电话(Dtel)
11生产科566
12计划科578
13一车间467
14科研所NULL
USE [master]
GO
CREATE DATABASE [ED2]
 ON  PRIMARY 
( NAME = N'ED2', FILENAME = N'E:\SQL\SQL\MSSQL15.MSSQLSERVER\MSSQL\DATA\ED2.mdf')
 LOG ON 
( NAME = N'ED2_log', FILENAME = N'E:\SQL\SQL\MSSQL15.MSSQLSERVER\MSSQL\DATA\ED2_log.ldf')
GO
USE [ED2]
GO
CREATE TABLE [ED2].[dbo].[Department](
	[Dno] [smallint] primary key,
	[Dname] [nchar](20) NULL,
	[Dtel] [int] NULL,
)
CREATE TABLE [ED2].[dbo].[Employee](
	[Eno] [int] primary key ,
	[Ename] [nchar](40) NULL,
	[Egender] [nchar](6) NULL,
	[Eage] [smallint] NULL,
	[Edep] [smallint] NULL,
)
INSERT [dbo].[Department] ([Dno], [Dname], [Dtel]) VALUES (11, N'生产科', 566)
INSERT [dbo].[Department] ([Dno], [Dname], [Dtel]) VALUES (12, N'计划科', 578)
INSERT [dbo].[Department] ([Dno], [Dname], [Dtel]) VALUES (13, N'一车间', 467)
INSERT [dbo].[Department] ([Dno], [Dname], [Dtel]) VALUES (14, N'科研所', NULL)
INSERT [dbo].[Employee] ([Eno], [Ename], [Egender], [Eage], [Edep]) VALUES (1010, N'李勇', N'男', 20, 11)
INSERT [dbo].[Employee] ([Eno], [Ename], [Egender], [Eage], [Edep]) VALUES (1011, N'刘晨', N'女', 19, NULL)
INSERT [dbo].[Employee] ([Eno], [Ename], [Egender], [Eage], [Edep]) VALUES (1012, N'王敏', N'女', 22, 12)
INSERT [dbo].[Employee] ([Eno], [Ename], [Egender], [Eage], [Edep]) VALUES (1014, N'张立', N'男', 21, 13)
ALTER TABLE [dbo].[Employee]  WITH CHECK ADD  CONSTRAINT [FK_Employee_Department] FOREIGN KEY([Edep]) REFERENCES [dbo].[Department] ([Dno])
GO

在这里插入图片描述

(2)用 SQL 语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。
内连接:

select Employee.*,Department.* from Employee inner join Department on Employee.Edep=Department.Dno

在这里插入图片描述

左外连接:

select Employee.*,Department.* from Employee left join Department on Employee.Edep=Department.Dno

在这里插入图片描述

右外连接:

select Employee.*,Department.* from Employee right join Department on Employee.Edep=Department.Dno

在这里插入图片描述

八、实验总结

在实验过程中,对于新建数据库、新建数据表格并插入数据的操作并不是很熟练,以及在新建临时表时出现了语法错误,在经过查阅书籍以及在CSDN查阅学习SQL语法后进行了多次修改与尝试,最终顺利解决了出现的语法问题
本次实验在宏观上增加了对SQL语句操作的熟练度,同时学习了表达同一目的而使用不同方式的不同SQL语句语法,并对数据库操作有了更深一步的了解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight_V_Schumacher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值