合肥工业大学数据库上机实验2
目 录
实验5:创建和删除索引
1. 实验目的
- 了解索引的类型和作用。
- 学会用SQL语句对表创建和删除索引
2. 实验要求
- 完成索引的创建和删除。
- 注意操作结果的截图与保存,供撰写实验报告使用。
3. 实验内容
- 创建索引
在Supp表的Sname列上建立普通降序索引。
在Project表的Jname列上建立唯一索引。
在SPJ表的Sno(升序)和Pno(降序)上创建一个普通索引。
- 检查创建索引的完成情况。
用SQL语句删除索引
4. 实验步骤
在查询分析器中完成实验内容。
5. 实验结果
5.1 所用命令
create index supp_sname_desc_index on supp(sname desc);
create unique index project_jname_unique_index on project(jname);
create index spj_sno_asc_pno_desc_index on spj(sno asc, pno desc);
exec sp_helpindex supp;
exec sp_helpindex project;
exec sp_helpindex spj;
drop index supp_sname_desc_index on supp;
drop index project_jname_unique_index on project;
drop index spj_sno_asc_pno_desc_index on spj;
5.2 实验截图
6. 实验总结
建立适当的索引有利于提高数据库数据的存取效率,但值得注意的是,对索引的维护会造成一定开销。因此,是否要建索引,要建什么类型的索引都值得斟酌考虑。比如,对于经常需要查询,且查询取出的数据量普遍小于全表10%时,或许就有建立索引的价值。索引的物理实现有很多,如Hash,B+树等,对数据库的存取效率有很大影响。
实验6:数据查询
1. 实验目的
- 在查询分析器中使用SELECT语句进行查询。
- 熟练掌握基本表的数据查询、数据排序和数据连接查询的操作方法。
2. 实验要求
- 完成所要求的全部查询。
- 注意操作结果的截图与保存,供撰写实验报告使用。
3. 实验内容
- 根据教材P130第4题,采用SQL语句,对SPJDB数据库实现查询。
- 根据教材P130第5题,采用SQL语句,对SPJDB数据库实现查询(1)-(7)。
4. 实验步骤
在查询分析器中完成实验内容。
5. 实验结果
5.1 所用命令
1.
(1)
select sno from spj where jno='j1';
(2)
select sno from spj where jno='j1' and pno = 'p1';
(3)
select sno from spj, part where spj.jno='j1' and spj.pno = part.pno and color='红';
(4)
select jno from spj where jno not in (select jno from spj, part, supp where supp.city = '天津' and color = '红' and supp.sno = spj.sno
and part.pno = spj.pno);
(5)
select pno from spj where sno = 's1';
select jno from spj where pno = 'p1' and jno not in (select pno from spj where pno = 'p2');
2.
(1)
select sname,city from supp;
(2)
select pname,color,weight from part;
(3)
select jno from spj where sno='s1';
(4)
select pname,qty from spj,part where part.pno=spj.pno and spj.jno='j2';
(5)
select pno from spj,supp where supp.sno=spj.sno and city='上海';
(6)
select jname from spj,supp,project where supp.sno=spj.sno and supp.city='上海' and project.jno=spj.jno;
(7)
注意:
select jno from spj where jno not in (select jno from spj,supp where supp.sno=spj.sno and supp.city='天津');
适用于jno是唯一或不唯一的情况.
注意:
select jno from spj,supp where supp.sno=spj.sno and supp.city<>'天津';
适用于jno是唯一的情况
5.2 实验截图
6. 实验总结
通过本次利用SQL语句完成相应的查询操作,主要利用SELECT....FROM.... WHERE语句完成。与关系代数进行对比,SELECT 子句实际就是投影,FROM子句就是广义笛卡尔积,WHERE子句就是选择操作。如果利用SQL语句进行连接操作的话,那么需要WHERE子句指明连接的条件。不过也可以利用嵌套子查询代替连接。
实验7:使用聚集函数的SELECT语句
1. 实验目的
- 熟练掌握数据查询中的分组、统计、计算和组合的操作方法。
- 加深对SQL语言的嵌套查询语句的理解。
2. 实验要求
- 完成所要求的全部查询。
- 注意操作结果的截图与保存,供撰写实验报告使用。
3. 实验内容
在数据库SPJDB中用SQL语句实现如下查询:
- 查询供应商的总数目。
- 查询工程项目所在地为‘北京’的项目总数。
- 查询每个供应商供应零件的总数量,给出供应商代码及零件总量。
- 查询供应商数目超过3家的工程项目代码。
4. 实验步骤
在查询分析器中完成实验内容。
5. 实验结果
5.1 所用命令
(1)
select count(sname) as supp_count from supp;
(2)
select * from project where city = '北京';
select jname, count(city) as project_in_beijing from project where city = '北京' group by jname;
(3)
select * from (select sno, count(qty) as sno_qty from spj group by sno) as ha order by ha.sno_qty desc;
(4)
select * from (select jno, count(sno) as cnt from spj group by jno) as ha where ha.cnt > 3;
5.2 实验截图
6. 实验总结
利用聚集函数可以很方便进行一些繁琐的操作,比如求平均值、求和COUNT(*)等。同时利用聚集函数时,要注意聚集函数只能用于SELECT 子句和 GROUP BY HAVING 子句中,不能用于WHERE 子句中。
实验8:视图的定义与使用
1. 实验目的
- 理解视图的定义和作用
- 掌握视图的创建和查询操作。
2. 实验要求
- 完成所要求的视图定义和查询操作。
- 注意操作结果的截图与保存,供撰写实验报告使用。
3. 实验内容
根据教材P130第9题,采用SQL语句,实现视图的定义及查询。
4. 实验步骤
在查询分析器中完成实验内容。
5. 实验结果
5.1 所用命令
create view exp8_test as select sno, spj.pno,qty from spj,project where spj.jno=project.jno and project.jname='三建';
select pno, qty from exp8_test;
select * from exp8_test where sno='s1';
5.2 实验截图
6. 实验总结
建立视图有很多好处,一是可以一定程度上对用户访问数据的范围进行限定,二是可以方便建立各种虚表,简化SQL语句的表达。