当前位置:文档之家› oracle实验2

oracle实验2

《数据库原理与应用》实验报告实验名称:数据定义和查询班级:计算机143 学号:姓名:一、实验目的1、掌握使用SQL语句创建和删除数据表,创建各种完整性约束。

2、掌握使用SQL语句修改表的结构。

3、掌握查询语句的使用方法,重点掌握连接查询和嵌套查询。

二、实验对象1.使用SQL语句建立4个关系,如下:供应商表S (Sno, Sname, Ctiy)零件表P(Pno, Pname, Color, Weight)工程项目表J(Jno, Jname, City)供应情况表SPJ(Sno, Pno, Jno, QTY)其中:供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商所在城市(CITY)组成;零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成;工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成;供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量组成(QTY),表示某供应商供应某种零件给某工程项目的数量为QTY。

数据如下:S表SNO SNAME CITYS1 精益天津S2 盛锡北京S3 东方红北京S4 丰泰盛天津S5 为民上海P表PNO PNAME COLOR WEIGHTP1 螺母红12P2 螺栓绿17P3 螺丝刀蓝14P4 螺丝刀红14P5 凸轮蓝40P6 齿轮红30J表JNO JNAME CITYJ1 三建北京J2 一汽长春J3 弹簧厂天津J4 造船厂天津J5 机车厂唐山J6 无线电厂常州J7 半导体厂南京SPJ表SNO PNO JNO QTY S1 P1 J1 200 S1 P1 J3 100 S1 P1 J4 700 S1 P2 J2 100 S2 P3 J1 400 S2 P3 J2 200 S2 P3 J4 500 S2 P3 J5 400 S2 P5 J1 400 S3 P1 J1 200 S3 P3 J1 200 S4 P5 J1 100 S4 P6 J3 300 S4 P6 J4 200 S5 P2 J4 100S5 P6 J4 500打开SQL窗口,在窗口中利用Creat语句,将每个表中各自需要的列和相应的数据输入,则可实现表S、P、J和SPJ表的建立。

如图1。

图1. 创建表格三、实验过程1.要求:(1)创建每个关系的主键,有外键的创建外键。

S表中的Sno、P表中的Pno和J表中的Jno,只需在相应的列后加Primary Key即可。

SPJ中的Sno、Pno和Jno需要在单独写一行,以确保其表级完整性。

在SPJ表中利用Foreign Key()references()语句,创建相应的外键。

如图1所示。

(2)S表中的Sname属性列的取值唯一在Sname的属性列后,加UNIQUE即可。

如图2所示。

图2. 属性列取值唯一(3)P表中weight属性列的取值范围在1-50之间在Weight属性列后,利用check语句,加相应的约束条件即可。

如图3所示。

图3. 设置范围(4)J表中的Jname取值不能为空并且是唯一的在Jname的属性列,加UNIQUE使其唯一,再加not NULL则Jname取值不为空。

如图4所示。

图4. 取值唯一且不为空(5)SPJ表中QTY属性列的数据类型必须为NUMBER定义QTY的数据类型为NUMBER。

如图5。

图5. 定义数据类型2.用SQL语句完成以下操作:(1)给S表增加Sphone和Semail两个属性列,分别用来存放供应商的联系电话和电子信箱。

如图6所示。

利用Alter 和ADD语句完成对S表的属性列的添加。

如图6所示。

图6. 增添属性列(2)删除Jname属性列取值唯一的约束。

先查明,Jname约束条件的条件名,再利用Alter和Drop语句,完成删除。

如图7所示。

图7. 取值唯一(3)将QTY属性列的数据类型修改为Integer型。

先查明,利用Alter和modify语句对QTY属性列的数据类型进行修改。

如图8所示。

(非“”内的内容可忽略大小写)图8. 修改数据类型(4)删除S表中的属性列Semail。

用Alter和Drop语句删除属性列,必须说明删除的为列,还是行。

如图9所示。

图9. 删除属性列3.在J表的Jname属性列上创建唯一性索引。

利用Create和INDEX语句,建立索引。

建立在相应的表的相应属性列上。

由于为唯一条件,所以需加UNIQUE。

如图10所示。

图10. 建立索引4.练习EXP和IMP命令的使用方法,使用EXP命令将数据表导出。

5.完成以下查询:(1)查询所有供应商所在的城市。

Select语句选择所要查询的属性列,From语句选择所要查询属性列所在的表。

从S表中查找City的属性列。

如图11所示。

图11. 简单查询(2)查询零件重量在10-20之间(包括10和20)的零件名和颜色。

利用Select语句选择所要查询的属性列,From语句选择所要查询属性列所在的表,Where语句后面加相应的条件。

从P表中查找Pname,Color的属性列,并且加所需条件。

如图12所示。

图12. 条件查询(3)查询工程项目的总个数。

利用Count语句用来累加计数,Distinct语句用来去除重复项。

如图13所示。

图13. 累加统计(4)查询所有零件的平均重量。

利用A VG语句,填写所需求得属性列,求平均。

如图14所示。

图14. 求平均(5)查询供应商S3供应的零件号。

简单条件查询。

如图15所示。

图15. 条件查询(6)查询各个供应商号及其供应了多少类零件。

按Sno分组后,再进行筛选和计数。

如图16所示。

图16. 分组查询(7)查询供应了2类以上零件的供应商号。

先进行分组,再进行查询。

注意分组后条件改用having语句,并非where 语句。

如图17所示。

图17. 条件分组查询(8)查询零件名以“螺”字开头的零件信息。

用%和LIKE来进行字符串的匹配。

如图18所示。

图18. 条件查询(9)查询工程项目名中最后一个字为“厂”字的工程项目所在的城市。

用%和LIKE来进行字符串匹配如图19所示。

图19. 条件查询(10)查询给每个工程供应零件的供应商的个数。

查询内容涉及两张表需要进行连接。

如图20所示。

图20. 分组查询(11)查询供应数量在1000—2000之间(包括1000和2000)的零件名称。

进行连接后,加相应的条件(分组和条件)。

如图21所示。

图21. 条件分组查询6.在实验一创建的表中完成以下查询:(1)查询“信息管理与信息系统”专业学生的姓名和年龄。

本题注意点为学生的年龄需要用表达式计算得出,还得注意类型转换。

如图22所示。

图21. 条件查询(2)查询成绩在70-80分(包括70和80分)之间的学生的学号、课程号和成绩。

如图22所示。

图22. 条件查询3)查询107号课程的最高成绩。

如图23所示。

图22. 条件查询(3)统计每个专业的学生人数。

如图23所示。

图23. 分组查询(4)统计每门课程的修课人数和考试最高分。

如图24所示。

图24. 分组查询(5)统计每个学生的选课门数和考试总成绩,并按总成绩的递减顺序显示结果。

利用order by语句可使结果按照一定顺序排列。

如图25所示。

图25. 条件分组查询(6)查询总成绩超过200分的学生,要求列出学号和总成绩。

如图26所示。

图26. 条件分组查询(7)查询姓名为田丕龙的学生所学课程的课程名与学分。

如图27所示.图27. 条件分组查询(8)查询选修课程号为“160”或“304”的学生的学号。

使用UNION语句使查询出来的两个结果取并集。

如图28所示。

图28. 条件分组查询(9)查询选修了课程号为“160”和“304”的学生的学号。

使用INTERSECT语句使查询出来的两个结果取交集。

如图29所示。

图29. 条件分组查询(10)查询学习全部课程的学生姓名。

如图所示30所示。

图30. 嵌套查询(11)查询1994年1月1日以前出生的学生的姓名和专业。

注意类型转换。

如图31所示。

图31. 条件查询(12)查询选修了“大学英语4”课程且成绩在90分以上的学生姓名。

将表做出正确的链接后,再进行相应的条件查询。

如图32所示。

图32. 链接条件查询(13)查询选修了5门以上课程的学生学号和姓名。

如图33所示。

图33. 嵌套条件查询(15)查询未选修“政治经济学”课程的学生情况。

如图34所示。

图34. 嵌套链接条件查询(16)统计102和378号课程的选课人数及平均成绩。

如图35所示。

图35. 条件查询(17)查询比所有“信息管理与信息系统”专业学生年龄都大的学生。

如图36所示。

图36. 嵌套链接条件查询(18)将“计算机科学与技术”专业的学生按出生时间先后排序。

如图37所示。

图37. 条件查询7、实验总结通过此次实验,较为熟练的掌握了SQL语句的操作。

但是对于某些具体的细节还是注意不到,例如:用like或=,总是区分不好;还有对于EXISTS的理解还是不够充分等。

还需多加练习才可以对某些SQL语句掌握和理解的更加深刻。

这次实验的代码之前未保存。

下次一定会注意。

相关主题