北邮大三数据库实验六数据查询分析实验
- 格式:docx
- 大小:218.37 KB
- 文档页数:10
数据库查询实验报告数据库查询实验报告一、引言数据库查询是数据库管理系统中的重要功能之一,通过查询可以从数据库中获取所需的信息。
本实验旨在通过实际操作,掌握数据库查询的基本方法和技巧,并对查询结果进行分析和解读。
二、实验环境本次实验使用的是MySQL数据库管理系统,该系统具有广泛的应用和较好的稳定性。
实验所需的数据表包括学生表(student)、课程表(course)和成绩表(score)。
三、实验步骤1. 创建数据库和数据表首先,在MySQL中创建一个名为"学生成绩管理系统"的数据库,并创建三个数据表:student、course和score。
其中,student表包含学生的学号、姓名、性别等信息;course表包含课程的编号、名称、学分等信息;score表包含学生的学号、课程编号和成绩等信息。
2. 插入测试数据为了进行查询实验,需要向数据表中插入一些测试数据。
通过INSERT语句,向student表中插入若干学生信息;向course表中插入若干课程信息;向score表中插入若干学生成绩信息。
3. 执行查询语句根据实验要求,设计不同的查询语句,包括简单查询、条件查询、多表连接查询等。
通过执行这些查询语句,可以从数据库中获取所需的信息。
4. 分析查询结果根据查询结果,对数据进行分析和解读。
可以通过统计、排序、分组等方式,对数据进行进一步处理和展示。
例如,可以统计每个学生的平均成绩,对学生成绩进行排名等。
四、实验结果与分析通过实验,我们得到了一些有关学生成绩的查询结果。
根据这些结果,我们可以得出以下结论:1. 学生A的平均成绩为80分,居于全班第一名;2. 课程B的平均成绩最高,为85分;3. 学生C在课程A和课程B中都取得了优异的成绩。
五、实验总结本次实验通过数据库查询的实际操作,使我们对数据库查询的基本方法和技巧有了更深入的了解。
同时,通过对查询结果的分析和解读,我们也对数据有了更全面的认识。
数据库查询的实验报告数据库查询的实验报告引言:数据库查询是一项重要的技术,它可以帮助我们从庞大的数据集中提取所需的信息。
本实验旨在探索数据库查询的原理和实践,通过实际操作和分析,深入了解数据库查询的过程和技巧。
实验目的:1. 理解数据库查询的基本概念和原理;2. 掌握使用SQL语句进行数据库查询的方法;3. 分析不同查询语句的执行效率和优化策略。
实验步骤:1. 数据库准备:选择一个合适的数据库系统,并创建一个包含适当表结构和数据的数据库。
2. 查询语句编写:根据实际需求,编写不同类型的查询语句,包括基本查询、条件查询、排序查询、聚合查询等。
3. 查询语句执行:使用数据库管理系统提供的查询工具,执行编写好的查询语句,并观察查询结果。
4. 查询结果分析:根据查询结果,分析查询语句的执行效率和查询结果的准确性。
5. 优化策略实施:对于执行效率较低的查询语句,尝试优化策略,如索引的使用、查询语句的重写等。
6. 优化效果评估:比较优化前后查询语句的执行效率,并分析优化策略的有效性。
实验结果与讨论:通过实验,我们发现数据库查询的过程中,查询语句的编写和优化对查询效率有重要影响。
以下是我们的实验结果和讨论。
1. 基本查询:基本查询是最简单的查询方式,通过SELECT语句从数据库中选择所需的字段。
我们发现,基本查询的执行效率较高,查询结果准确。
然而,在处理大量数据时,查询时间可能会增加。
为了提高效率,我们可以使用LIMIT子句限制返回的记录数。
2. 条件查询:条件查询是根据特定条件筛选数据的查询方式。
我们使用WHERE子句来指定查询条件,并发现查询结果的准确性和效率与查询条件的选择有关。
使用索引字段作为查询条件可以大大提高查询效率。
3. 排序查询:排序查询是根据指定字段的顺序对查询结果进行排序的方式。
我们使用ORDER BY子句来指定排序字段,并观察到排序查询的执行效率较高。
然而,对于大规模数据集,排序操作可能会导致性能下降。
实验六:数据库综合查询一、实验目的1.掌握SELECT语句的基本语法和查询条件表示方法;2.掌握查询条件种类和表示方法;3.掌握连接查询的表示及使用;4.掌握嵌套查询的表示及使用;5.了解集合查询的表示及使用。
二、实验环境已安装SQL Server 2005 企业版的计算机(13台);具有局域网环境,有固定IP;三、实验学时2学时四、实验要求1.了解SELECT语句的基本语法格式和执行方法;2.了解连接查询的表示及使用;3.了解嵌套查询的表示及使用;4.了解集合查询的表示及使用;5.完成实验报告;五、实验内容及步骤以数据库原理实验5数据为基础,请使用T-SQL 语句实现进行以下操作:1.查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况;select*from course10where Cname like'DB\_%s_'escape'\'2.查询名字中第2个字为‘茹’的学生姓名和学号及选修的课程号、课程名;select Sname,Sno,Cno,Cnamefrom student10,course10where Sname like'_茹%'3.列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;select student10.Sno,Sname,Sdept,Cno,Grade from student10,sc10where student10.Sno=sc10.Sno and Cno in(select Cno from course10where Cname='数学'or Cname='大学英语')4.查询缺少成绩的所有学生的详细情况;SELECT[Sno],[Sname],[Ssex],[Sage],[Sdept]FROM student10where not exists(select*from sc10where Sno=student10.Sno2.and Grade is not null)查询与‘张茹英’(假设姓名唯一)年龄不同的所有学生的信息;SELECT b.*FROM student10a,Student10b where a.Sname='李凯丽'and a.Sage<>b.Sage3.查询所选课程的平均成绩大于张茹英的平均成绩的学生学号、姓名及平均成绩;SELECT student10.Sno,Sname,平均成绩=avg(Grade)FROM student10,sc10where sc10.Sno=student10.Snogroup by student10.Sno,Sname having avg(Grade)>(select avg(Grade)from sc10where Sno=(select Sno from student10where Sname='李凯丽')) 4.按照‚学号,姓名,所在院系,已修学分‛的顺序列出学生学分的获得情况。
北京邮电大学实验报告课程名称数据库系统原理实验内容实验(三)实验名称数据查询实验班级2013211***姓名***指导老师卢向群成绩_________2016年4月20日实验三数据查询实验实验目的通过对实验二中建立的数据库关系表和视图的各种查询的操作,加深对SQL语言和Transact SQL查询语言的了解,掌握相关查询语句的语法和使用方法。
实验内容数据库关系表查询:(1)简单的查询操作,包括单表的查询、选择条件、结果排序等的练习;(2)多表的连接查询,包括等值连接、自然连接等;(3)复杂的查询操作,包括使用分组函数等库函数的查询操作;(4)练习带有IN、比较符的嵌套查询。
具体内容包括:1.简单查询:(1)查询班号为g99401班的学生的学号和姓名;表中没有该班级的学生,故查询结果为空。
(2) 查询“数据库开发技术”课程的学分;(3) 查询选修了课程编号为“dep04_s003”的学生的学号和成绩,并将成绩按降序输出;(4) 查询学号为“g9940205”的学生选修的课程编号和成绩;(5) 查询选修了课程编号为“dep04_s001”且成绩高于85分的学生的学号和成绩。
2.在多表连接的查询实验中,在SQL SERVER提供的交互式语言环境下用TransactSQL语句完成以下查询操作:(1)查询选修了课程编号为“dep04_s002”且成绩高于85分的学生的学号、姓名和成绩;该题与上一题的差别在于学生姓名,这一属性与成绩不在同一张表中,故需要对两张表做自然连接。
(2)查询所有学生的学号、姓名、选修的课程名称和成绩;需要用到三张表,把三张表做自然连接,语句如下:查询结果如下:(3)查询计算机科学系林红同学选修的课程名称、学分和成绩。
(考试成绩>=60有学分,否则无学分。
)这个查询看似困难,实际上只是因为设计的表格较多,所以麻烦而已,只要将五张表自然连接就可以了。
查询结果为空,说明计算机科学系没有叫“林红”的学生。
北京邮电大学实验报告课程名称数据库系统原理实验内容实验(2)数据库表/视图的创建与维护班级2013211** 姓名 ***指导老师卢向群成绩_________2016年4月10日实验二数据库表/视图的创建与维护实验实验目的1.通过进行数据库表的建立操作,熟悉并掌握SQL SERVER数据库表的建立方法,理解关系数据库表的结构,巩固SQL标准中关于数据库表的建立语句;2.通过进行数据库表数据的增加、删除和插入等维护操作,熟悉并掌握SQL SERVER数据库数据的操作方法,巩固SQL中关于数据维护的语句;3.通过对SQL SERVER中建立、维护视图的实验,熟悉SQL SERVER中对视图的操作方法和途径,理解和掌握视图的概念。
实验内容建立相应的表及视图,并熟悉基本操作,例如数据增删改、表结构修改等。
实验环境C/S结构,SQL Server企业版服务器及客户端;数据库存储在服务器上,表和视图定义也存储在服务器上,同学可通过网络使用客户端连接到服务器上进行操作。
实验要求详尽记录每一步骤。
截图并注解。
实验步骤1.熟悉课程实验背景知识;2.根据物理模式使用SQL Server创建相应的表可采用两种方法创建表:A.使用对象资源管理器。
B.SQL语句。
A.使用对象资源管理器的方法:①光标移到“表”上,右键选择新建表。
②输入表的属性、数据类型等信息,还可以设置主键、外键。
但是本次实验不需要先新建表,可以直接导入表。
导入表的步骤见下。
B.用SQL语句创建表。
①在对象资源管理器中单击右键,选择“新建查询”,在空白框中写入创建表的SQL语句。
如图所示:执行命令后,刷新可在资源管理器中看见新建好的book 表。
3.将教师提供的数据导入表;①如图选择“导入数据”。
②选择数据源和路径。
③勾选相应的表格④点击下一步,直到完成数据导入。
刷新可见到导入成功的表。
4.对表做增加记录的操作。
①右键,选择新建查询②在中间空白框内输入SQL语句,用于执行增加记录的操作初始的class 表插入一条记录后的class 表成功插入第13条记录。
实验报告学院:计算机学院课程名称:数据库系统实验名称:实验六数据查询分析实验班级:2009211311姓名:schnee学号:实验六数据查询分析实验1.实验目的通过对不同情况下查询语句的执行分析,巩固和加深对查询和查询优化相关理论知识的理解,提高优化数据库系统的实践能力,熟悉了解MySQL Server 5.5中查询分析器的使用,并进一步提高编写复杂查询的SQL 程序的能力。
2.实验环境操作系统:Microsoft Windows 7旗舰版(32位)。
软件:数据库版本:MySQL 5.53.实验内容及过程3.1.索引对查询的影响3.1的四个小题,由于MySQL没有聚集索引与非聚集索引之分,所以无法验证,直接给出讨论结果。
3.1.1.对结果集只有一个元组的查询分三种情况进行执行(比如查询一个具体学生的信息),用查询分析器的执行步骤和结果对执行进行分析比较。
3.1.1.1.不建立索引,在student表中查询学号为“31427”的学生登录mysql后输入set profiling=1;然后执行语句,则show profiles就显示出来之前输入的命令的执行时间。
如果查询细节的话则show profile for query 2; 2即语句的顺序。
详见截图,则执行时间约为60毫秒:详细的select * from student where sno=’31427’;的执行细节则为:3.1.1.2.在学号上建立非聚集索引3.1.1.3.在学号上建立聚集索引先解释下索引。
索引用来快速地寻找那些具有特定值的记录,所有MySQL 索引都以B-树的形式保存。
如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。
表里面的记录数量越多,这个操作的代价就越高。
如果作为搜索条件的列上已经创建了索引,MySQL 无需扫描任何记录即可迅速得到目标记录所在的位置。
聚集索引又叫主索引,其索引的排序方式和正文的排序方式一致。
实验6 数据库的查询(三)一.实验名称:数据库的查询(三)二.目的和要求:(1)掌握数据汇总的方法。
(2)掌握SELECT语句的GROUP BY子句的作用和使用方法。
(3)掌握SELECT语句的ORDER BY子句的作用和使用方法。
三.实验准备(1)了解数据汇总的方法。
(2)了解SELECT语句的GROUP BY子句的作用和使用方法。
(3)了解SELECT语句的ORDER BY子句的作用和使用方法。
四.实验时间:2011年4月28日五.实验设备和实验环境:(1) PC机。
(2) SQL Server 2000。
六.实验内容:1.数据汇总(1)求数学系学生的平均年龄。
在查询分析器的编辑窗口输人如下语句并执行。
SELECT A VG(Sage) AS ‘数学系平均年龄’FROM StudentWHERE Sdept=’CS’思考与练习:查询数学系学生的最高年龄和最低年龄。
select max(sage) as '最高年龄',min(sage) as '最低年龄'from studentwhere sdept='math'(2)求选修数据库系统学生的平均成绩。
在查询分析器的编辑窗口输入如下的语句并执行:SELECT A VG(Grade) AS ‘数据库系统平均成绩’FROM ScWHERE Cno=(SELECT CnoFROM CourseWHERE Cname=’数据库系统’)思考与练习:求选修数据库系统学生的最高成绩和最低成绩。
select max(grade) as '最高成绩',min(grade) as '最低成绩'from scwhere cno=(select cnofrom coursewhere cname='数据库')(3)求数学系学生的总人数。
在查询分析器的编辑窗口输入如下的语句并执行:SELECT COUNT(Sno)FROM StudentW HERE Sdept=‘数学系’思考与练习:统计选修数据库系统课程成绩大于等于90分的人数。
实验六:数据库综合查询1.查询以‘DB_’开头,且倒数第个字符为‘s’的课程的详细情况; use studentselect*from coursewhere cname like'DB_%S__'2.查询名字中第个字为‘阳’的学生姓名和学号及选修的课程号、课程名;use studentselect sname,student.sno,o,cnamefrom course,student,scwhere sname like'_阳%'and student.sno=sc.sno and o=o3.列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;use studentselect student.sno学号,sname姓名,sdept所在院系,o 选修课程号,grade成绩from course,student,scwhere (cname='数学'or cname='大学英语')and student.sno=sc.sno and o=o4.查询缺少成绩的所有学生的详细情况;use studentselect student.*from student,scwhere grade is null and student.sno=sc.sno注意:若成绩存在,则改为grade=数字5.查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息use studentselect*from studentwhere sage!=(select sagefrom studentwhere sname='张力')6.查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩;use studentselect x.sno学号,sname姓名,平均成绩=AVG(grade)from student x,sc ygroup by sname,x.snohaving avg(grade)>(select AVG(grade)from sc,studentwhere sname='张力' andsc.sno=student.sno )注意:没有成功7.按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。
西北师范大学计算机科学与工程学院学生实验报告
2、查询student表中女生的人数
3、查询teacher表中每一位教授的教师号、姓名和专业名称
4、按性别分组,求student表中每组学生的平均年龄
SQL代码:
use
teaching
go
select sex as'学生性别',avg(DATEDIFF(year,birthday,getdate()))as'平均年龄from student
group by sex
Go
5、利用现有的表生成新表,新表包括学号、学生姓名、课程号和总评成绩。
其中:总
7、输出student表中年龄最大的男生的所有信息
8、查询teacher表中没有职称的职工的教师号、姓名、专业和部门
实验总结:
通过本次实验掌握了SELECT语句的具体用法和简单应用,实现数据库的存储、查询和管理数据。
实验评语:
实验成绩教师签字。
1 实验二数据库表/视图的创建与维护实验一、实验内容1、数据库表实验:(1)创建数据库表创建学生选课数据库中所包含的数据库表,数据库表结构如下:学生(学号,姓名,性别,年龄,系别,班级)课程(课程编号,课程名称,学分)选修(学号,课程编号,学生成绩)要求为各数据库表属性选择合适的数据类型。
列名、数据类型(长度列、精度、小数位数项)、是否允许空值等。
(2)查看和修改表结构。
选择一个数据库表,练习对其表结构进行相应的修改。
(3)练习用交互式的SQL语句分别完成以上操作。
(4)对学生数据库中的三张表分别插入数据;(5)对表中的数据进行修改;(6)对表中的数据进行删除操作2、视图实验:视图的建立、修改、删除(1)建立如下视图:学生选修课程信息视图,包括以下内容:学生学号、姓名、所在系、选修的课程编号、课程名称、成绩(2)修改以上视图,增加学生所在班级信息。
(3)对以上视图删除。
二、实验要求(1)用交互式语句完成以上操作;(2)能够对整个的过程进行批命令操作;(3)要求学生独立完成以上内容。
(4)根据以上内容确定实验步骤。
(5)实验完成后完成要求的实验报告内容。
三、实验平台及环境Windows7 系统Kingbase ES V7软件平台四、实验步骤及结果分析1、数据库表实验:2 (1)创建数据库表创建学生选课数据库中所包含的数据库表,数据库表结构如下:学生(学号,姓名,性别,年龄,系别,班级)课程(课程编号,课程名称,学分)选修(学号,课程编号,学生成绩)创建“学生选课”数据库sql代码Create database “学生选课” withEncoding =’GBK’;创建“学生选课系统”模式:Create shema “学生选课系统”;在“学生选课系统”模式中建立表格“学生”:create table "学生选课系统"."学生”("学号" varchar(10) notnull,“姓名”varchar(10) notnull,“年龄”numeric(1,0) notnull,“系别”varchar(20) notnull,“班级” char (10) notnull,primary key ("学号"));(2)查看和修改表结构。
一、实验名称数据库设计与实现二、实验目的与要求1. 理解数据库设计的基本概念和原则;2. 掌握数据库设计的方法和步骤;3. 学会使用数据库设计工具;4. 能够根据实际需求设计数据库并实现。
三、实验内容1. 数据库需求分析;2. 数据库概念结构设计;3. 数据库逻辑结构设计;4. 数据库物理结构设计;5. 数据库实现与测试。
四、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:Visual Studio Code五、实验步骤1. 数据库需求分析(1)确定系统目标:设计一个图书管理系统,实现对图书的借阅、归还、查询等功能;(2)收集用户需求:分析用户在使用图书管理系统的过程中需要实现的功能和操作;(3)整理需求文档:将收集到的需求整理成文档,为后续设计提供依据。
2. 数据库概念结构设计(1)确定实体:根据需求分析,确定图书、读者、借阅记录等实体;(2)确定实体间关系:分析实体间的关系,如借阅记录与图书、读者之间的关系;(3)绘制E-R图:根据实体和关系,绘制E-R图,表示数据库的概念结构。
3. 数据库逻辑结构设计(1)选择数据库模型:根据E-R图,选择合适的数据库模型,如关系模型;(2)创建数据库表:根据E-R图,将实体转化为数据库表,并定义表结构;(3)定义表间关系:根据实体间关系,定义表间关系,如外键等。
4. 数据库物理结构设计(1)确定存储引擎:选择合适的存储引擎,如InnoDB;(2)设计索引:根据查询需求,设计索引,提高查询效率;(3)调整表结构:根据实际需求,调整表结构,如增加、删除字段等。
5. 数据库实现与测试(1)使用MySQL数据库管理系统创建数据库;(2)根据逻辑结构设计创建表;(3)编写SQL语句实现实体间关系;(4)进行测试,确保数据库功能正常运行。
六、实验结果与分析1. 实验结果(1)成功创建图书管理系统数据库;(2)实现图书的借阅、归还、查询等功能;(3)数据库运行稳定,性能良好。
实验三数据查询实验一、实验内容数据库关系表查询:(1)简单的查询操作,包括单表的查询、选择条件、结果排序等的练习;(2)多表的连接查询,包括等值连接、自然连接等;(3)复杂的查询操作,包括使用分组函数等库函数的查询操作;(4)练习带有IN、比较符的嵌套查询。
二、实验要求(1)用SQL语句完成以上操作(2)要求学生独立完成以上内容。
(3)实验完成后完成要求的实验报告内容。
三、实验环境Windows 7系统Kingbase数据库管理平台四、实验步骤及结果分析1、在简单查询实验中,在sql语句完成以下查询操作:(1)查询“数据库原理”课程的学分;select creditfrom coursewhere cname='数据库原理'(2)查询选修了课程编号为“C01”的学生的学号和成绩,并将成绩按降序输出;select sno,gradefrom scwhere cno='C01'order by grade desc(3)查询学号为“31401”的学生选修的课程编号和成绩;select cno,gradefrom scwhere sno='31401'(4)查询选修了课程编号为“C01”且成绩高于85分的学生的学号和成绩。
select sno,gradefrom scwhere cno='C01' and grade>852、在多表连接的查询实验中,在SQL SERVER提供的交互式语言环境下用Transact SQL 语句完成以下查询操作:(1)查询选修了课程编号为“C01”且成绩高于85分的学生的学号、姓名和成绩;select sc.sno,student.sname,sc.gradefrom student,scwhere o='C01' and sc.grade>85 and student.sno=sc.sno(2)查询所有学生的学号、姓名、选修的课程名称和成绩;select student.sno,student.sname,ame,sc.gradefrom student,course,scwhere o=o and sc.sno=student.sno3、在复杂查询实验中,用SQL语句完成以下查询操作:(1)查询至少选修了三门课程的学生的学号和姓名;select student.sno,student.snamefrom student,scwhere student.sno=sc.snogroup by student.sno,student.snamehaving count(*)>2(2)查询所有学生的学号和他选修课程的最高成绩,要求他的选修课程中没有成绩为空的。
北邮数据库实验报告北邮数据库实验报告引言数据库是现代信息系统中不可或缺的一部分,它被广泛应用于各个领域,包括商业、科学、医疗等。
数据库实验是计算机科学与技术专业的一门重要课程,通过实验可以帮助学生理解数据库的原理和操作技术。
本报告将介绍北邮数据库实验的内容和实验结果。
实验一:数据库的创建与管理在这个实验中,我们学习了如何使用SQL语言创建和管理数据库。
首先,我们创建了一个名为"学生管理系统"的数据库,并在其中创建了学生表、课程表和成绩表。
通过SQL语句,我们定义了每个表的结构和属性,并将数据插入到表中。
我们还学习了如何使用SQL语句对数据库进行查询、更新和删除操作。
通过这个实验,我们对数据库的基本概念和操作有了初步的了解。
实验二:数据库的查询与优化在这个实验中,我们学习了如何使用SQL语句进行复杂的查询操作,并了解了数据库查询的优化技术。
我们通过编写SQL语句,实现了对学生表和成绩表的联合查询,以及对课程表的条件查询。
我们还学习了如何使用索引和视图来提高数据库查询的效率。
通过这个实验,我们深入理解了数据库查询的原理和技巧。
实验三:数据库的事务与并发控制在这个实验中,我们学习了数据库的事务和并发控制机制。
我们通过编写SQL 语句,模拟了多个用户同时访问数据库的情况,并观察了并发操作可能引发的问题,如数据不一致和死锁。
我们还学习了如何使用事务和锁机制来保证数据库的一致性和并发性。
通过这个实验,我们了解了数据库并发控制的原理和方法。
实验四:数据库的备份与恢复在这个实验中,我们学习了数据库的备份和恢复技术。
我们通过使用SQL语句,将数据库的数据和结构导出到文件中,并学习了如何将导出的文件恢复到数据库中。
我们还学习了如何使用数据库管理系统提供的备份和恢复工具来实现数据库的自动备份和恢复。
通过这个实验,我们掌握了数据库备份和恢复的方法和技巧。
实验五:数据库的安全与权限管理在这个实验中,我们学习了数据库的安全和权限管理。
附页实验内容:针对实验数据库shiyan,完成以下单表查询操作:1.查询为工程J1供应红色零件的供应商号码SNO。
2.查询没有使用天津供应商生产的零件并且当前工程所使用零件的颜色全部为红色的工程号JNO。
3.查询至少选用了供应商S1所供应的全部零件的工程号JNO。
4.找出工程项目J2使用的各种零件的名称及其重量。
5.找出上海厂商供应的所有零件号码。
6.找出使用上海产的零件的工程名称。
7.找出没有使用天津产的零件的工程号码。
8.找出重量最轻的红色零件的零件编号PNO。
9.找出供应商与工程所在城市相同的供应商提供的零件号码。
10.找出所有这样的一些<CITY,CITY,PNAME>三元组,使得第一个城市的供应商为第二个城市的工程供应零件的名称为PNAME。
11.重复第15题,但不检索两个CITY值相同的三元组。
12.找出供应商S1为工程名中含有“厂”字的工程供应的零件数量总和。
实验方法、步骤以及实验结果:操作1(1)打开SQL Server查询分析器。
(2)在查询分析器中输入如下所示的SQL脚本:use ShiYangoselect snofrom spjwhere jno='j1'and pno in(select pnofrom pwhere color='红')操作结果:操作2(1)打开SQL Server查询分析器。
(2)在查询分析器中输入如下所示的SQL脚本:use shiyangoselect jnofrom spjwhere sno in (select snofrom swhere city<>'天津')andpno in (select pnofrom pwhere color='红')操作结果:操作3(1)打开SQL Server查询分析器。
(2)在查询分析器中输入如下所示的SQL脚本:select distinct jnofrom spj as xwhere not exists ( select *from spj as ywhere sno='s1'and not exists (select *from spj as zwhere z.pno=y.pno and z.jno=x.jno))操作结果:操作4(1)打开SQL Server查询分析器。
《数据库原理》实验6(连接查询)实验六:连接查询一、实验目的掌握使用连接的方法从多个表中查询数据。
理解内连接、外连接(包括左外连接、右外连接和全外连接)、自身连接的概念和使用。
要求学生熟练掌握在FROM子句和在WHERE子句中指定连接条件的这两种方法。
二、实验环境已安装SQL Server 2005 企业版的计算机三、实验学时2学时四、实验要求1.了解SELECT语句的基本语法格式和执行方法;2.了解连接查询的表示及使用;3.完成实验报告;五、实验原理在查询语句的FROM子句中用以下形式实现各种连接操作:●FROM 表1 [INNER] JOIN 表2 ON 表1.列名=表2.列名(实现内连接)●FROM 表1 LEFT [OUTER] JOIN 表2 ON 表1.列名=表2.列名(实现左外连接)●FROM 表1 RIGHT [OUTER] JOIN 表2 ON 表1.列名=表2.列名(实现右外连接)●FROM 表1 FULL [OUTER] JOIN 表2 ON 表1.列名=表2.列名(实现全外连接)●FROM 表1 AS 别名1 JOIN 表1 AS 别名2 ON 别名1.列名=别名2.列名(实现自身连接)在查询语句的WHERE子句中用以下形式实现各种连接操作:●FROM 表1,表2 WHERE 表1.列名=表2.列名(实现内连接)●FROM 表1 AS 别名1 ,表1 AS 别名2 WHERE 别名1.列名=别名2.列名(实现自身连接)六、实验示例1、检索product 表和sale_item表中数量大于2的相同产品的产品编号、产品名称、数量、单价。
select a.prod_id,a.qty,a.unit_price,b.prod_namefrom sale_item as a inner join product as b /*如果改成left join/right join 试分析结果*/on (a.prod_id=b.pro_id) and a.qty>2order by a.prod_id2、查找出employee表中住址相同的员工的姓名、性别、职称、薪水、住址。
北邮⼤三数据库实验六数据查询分析实验实验六数据查询分析实验实验⽬的通过对不同情况下查询语句的执⾏分析,巩固和加深对查询和查询优化相关理论知识的理解,提⾼优化数据库系统的实践能⼒,熟悉了解Sybase中查询分析器的使⽤,并进⼀步提⾼编写复杂查询的SQL 程序的能⼒。
实验内容1.索引对查询的影响(1)对结果集只有⼀个元组的查询分三种情况进⾏执⾏(必如查询⼀个具体学⽣的信息):不建⽴索引,(学号上)建⽴⾮聚集索引,(学号上)建⽴聚集索引。
建⽴聚集索引:createclusteredindex studenton student(student_id)go建⽴⾮聚集索引:createnonclusteredindex student_indexon student(student_id)go⽤查询分析器的执⾏步骤和结果对执⾏进⾏分析⽐较。
select*from studentwhere student_id='30201'不建⽴索引建⽴聚集索引建⽴⾮聚集索引(2)对结果集中有多个元组的查询(例如查看某门成绩的成绩表)分类似(1)的三种情况进⾏执⾏⽐较。
select*from studentwhere student_id>'30401'不建⽴索引:建⽴聚集索引:建⽴⾮聚集索引:(3)对查询条件为⼀个连续的范围的查询(例如查看学号在某个范围内的学⽣的选课情况)分类似(1)的三种情况进⾏执⾏⽐较,注意系统处理的选择。
select*from studentwhere student_id between'31201'and'31415'不建⽴索引:建⽴聚集索引:建⽴⾮聚集索引:(4)索引代价。
在有索引和⽆索引的情况下插⼊数据(例如在选课情况表SC 上插⼊数据),⽐较插⼊的执⾏效率。
insertinto student values('31710','张攀','男','1993-1-1 00:00:00','计算机','3146')deletefrom student where student_id ='31710'⽆索引:建⽴聚集索引:建⽴⾮聚集索引:2、对相同查询功能不同查询语句的执⾏⽐较分析(1)group byselect avg(score)from scgroupby course_idhaving course_id='C01'select avg(score)from scwhere course_id='C01'⽐较其查询效率可知,没有group by的查询时间⽐较短,查询效率较⾼(2)select student_id,student_name,birthdayfrom student s1where birthday=(select max(birthday)from student s2where s1.department = s2.department)另⼀个:select department,max(birthday)as maxAge into tmpfrom studentgroupby department;select student_id,student_name,birthdayfrom student,tmpwhere student.birthday = tmp.maxAge andtmp.department=student.departmentdroptable tmp查询结果来看,重写的执⾏时间要快⼀些,但相差不多,如果数据库⽐较⼤的话,执⾏效果也许更明显(3)对下⾯两个查询进⾏⽐较select student_name,birthdayfrom studentwhere department!='电信'and birthday>all(select birthdayfrom studentwhere department ='电信')另:select student_name,birthdayfrom studentwhere department!='电信'and birthday>(select max(birthday)from studentwhere department ='电信')3、查询优化除了建⽴适当索引,对SQL 语句重写外,还有其他⼿段来进⾏查询调优,例如调整缓冲区⼤⼩,事先建⽴视图等。
实验成绩:数据库原理与应用实验报告实验指导教师:袁宝库课程主讲教师: 袁宝库报告提交日期: 2012 年10 月18 日北京邮电大学目录实验任务 (3)实验任务一 (4)实验任务二 (5)实验任务三 (7)实验任务四 (8)实验任务五 (9)实验任务六 (12)实验任务七 (20)思考题 (22)实验总结 (24)2《数据库原理与应用》实验任务1、安装SQL Server 20082、使用SQL Server 配置管理器3、使用SQL Server Management Studio4、分别使用对象资源管理器和T-SQL创建一个实验数据库5、使用对象资源管理器修改数据库的相关参数并将一个实验数据库删除6、分别使用对象资源管理器和T-SQL创建、删除和修改表7、分别使用对象资源管理器和T-SQL向表中插入、修改和删除数据思考题:1、配置SQL Server 2008 以允许远程连接使用SQL Server 外围应用配置器配置SQL Server 2008 允许远程连接。
经过前几步的实验,现在已经可以通过远程客户端访问SQL Server 2008数据库服务器了,这里要求2个人一组,互相用自己的客户端(SQL Server Management Studio)连接并访问对方的数据库系统。
3实验任务一:安装SQL Server 20081、实验设计使用SQL Server 2008安装光盘将SQL Server 2008开发版安装到本地计算机,使本地计算机成为服务器和客户端工具;➢选择Windows 7为操作系统,安装开发版SQL Server 2008;➢安装数据库服务、客户端组件、文档、示例和示例数据库;➢命名实例为shijing;➢使用混合模式进行身份验证;2、实验过程使用SQL Server 2008安装介质将SQL Server 2008安装到本地计算机,使本地计算机成为服务器和客户端工具4《数据库原理与应用》实验任务二:使用SQL Server配置管理器1、实验设计使用SQL Server 配置管理器查看和管理SQL Server服务,配置和管理SQL Server网络。
实验六数据查询分析实验
实验目的
通过对不同情况下查询语句的执行分析,巩固和加深对查询和查询优化相关理论知识的理解,提高优化数据库系统的实践能力,熟悉了解Sybase中查询分析器的使用,并进一步提高编写复杂查询的SQL 程序的能力。
实验内容
1.索引对查询的影响
(1)对结果集只有一个元组的查询分三种情况进行执行(必如查询一个具体学生的信息):不建立索引,(学号上)建立非聚集索引,(学号上)建立聚集索引。
建立聚集索引:
create clustered index student
on student(student_id)
go
建立非聚集索引:
create nonclustered index student_index
on student(student_id)
go
用查询分析器的执行步骤和结果对执行进行分析比较。
select*from student
where student_id='30201'
不建立索引
建立聚集索引
建立非聚集索引
(2)对结果集中有多个元组的查询(例如查看某门成绩的成绩表)分类似(1)的三种情况进行执行比较。
select*from student
where student_id>'30401'
不建立索引:
建立聚集索引:
建立非聚集索引:
(3)对查询条件为一个连续的范围的查询(例如查看学号在某个范围内的学生的选课情况)分类似(1)的三种情况进行执行比较,注意系统处理的选择。
select*from student
where student_id between'31201'and'31415'
不建立索引:
建立聚集索引:
建立非聚集索引:
(4)索引代价。
在有索引和无索引的情况下插入数据(例如在选课情况表SC 上插入数据),比较插入的执行效率。
insert into student values
('31710','张攀','男','1993-1-1 00:00:00','计算机','3146')
delete from student where student_id ='31710'
无索引:
建立聚集索引:
建立非聚集索引:
2、对相同查询功能不同查询语句的执行比较分析(1)group by
select avg(score)
from sc
group by course_id
having course_id='C01'
select avg(score)
from sc
where course_id='C01'
比较其查询效率可知,没有group by的查询时间比较短,查询效率较高(2)
select student_id,student_name,birthday
from student s1
where birthday=
(select max(birthday)
from student s2
where s1.department = s2.department)
另一个:
select department,max(birthday)as maxAge into tmp
from student
group by department;
select student_id,student_name,birthday
from student,tmp
where student.birthday = tmp.maxAge and tmp.department=student.department drop table tmp
查询结果来看,重写的执行时间要快一些,但相差不多,如果数据库比较大的话,执行效果也许更明显
(3)对下面两个查询进行比较
select student_name,birthday
from student
where department!='电信'and birthday>all
(select birthday
from student
where department ='电信')
另:
select student_name,birthday
from student
where department!='电信'and birthday>
(select max(birthday)
from student
where department ='电信')
3、查询优化
除了建立适当索引,对SQL 语句重写外,还有其他手段来进行查询调优,例如调整缓冲区大小,事先建立视图等。
设计实现下列查询,使之运行效率最高。
写出你的查询形式,以及调优过程;并说明最优情况下的运行时间。
(1)查找选修了每一门课的学生。
方法一:
with student1(num,account)as
(
select distinct student_id,count(course_id)
from sc
group by student_id
)
select student_name
from student1,student
where student1.account>=5 and student1.num=student.student_id
方法二:
select student_name
from student
where not exists
(
select*
from course
where not exists
(
select*
from sc
where sc.student_id=student.student_id and course.course_id=sc.course_id )
)
尝试了两种方法,相比较而言,第二种方法的执行速度更快。
(2)查找至少选修了课程数据库原理和操作系统的学生的学号。
方法一:
(select student_id
from studentview
where course_name='操作系统')
intersect
(select student_id
from studentview
where course_name='数据库原理')
方法二:
(select student_id
from sc,course
where course.course_name='操作系统'and sc.course_id= course.course_id)
intersect
(select student_id
from sc, course
where course.course_name='数据库原理'and sc. course_id = course. course_id)
相比较而言不使用视图的方法查询速度较快
实验总结:
1、本次实验遇到的第一个问题就是如何建立索引的问题,在之前实验的基础上
开始做,发现设置了主键之后,数据库会默认以主键为搜索码建立聚集索引,而且无法删除索引也不好更改,所以只好重新建表格进行实验,自己来设置聚集索引或非聚集索引
2、实验遇到的第二个问题是在进行第二步实验的时候,原表格中没有age这一
属性,只有birthday这一属性,所以把age全部改为birthday进行实验。
3、实验的第三部分有点难度,想到了一种方法之后就很难再用另一种方法把它
表示出来,参考了网上的一些资料,集思广益完成了查询优化的设计。