实验五--数据查询——复杂查询
- 格式:doc
- 大小:58.00 KB
- 文档页数:11
实验4 复杂查询一.实验目的:1.掌握SQL语句中的group by 子句。
2.掌握SQL语句中的子查询。
3.掌握SQL语句中的order by 子句。
二.实验内容:1.在自己的文件夹下建立一个“教学数据库”,表如下:2.S(学生表)C(课程表)SC(成绩表)S(学生表)SNO SN SEX AGE DEPT S1 赵亦女17 计算机S2 钱尔男18 信息S3 孙珊女20 信息S4 李思男21 自动化S5 周武男19 计算机S6 孙丽女20 自动化C(课程表)CNO CN CTC1 程序设计60C2 微机原理80C3 数字逻辑60C4 数据结构80C5 数据库60C6 编译原理60C7 操作系统60SC(成绩表)SNO CNO SCORES1 C1 90S1 C2 85S2 C5 57S2 C6 80S2 C7S2 C4 70S3 C1 75S3 C2 70S3 C4 85S4 C1 93S4 C2 85S4 C3 83S5 C2 893.利用SQL语句完成下列查询:(1)查询全体学生的学号、姓名、课程名和成绩。
(2)查询选修了课程的学生的人数。
(3)查询选修C1或C2且分数大于等于85分学生的姓名、课程名和成绩。
(4)查询所有姓孙的学生的学号和姓名。
(5)查询没有考试成绩的学生的学号、姓名和课程名。
(6)查询选修C1课程的最高分,显示课程号、课程名和最高分。
(7)查询每个学生的学号、姓名和平均成绩,按平均成绩的降序排列。
(8)查询比孙珊同学所选修课程最高成绩还高的学生的姓名、课程名和成绩。
(9)查询至少选修两门课程学生的学号、姓名和选课门数。
(10)查询考试成绩不及格学生的姓名、课程名和成绩。
实验五数据查询目的和要求1.了解查询的概念和方法;2.掌握查询分析器的使用方法;3.掌握SELECT语句在单表查询中的应用;4.掌握复杂查询的使用方法;5.掌握多表连接的方法;6.掌握SELECT语句在多表查询中的应用。
内容和步骤一、单表查询1.简单查询打开查询分析器,从teacher表中分别检索出教师的所有信息,以及仅查询教工号、姓名和职称。
语句及查询结果如图5.1所示:`select * from teacherselect 教工号,姓名from teacher如要查询时改变列标题的显示,则从te acher表中分别检索出教师教工号、姓名、家庭住址信息并分别加上‘教师姓名’、‘教工号’、‘家庭住址’等标题信息,语句及查询结果如下:使用TOP关键字:分别从teacher中检索出前2条及前面67%的教师的信息。
语句及查询结果如下:select top 2 * from teacherselect top 67 percent * from teacher使用DISTINCT关键字:从teacher表中检索出教师的职称并且要求显示的职称不重复。
语句及查询结果如下:select distinct 职称from teacher6.用计算列:,为teacher表中架一个工资字段,并输入几个值,将teacher表中各教师的姓名、教工号及工资按95%发放的信息,第2条语句将工资按95%发放后列名该为‘预发工资’。
语句如下:select 教工号,姓名,工资*0.95 from teacherselect 教工号,姓名,工资*0.95 AS 预发工资from teacher7.使用ORDER BY子句对查询的结果进行排序使用ORDER BY语句可以对查询的结果进行排序,ASC、DESC分别是升序和降序排列的关键字,系统默认的是升序排列。
从teacher表中查询工资大于2800的教师的教工号、姓名,并按升序排列,语句及查询结果如下:select 教工号,姓名from teacherwhere 工资>2800 order by 工资ASC2.条件查询⑴使用关系运算符:从teacher表中查询出教工号小于2130的教师资料,语句如下:select * from teacher where 教工号<2130⑵使用BETWEEN AND谓词:从teacher表中查询出教工号界于2100和2130之间的教师资料,语句如下:select * from teacher where 教工号 between 2100 and 2130⑶使用IN谓词:从teacher表中查询出职称为“教授”或“副教授”的教师的教工号、教师姓名、职称及家庭住址,语句如下:select 教工号,姓名,家庭住址,职称 from teacherwhere 职称 in ('教授','副教授')⑷使用LIKE谓词:从teacher表中分别检索出姓伍的教师的资料,或者姓名的第2个字是寿或立的教师的资料,语句如下:select * from teacher where 姓名 like '伍%'select * from teacher where 姓名 like '_[寿,立]%'二、多表查询数据库各表中存放着不同的数据,用户经常需要用多个表中的数据来组合提炼出所需要的信息,如果一个查询需要对多个表进行操作,就称为关联查询,关联查询的结果集或结果表称为表之间的连接。
实验五复杂查询1 实验目的与要求(1) 熟练掌握SQL语句的使用。
(2) 熟练使用SQL语句进行连接操作。
2 实验内容(1)在订单明细表中查询订单金额最高的订单。
select a.*from orderdetail a,ordermaster bwhere a.orderno=b.orderno and ordersum=(select max(ordersum)from ordermaster)(2)找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。
select productno 商品编号,orderno 订单编号,quantity 订货数量,quantity*price 订货金额from orderdetailwhere productno in(select productnofrom orderdetailgroup by productnohaving count(*)>=3)order by quantity desc(3)查找销售总额少于5000元的销售员编号、姓名和销售额。
select a.salerno 销售员编号,b.employeename 姓名,sum(ordersum)销售额from ordermaster a,employee bwhere a.salerno=b.employeenogroup by a.salerno,b.employeenamehaving sum(ordersum)<5000(4)找出目前业绩未超过5000元的员工,并按销售业绩的降序排序输出。
select salerno 销售员编号,sum(ordersum)销售业绩from ordermastergroup by salernohaving sum(ordersum)<=5000order by sum(ordersum)desc(5)查询订购的商品数量没有超过10个的客户编号和客户名称。
实验五:数据库综合查询一、实验目的1.掌握SELECT语句的基本语法和查询条件表示方法;2.掌握查询条件种类和表示方法;3.掌握连接查询的表示及使用;4.掌握嵌套查询的表示及使用;5.了解集合查询的表示及使用。
二、实验环境已安装SQL Server企业版的计算机(120台);具有局域网环境,有固定IP;三、实验学时2学时四、实验要求1.了解SELECT语句的基本语法格式和执行方法;2.了解连接查询的表示及使用;3.了解嵌套查询的表示及使用;4.了解集合查询的表示及使用;5.完成实验报告;五、实验内容及步骤1.利用Transact-SQL嵌套语句实现下列数据查询操作。
1) 查询选修了计算机体系结构的学生的基本信息。
select*from studentwhere Sno in(select Sno from coursewhere Cno in(select Cno from sc where Cname='计算机体系结构'))2) 查询年龄比李勇小的学生的学号和成绩。
select a.sno,grade from student a,coursewhere a.sno=course.sno and sage<(select sage from student where sname='李勇')3) 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。
select*from student where dnum<>'D1'AND SAGE>(select min(sage)from student where dnum='D1')4) 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。
select*from student where dnum<>'D3'AND SAGE>all(selectsage from student where dnum='D3')5) 查询‘C1’课程的成绩高于70的学生姓名。
数据库实验五在学习数据库的过程中,实验是巩固理论知识、提高实践能力的重要环节。
本次实验五主要围绕数据库的某些关键操作和应用展开,通过实际动手操作,让我们对数据库的理解更加深入和全面。
本次实验的环境是常见的数据库管理系统,如 MySQL 或 SQL Server 等。
实验的目的是让我们熟练掌握数据库的查询、更新、插入和删除等基本操作,同时能够运用这些操作解决一些实际的问题。
实验的第一个任务是进行数据的查询操作。
查询是从数据库中获取所需信息的重要手段。
我们需要根据给定的条件,从数据表中筛选出符合要求的数据。
这就涉及到了使用 WHERE 子句来设定条件,以及各种运算符如等于(=)、大于(>)、小于(<)、不等于(<>)等的运用。
同时,还需要掌握连接(JOIN)操作,将多个相关的数据表连接起来,以获取更全面和准确的信息。
例如,在一个学生成绩管理系统中,要查询某个班级中数学成绩大于 80 分的学生名单,就需要先从学生表中获取班级信息,再从成绩表中筛选出数学成绩符合条件的记录,最后通过学生学号将两个表连接起来,得到最终的结果。
接下来是数据的更新操作。
这包括对已有数据的修改和删除。
在进行更新操作时,必须格外小心,因为一旦操作失误,可能会导致数据的丢失或错误。
在修改数据时,同样要使用 WHERE 子句来指定要修改的记录。
例如,要将某个学生的数学成绩从 80 分修改为 90 分,就需要明确指定该学生的学号或其他唯一标识。
而删除数据则需要更加谨慎,通常建议先进行查询,确认要删除的记录准确无误后,再执行删除操作。
数据的插入操作也是实验的重要部分。
插入新的数据可以增加数据库的信息量。
在插入数据时,需要注意数据的类型和格式要与数据表的定义相匹配。
比如,一个学生信息表中,学号是整数类型,姓名是字符串类型,出生日期是日期类型,如果插入的数据类型不正确,就会导致插入失败。
在实验过程中,我也遇到了一些问题和挑战。
比如,在进行复杂的查询操作时,由于条件设置不当,导致查询结果不准确。
实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。
四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。
(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。
(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。
(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。
(5)查询既订购了P2*******商品,又订购了P2*******商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。
(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。
(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。
(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。
(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。
(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。
(13)统计客户号为“C20050001”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。
(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。
(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。
数据查询实验报告总结一、引言数据查询是信息技术领域中一项重要的技术,通过查询可以快速获取所需的数据,帮助人们做出准确的决策。
为了加深对数据查询的理解,我们进行了一系列的实验研究。
本报告旨在总结实验过程、结果和收获,并提出一些建议和展望。
二、实验内容本次实验我们采用了关系数据库查询语言SQL(Structured Query Language)来进行数据查询的实践。
具体实验内容如下:1. 数据库建立与数据录入:我们首先设计并建立了一个关系数据库,并录入了1000条实验数据,包括姓名、年龄、性别、身高、体重等信息。
2. SQL基本查询:我们通过使用SQL语句实现了一些基本的数据查询操作,如SELECT、FROM、WHERE、ORDER BY等关键词的使用,掌握了基本的查询语法和操作。
3. 条件查询:我们进一步学习了SQL的条件查询,通过使用WHERE子句结合比较运算符、逻辑运算符和通配符,能够根据特定条件查询出需要的数据。
4. 聚合查询:我们学习了SQL的聚合函数,如SUM、AVG、COUNT等,从而能够进行数据的统计和计算。
5. 多表查询:我们探索了SQL的多表查询,通过JOIN操作和关联条件,实现了多个表之间的数据连接和查询。
三、实验结果通过上述实验,我们获得了以下结果:1. 数据库建立与数据录入:我们成功建立了一个包含1000条记录的数据库,并录入了实验所需的数据。
2. SQL基本查询:我们能够使用基本的SQL语句实现数据查询,如SELECT语句用于选取需要的列,FROM语句用于指定表,WHERE 语句用于设定条件,ORDER BY语句用于排序等。
3. 条件查询:通过使用WHERE子句和运算符,我们可以根据不同的条件查询出满足要求的数据,提高了查询的精确性和效率。
4. 聚合查询:我们可以使用聚合函数对数据进行统计和计算,比如求和、平均值、总数等,实现了对数据的快速分析和汇总。
5. 多表查询:通过使用JOIN操作,我们可以将多个表连接起来进行联合查询,从而获得更丰富的信息和更全面的分析结果。
数据库原理实验报告一、实验目的本次数据库原理实验旨在通过实际操作和实践,深入理解数据库的基本概念、原理和技术,掌握数据库设计、创建、管理和操作的方法,提高解决实际问题的能力和数据处理的技能。
二、实验环境本次实验使用的软件环境为 Microsoft SQL Server 2019,操作系统为 Windows 10。
硬件环境为一台具备 8GB 内存、Intel Core i5 处理器的计算机。
三、实验内容与步骤(一)数据库设计1、需求分析根据给定的业务场景,明确数据库需要存储的信息和数据之间的关系。
例如,对于一个学生管理系统,需要存储学生的基本信息、课程信息、成绩信息等,并且要确定这些信息之间的关联,如学生与课程的选课关系、课程与成绩的对应关系等。
2、概念设计使用 ER 图(EntityRelationship Diagram,实体关系图)对需求进行建模,清晰地表示出实体(如学生、课程)、属性(如学生的学号、姓名)和实体之间的关系(如选课关系)。
3、逻辑设计将 ER 图转换为关系模式,确定表的结构,包括表名、列名、数据类型、主键和外键等。
例如,学生表(学号,姓名,年龄,性别),课程表(课程号,课程名,学分),选课表(学号,课程号,成绩)。
(二)数据库创建1、启动 SQL Server 2019 数据库管理系统。
2、使用 CREATE DATABASE 语句创建数据库,指定数据库的名称、文件存储位置和初始大小等参数。
3、在创建的数据库中,使用 CREATE TABLE 语句创建各个表,按照逻辑设计的结果定义表的结构。
(三)数据插入1、使用 INSERT INTO 语句向表中插入数据,确保数据的完整性和准确性。
例如,向学生表中插入学生的信息:INSERT INTO Students (StudentID, Name, Age, Gender) VALUES (1, '张三', 20, '男')。
计算机科学与信息学院 软件工程系上机实验报告《数据库原理》实验报告《数据库原理》实验报告题目题目实验4 复杂查询(一)姓名姓名 *** 班级班级 *** 日期日期 ***实验环境:实验环境:SQL Server 2000 SQL Server 2000实验内容与完成情况:一、实验目的本实验的目的使学生熟练掌握SQL Server 查询分析器的使用方法,本实验的目的是使学生进一步掌握SQL Server 查询分析器的使用方法,加深SQL 语言的连接查询的理解。
语言的连接查询的理解。
二、实验内容本实验使用实验三中建立的基本表Student Student、、Course 、SC 和Teacher 中的元组。
中的元组。
Student 学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所在系所在系 Sdept 200215121 李勇李勇 男 20 CS 200215122 刘晨刘晨 女 19 CS 200215123 王敏王敏 女 18 MA 200215125 张立张立 男 19 IS 200215126 欧阳丽欧阳丽女21FL Course课程号课程号 Cno 课程名课程名Cname 先行课先行课 Cpno 学分学分 Ccredit 1 数据库数据库 5 4 2数学数学 2 3 信息系统信息系统 1 4 4 操作系统操作系统 6 3 5 数据结构数据结构 7 4 6 数据处理数据处理 2 7 PASCAL6 4 8DB_Design12SC学号学号 Sno 课程号课程号 Cno 成绩成绩 Grade 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 200215122 1 200215123 2 50 200215123 3 70Teacher教师编号教师编号 Tno 教师教师姓名姓名Tname 性 别 Tsex 年 龄 Tage 所在系所在系 Tdept 职称职称 Ttitles 工资工资Twage系主任系主任编号编号 Tdno 110001 钟灵钟灵 女27 CS 讲师讲师 2800110005 110002 杨毅杨毅 男 42 CS 副教授副教授 3500 110005 110003 周倩周倩 女 25 CS 讲师讲师 2800 110005 110005 陈文茂陈文茂 男 48 CS 教授教授 4000 110005 120001 江南江南 男 30 IS 副教授副教授 3500 120003 120002 刘洋刘洋 男 28 IS 讲师讲师 2800 120003 120003 汪明汪明 男 44 IS 教授教授 4000 120003 120004 张蕾张蕾 女 35 IS 副教授副教授 3500 120003 130001 邹佳羽邹佳羽 女 25 MA 讲师讲师 2800 130003 130002 王力王力 男 30 MA 讲师讲师 2800 130003 130003 王小峰王小峰 男 35 MA 副教授副教授 3500 130003 130004 魏昭魏昭 男 40 MA 副教授副教授 3500 130003 140001 王力王力 男 32 FL 副教授副教授 3500 140005 140002 张小梅张小梅 女 27 FL 讲师讲师 2800 140005 140003 吴娅吴娅 女 27 FL 讲师讲师 2800 140005 140004 陈姝陈姝 女 35 FL 副教授副教授 3500 140005 140005 周斌周斌男44FL教授教授4000140005在SQL Server2000查询分析器中,使用查询分析器中,使用连接查询连接查询完成如下查询要求:完成如下查询要求: (1) 求选课学生的基本情况以及他的选修情况;求选课学生的基本情况以及他的选修情况;SELECT Student .*,SC .* FROM S tudent Student ,SCWHERE Student .Sno =SC .Sno ;(2) 求学生的学号、姓名、选修的课程号及成绩;求学生的学号、姓名、选修的课程号及成绩;SELECT Student.Sno,Student.Sname,o,SC.GradeStudent,SCFROM S tudentWHERE Student.Sno=SC.Sno;(3) 求选修课程号为1且成绩在90以上的学生学号、姓名和成绩;以上的学生学号、姓名和成绩; SELECT Student.Sno,Student.Sname,SC.GradeFROM S tudentStudent,SC;WHERE Student.Sno=SC.Sno AND o=1 AND Grade>90(4) 求每一门课程的间接先行课(即先行课的先行课);求每一门课程的间接先行课(即先行课的先行课); SELECT o,SECOND.Cpno as '该课程的先行课'FROM C ourseCourse FIRST, Course SECONDWHERE o=o;(5) 求选修了数学课的学生的学号和姓名;求选修了数学课的学生的学号和姓名;SELECT Student.Sno,Student.SnameStudent,SC,CourseFROM S tudentWHERE Student.Sno=SC.Sno AND o=o AND ame='数学';(6) 求学生李勇选修的总学分;求学生李勇选修的总学分;SELECT SC Sno,SUM(SC Grade) as '总学分'Student,SCFROM S tudentWHERE Student.Sno=SC.Sno AND Student.Sname='李勇'Group by SC.Sno;(7) 求各学生选修的总学分;求各学生选修的总学分;SELECT Student.Sname,SUM(SC.Grade) as '总学分'Student,SCFROM S tudentWHERE Student.Sno=SC.SnoGroup by Student.Sname;(8) 求课程“数据库”的平均成绩;求课程“数据库”的平均成绩;SELECT ame as'数据库',AVG(SC.Grade) as '平均成绩' Course,SCFROM C ourseWHERE o=o AND ame='数据库'Group by ame;(9) 求计算机系学生的选课情况;求计算机系学生的选课情况;SELECT SC.*,Student.Sname,Student.SdeptFROM SC,StudentWHERE SC.Sno=Student.Sno AND Student.Sdept ='CS' ;W HERE(10) 求和钟灵在同一个系的老师姓名;和钟灵在同一个系的老师姓名;SELECT TnameFROM TeacherWHERE Tdept=SELECT Tdept(TeacherFROMTname ='钟灵');WHERE(11) 求吴娅所在系的教师人数;吴娅所在系的教师人数;SELECT COUNT(Tdept)FROM TeacherWHERE Tdept =(SELECT TdeptFROM TeacherWHERE Tname = ‘‘吴娅’);WHERE Tname =(12) 求和王小峰同一职称的教师姓名和所在系;和王小峰同一职称的教师姓名和所在系; SELECT Tname,TdeptFROM TeacherWHERE Ttitles=(SELECT TtitlesFROM TeacherWHERE Tname = ‘‘王小峰’)WHERE Tname =AND Tname != ‘‘王小峰’;AND Tname !=(13) 求和邹佳羽工资相同的教师人数;和邹佳羽工资相同的教师人数;SELECT count(Twage)FROM TeacherWHERE Twage=(TwageSELECT T wageFROM TeacherWHERE Tname= '邹佳羽')AND Tname != '邹佳羽';(14) 求汪明所在系教师的平均工资和最高工资;汪明所在系教师的平均工资和最高工资; SELECT AVG(Twage) as '平均工资',MAX(Twage) as '最高工资' FROM TeacherWHERE Tdept=(TdeptSELECT T deptFROM TeacherWHERE Tname= '汪明');(15) 求至少选修了8个学分的学生学号。
复杂查询实验心得一、引言复杂查询是现代数据库系统中非常重要的一项功能,它可以帮助用户根据特定条件获取想要的数据。
在实际使用中,我们可能需要进行多个条件的组合查询,这就需要使用复杂查询语句。
本文将探讨复杂查询实验的心得体会,并对其中的关键点进行详细阐述。
二、基本概念在开始进行复杂查询实验之前,我们需要先了解一些基本的概念。
以下是几个重要的概念:1. 表在数据库中,数据以表的形式进行组织和存储。
每个表由多个列组成,每一行则代表一个记录。
2. 条件查询条件查询是根据特定的条件从数据库中检索数据的过程。
我们可以使用关键字WHERE来指定条件。
例如,查询所有年龄大于18岁的用户。
3. 逻辑运算符逻辑运算符是用于连接多个条件的关键字。
常见的逻辑运算符有AND、OR和NOT。
它们可以帮助我们进行复杂的条件组合查询。
三、实验过程在进行复杂查询实验时,我们应该按照以下步骤进行:1. 确定查询目标首先,我们需要明确自己想要从数据库中查询的数据,确定查询目标是实验成功的关键。
2. 分析查询条件接下来,我们要分析查询条件,确定需要使用的条件和逻辑运算符。
可以通过思维导图或者逻辑推理的方式来帮助我们理清思路。
3. 编写查询语句在确定查询目标和查询条件后,我们可以开始编写查询语句。
查询语句的格式为SELECT * FROM table WHERE condition。
根据实际需要,我们可以选择查询特定的列而不是所有列。
4. 优化查询性能在编写查询语句后,我们可以对查询进行性能优化。
可以通过添加索引、使用合适的数据类型和重构复杂的查询语句来提高查询效率。
5. 测试和调试最后,我们需要进行测试和调试。
可以使用样例数据进行测试,确保查询结果符合预期。
如果查询出现错误,我们需要及时进行调试,找出问题所在并进行修复。
四、要点总结在进行复杂查询实验时,以下几个要点需要特别注意:1. 清晰的逻辑思路在编写复杂查询语句之前,我们要先理清思路,确定查询目标和条件。
实验五查找及排序实验课程名:数据结构与算法(3)运行结果分析:运用顺序结构完成查询。
任务二:哈希表的开放定址法算法。
在输出结果中显示查找成功与查找不成功信息。
解答:(1)源代码:#include<string.h>#include<ctype.h>#include<malloc.h> // malloc()等#include<limits.h> // INT_MAX等#include<stdio.h> // EOF(=^Z或F6),NULL#include<stdlib.h> // atoi()#include<io.h> // eof()#include<math.h> // floor(),ceil(),abs()#include<process.h> // exit()#include<iostream.h> // cout,cin// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行(2)运行结果:(3)运行结果分析:运用哈希表开放定地址算法实现。
任务三:各种插入排序算法的实现。
解答:(1)源代码:#include<string.h>#include<ctype.h>#include<malloc.h> // malloc()等#include<limits.h> // INT_MAX等#include<stdio.h> // EOF(=^Z或F6),NULL #include<stdlib.h> // atoi()#include<io.h> // eof()(3)运行结果分析运用直插、折半插、路插的方法编写。
--创建学生视图if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_stu]') and OBJECTPROPERTY(id, N'IsView') = 1)drop view [dbo].[v_stu]gocreate view v_stuasselect sid, sname, ssexy, sbdate, Datediff(year, sbdate, getdate()) as sage, stele,ugrade.gid, gname, gyear,udept.did, dname, daddr, dtele, demail,uteacher.tid, tname, tsexy, tbdate, tfield, tprof, tele, qq, email, msnfrom ustudent, ugrade, udept, uteacherwhere ustudent.gid=ugrade.gid and ugrade.did=udept.did and ugrade.tid=uteacher.tid--创建选修课程视图if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_sc]') and OBJECTPROPERTY(id, N'IsView') = 1)drop view [dbo].[v_sc]gocreate view v_scasselect ustudent.sname, usc.*, cname, credit, pcid, chour, cattr, cnumfrom ustudent, usc, ucoursewhere ustudent.sid=usc.sid and usc.cid=ucourse.cid--1、显示所有学生的详细信息,包括学号、姓名、性别、年龄、班级名称,入学年份select sid, sname, ssexy, sage, gname, gyearfrom v_stu--2、显示信息科学与技术系同学的名单,包括学号、姓名、性别、年龄、班级名称、入学年份select sid, sname, ssexy, sage, gname, gyearfrom v_stuwhere dname='信息科学与技术系'--3、显示选修了“数据库”的所有同学的学号、姓名select sid, snamefrom v_scwhere cname='数据库'--4、显示白云同学的班主任老师的姓名、联系电话select tname, telefrom v_stuwhere sname='白云'--5、显示白云同学所在院系的名称、办公地点与联系电话select dname, daddr, dtelefrom v_stuwhere sname='白云'--6、统计计算机科学与技术系每个同学已经修完的学分,显示学号、姓名、学分总数select v_stu.sid, v_stu.sname, sum(v_sc.credit)from v_stu, v_scwhere v_stu.sid=v_sc.sid and v_stu.dname='计算机科学与技术系'group by v_stu.sid, v_stu.sname--7、显示李山同学已修课程及期末成绩select sid, sname, cname, score2from v_scwhere sname='李山'--8、显示计算机科学与技术系、信息科学与技术系的班级名称、入学年份、班导名称与联系电话select distinct gname, gyear, tname, telefrom v_stuwhere dname in ('计算机科学与技术系', '信息科学与技术系')--9、显示2006年入学的同学的学号、姓名、班级名称select sid, sname, gnamefrom v_stuwhere gyear='2006'--10、显示已修数据库的同学的学号、姓名及期末成绩select sid, sname, score2from v_scwhere cname='数据库'--11、显示平均成绩75分以上的课程名称与平均成绩select cname, cast(avg(score2) as dec(5,2)) as '平均成绩'from v_scgroup by cid, cnamehaving avg(score2)>75--12、显示平均成绩80分以上同学的学号、姓名与平均成绩select sid, sname, cast(avg(score2) as dec(5,2)) as '平均成绩'from v_scgroup by sid, snamehaving avg(score2)>80--13、显示一周课时数为6节及以上的教师的姓名与研究领域select tname, tfieldfrom uteacherwhere tid in (select tidfrom ujobtablegroup by tidhaving sum(len(timeseg))>=6)--14、按照班级统计期末平均成绩,显示班级名称与平均成绩select gname, cast(avg(score2) as dec(5,2)) as '平均成绩'from v_stu, uscwhere v_stu.sid=usc.sidgroup by gid, gname--15、按照学期统计计算机科学与技术系的期末平均成绩select term, cast(avg(score2) as dec(5,2)) as '平均成绩'from v_stu, uscwhere v_stu.sid=usc.sid and v_stu.dname='计算机科学与技术系' group by term--16、统计每个院系一周的课时数,显示院系名称与课时数select dname, sum(len(timeseg))from ujobtable, uteacher, udeptwhere ujobtable.tid=uteacher.tid and uteacher.did=udept.didgroup by udept.dname--17、显示没有选修任何课程的学生学号、姓名、班级名称select sid, sname, gnamefrom v_stuwhere sid not in (select sid from usc)--18、显示上过李飞老师的课的学生的学号、姓名与联系电话select sid, sname, stelefrom ustudentwhere gid in (select gidfrom ujobtable, uteacherwhere ujobtable.tid=uteacher.tid and uteacher.tname='李飞')--19、显示一周6节课及以上的课程名称、学分select cname, creditfrom ucoursewhere cid in (select cidfrom ujobtablegroup by cidhaving sum(len(timeseg))>=6)--20、显示一周6节课及以上班级名称select gnamefrom ugradewhere gid in (select gidfrom ujobtablegroup by gidhaving sum(len(timeseg))>=6)--21、查询周四上午第3节有课的同学的学号、姓名与班级名称select sid, sname, gnamefrom v_stu, ujobtablewhere v_stu.gid=ujobtable.gid and week='4' and timeseg like '%3%'--22、显示没有不及格课程的班级的名称select distinct gnamefrom ugrade, ustudent, uscwhere ugrade.gid=ustudent.gidand ustudent.sid=usc.sidand ustudent.gid not in (select distinct gidfrom ustudent, uscwhere ustudent.sid=usc.sid and usc.score2<60)--23、显示已修数据库的同学的信息,包括学号、姓名、班级名称select v_stu.sid, v_stu.sname, gnamefrom v_stu, v_scwhere v_stu.sid=v_sc.sid and v_ame='数据库'--24、显示不及格1门以上的同学学号、姓名、门数select sid, sname, count(cid)from v_scwhere score2<60group by sid, snamehaving count(cid)>1--25、统计每个班级的最高分,显示班级名称、成绩select gname, max(score2) as '最高分'from v_sc, ustudent, ugradewhere v_sc.sid=ustudent.sid and ustudent.gid=ugrade.gidgroup by ugrade.gid, gname--26、显示一周8节课及以上的学生的名单,显示学号、姓名、班级select distinct sid, sname, gnamefrom v_stu, ujobtablewhere v_stu.gid in (select gidfrom ujobtablegroup by gidhaving sum(len(timeseg))>8)--27、显示计算机科学与技术1班一周上课的时间、地点,课程名称select week, timeseg, room, cnamefrom ujobtable, ugrade, ucoursewhere ujobtable.gid=ugrade.gid and ujobtable.cid=ucourse.cid and ugrade.gname='计算机科学与技术1班'--28、统计教授上课的课时数,显示姓名、课时数select tname, sum(len(timeseg))from ujobtable, uteacherwhere ujobtable.tid=uteacher.tid and uteacher.tprof='教授'group by uteacher.tid, uteacher.tname--29、显示没有班导师的班级名称、院系名称select gname, dnamefrom ugrade, udeptwhere ugrade.did=udept.did and ugrade.tid is null--30、显示指导两个班级以上的班导的姓名、所指导的班级名称select tname, gnamefrom uteacher, ugradewhere uteacher.tid=ugrade.tidand uteacher.tid in (select uteacher.tidfrom uteacher, ugradewhere uteacher.tid=ugrade.tidgroup by uteacher.tidhaving count(ugrade.gid)>1)。
数据库实验五实验报告一、实验目的本实验旨在通过学习数据库的索引和优化,掌握数据库索引的使用和优化方法,进一步提升数据库的查询性能。
二、实验要求1.理解数据库索引的概念及作用。
2.熟悉索引的创建、删除和修改操作。
3.了解索引的类型及适用场景,并能选取合适的索引类型。
4.能通过观察执行计划和使用适当的策略对查询进行优化。
三、实验步骤1.索引的创建和删除首先,在已创建的数据库中选择适合创建索引的表。
通过如下语句创建一个测试表:CREATE TABLE test_table(id INT PRIMARY KEY,name VARCHAR(50),age INT);然后,可以在表的字段上创建索引,通过如下语句创建一个索引:CREATE INDEX idx_name ON test_table(name);索引创建完成后,可以通过如下语句删除索引:DROP INDEX idx_name ON test_table;2.索引的修改可以使用ALTER TABLE语句对已创建的索引进行修改。
例如,修改索引的名称:ALTER INDEX idx_name RENAME TO new_idx_name;或者修改索引的定义:ALTER INDEX idx_name RENAME COLUMN new_column_name;3.选择合适的索引类型在创建索引时,需要选择合适的索引类型。
常见的索引类型包括B树索引、哈希索引和全文索引。
- B树索引:适用于等值查询、范围查询和排序场景。
- 哈希索引:适用于等值查询,不支持范围查询和排序。
- 全文索引:适用于全文搜索场景。
4.查询优化在进行数据库查询时,可以通过观察执行计划来判断查询是否有优化空间。
执行计划是数据库在执行查询时生成的查询执行步骤和顺序图,可以根据执行计划优化查询。
另外,还可以通过以下策略对查询进行优化:- 使用合适的索引类型- 避免使用LIKE操作符- 避免使用SELECT *查询所有字段- 避免多表连接查询- 使用JOIN代替子查询- 避免使用不必要的DISTINCT操作符- 分页查询时,使用LIMIT关键字限制结果数量四、实验结果与分析通过实验,我们成功创建了一个测试表,并在该表的字段上创建了索引。
浙江树人大学信息科技学院《数据库系统原理》实验指导书适合专业:计算机科学与技术本科专业编写部门:电子商务教研室编写日期:2012.02实验一:SQL Server 2005服务器管理... 错误!未定义书签。
实验二:创建和管理数据库.............. 错误!未定义书签。
实验三:数据定义 .............................. 错误!未定义书签。
实验四:数据更新 .............................. 错误!未定义书签。
实验五:数据查询1——简单查询... 错误!未定义书签。
实验六:数据查询(2)—连接查询错误!未定义书签。
实验七:数据查询(3)—综合........ 错误!未定义书签。
实验八:视图 ...................................... 错误!未定义书签。
实验九:约束、默认、规则.............. 错误!未定义书签。
实验十:存储过程 .............................. 错误!未定义书签。
实验十一:触发器(1).................... 错误!未定义书签。
实验十二:触发器(2).................... 错误!未定义书签。
实验十三:安全性管理 ...................... 错误!未定义书签。
实验十四:数据库的备份与还原...... 错误!未定义书签。
实验一:SQL Server 2005服务器管理一、实验目的通过实验使学生掌握SQL Server 2005数据库服务器启动、暂停、停止的方法;掌握SQL Server 2005数据库服务器的注册方法。
二、原理解析1、SQL Server 2005服务器注册注册服务器就是在SQL Server Management Studio中登记服务器,然后把它加入到一个指定的服务器组中,并在SQL Server Management Studio中显示SQL Server服务器的运行状态和在SQL Server Management Studio连接时自动启动SQL Server服务器。
实验三实验名称:简单和复杂的单表查询一、实验目的1.熟练掌握用SELECT语句实现简单的单表查询。
掌握SELECT子句、FROM子句、WHERE子句及ORDER BY 子句的用法。
2. 熟练掌握SELECT查询语句中的Group by 子句、Having子句的用法,以及汇总函数的使用。
二、实验原理1.用SELECT语句实现简单的单表查询。
在SELECT子句中用TOP关键字来限制返回到结果集中的记录数目,用DISTINCT关键字从结果集中去掉重复的记录。
WHERE子句中用关系比较符、[NOT] BETWEEN、[NOT] IN、LIKE、IS [NOT]NULL及逻辑运算符构成查询条件,对结果集中的记录进行筛选。
ORDER BY子句将根据查询结果集中一个或多个字段对查询结果进行排序。
2. 在查询语句中用Group by子句进行分组;用Having子句对分组进行筛选。
使用MAX(),MIN(),COUNT(),SUM(),A VG()等函数在查询结果集中生成汇总值。
三、实验设备安装有SQL SERVER 2005的计算机。
四、实验内容运行查询文件company.sql,生成上机必要的数据,然后完成以下操作。
1、查找所有经理的姓名、职称、薪水。
2、在销售主表sales中查找销售金额大于等于10000元的订单。
3、在员工表employee中查找薪水在4000至8000元之间的员工。
4、在员工表employee中查找住址为上海、北京、天津这三个城市的员工。
5、在客户表customer中查找住址不在上海、北京、天津这三个城市的客户。
6、在员工表employee中查找姓“王”用姓名最后一个字为“7、在客户表customer中查找姓“刘”的客户名称、电话。
8、查找出职称为“经理”或“职员”的女工的信息。
9、查找薪水最高的前三条员工记录。
10、查找订单金额最高的前10%的订单记录。
select top 10 percent*from salesorder by tot_amt desc11、查找员工表中所属部门。
实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。
四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。
(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。
(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。
(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。
(5)查询既订购了P商品,又订购了P商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。
(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。
(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。
(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。
(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。
(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。
(13)统计客户号为“C”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。
(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。
(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。
(17)查询每个客户订购的商品编号,商品所属类别,商品数量及订货金额,结果显示客户名称,商品所属类别,商品数量及订货金额,并按客户编号升序和按订货金额的降序排序输出。
实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。
四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。
(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。
(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。
(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。
(5)查询既订购了P2*******商品,又订购了P2*******商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。
(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。
(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。
(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。
(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。
(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。
(13)统计客户号为“C20050001”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。
(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。
(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。
(17)查询每个客户订购的商品编号,商品所属类别,商品数量及订货金额,结果显示客户名称,商品所属类别,商品数量及订货金额,并按客户编号升序和按订货金额的降序排序输出。
(18)按商品类别查询每类商品的订货平均单价在280元(含280元)以上的订货总数量,订货平均单价和订货总金额。
(19)查找至少有2次销售的业务员名称和销售日期。
(20)查询销售金额最大的客户名称和总货款额(21)查找销售总额小于5000元的销售员编号,姓名和销售额(22)查找至少订购了3种商品的客户编号,客户名称,商品编号,商品名称,数量和金额。
(23)查找同时订购了商品为“P2*******”和商品编号为“P2*******”的商品的客户编号,客户姓名,商品编号,商品名称和销售数量,按客户编号排序输出。
(24)计算每一商品每月的销售金额总和,并将结果首先按销售月份然后按订货金额降序排序输出。
(25)查询订购了“键盘”商品的客户姓名,订货数量和订货日期(26)查询每月订购“键盘”商品的客户名称。
(27)查询至少销售了5种商品的销售员编号,姓名,商品名称,数量及相应的单价,并按销售员编号排序输出。
(28)查询没有订购商品的客户编号和客户名称。
(29)查询至少包含了“世界技术开发公司”所订购的商品的客户编号,客户名称,商品编号,商品名称,数量和金额。
五、实验步骤请完成实验内容,并写出具体的实验步骤(1)用子查询查询员工“张小娟”所做的订单信息。
select orderMaster.*from employee,orderMaster where orderMaster.SaleNo=employeeNo and employeeName in(select employee.employeeName from employee where employeeName='张小娟')(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。
select distinct customer.CustomerNo,customer.customerName,customer.Zip from customer,orderMaster where customer.customerNo not in(select orderMaster.customerNo from orderMaster)and customer.addr='北京市'order by customer.Zip desc(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。
select orderDetail.OrderNo,orderDetail.Qty,orderDetail.Price from orderDetail,product where orderDetail.ProductNo=product.ProductNo and ProductName='32M DRAM'(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。
select employee.employeeNo,employee.employeeName,case employee.Sexwhen'M'then'男'when'F'then'女'end,employee.Department from employee where employee.Department=(select employee.Department from employee whereemployee.employeeNo='E2008005')(5)查询既订购了P2*******商品,又订购了P2*******商品的客户编号,订单编号和订单金额select customer.customerno,ordermaster.orderno,ordermaster.ordersum from ordermaster,customer,orderdetail where customer.customerno=ordermaster.customerno and ordermaster.orderno=orderdetail.orderno and orderdetail.productno='P2007002'intersectselect customer.customerno,ordermaster.orderno,ordermaster.ordersum from ordermaster,customer,orderdetail where customer.customerno=ordermaster.customerno and ordermaster.orderno=orderdetail.orderno and orderdetail.productno='P2005001'(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。
select distinct customer.customerno,customer.customername from customer,orderdetail,ordermaster,product where orderdetail.orderno=ordermaster.orderno and ordermaster.customerno=customer.customerno and orderdetail.productno=product.productno and product.productname notin('52倍速光驱','17寸显示器')(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。
selectordermaster.orderno,customer.customername,employee.employeename,ord ermaster.ordersum from employee,ordermaster,customer where employee.employeeno=ordermaster.saleno and customer.customerno=ordermaster.customerno and ordermaster.ordersum=(select MAX (ordermaster.ordersum)from ordermaster)(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。
select SUM(orderdetail.qty)as'订购数量',A VG(ordermaster.ordersum)as'订购平均价',SUM(ordermaster.ordersum)as'订购总金额'from orderdetail,ordermaster,product where orderdetail.orderno=ordermaster.orderno and orderdetail.productno=product.productno and product.productname='52倍速光驱'(9)查询订购了“52倍速光驱”商品且订货数量界于~4之间的订单编号,订货数量和订货金额。
select orderdetail.orderno,orderdetail.qty,ordermaster.ordersum from ordermaster,orderdetail,product whereorderdetail.orderno=ordermaster.orderno and product.productno=orderdetail.productno and product.productname='52倍速光驱'and orderdetail.qty between 2 and 4(10)在订单主表中查询每个业务员的订单数量select ordermaster.saleno,COUNT(*)as'订单数量'from ordermaster group by saleno(11)统计在业务科工作且在年或年出生的员工人数和平均工资。