适用于网工和物联网专业(信通)
本实验也是期末考试的内容
目录
一、实验目的
1、熟悉 Oracle 的环境,学习使用 SQL Developer 与 Oracle 进行交互;
2、建立基本的数据库表,表结构的查看、修改与删除;
3、学习对表中数据进行插入,删除,修改及查询操作。
二、实验内容
在SQL Developer中使用学生用户连接Oracle数据库,导入4张表:BONUS、 DEPT(部门表)、EMP(员工表)和 SALGRADE(工资等级表),进行简单查询以及高级查询操作;创建学生信息表(INFOS)和成绩表(SCORES),进行数据库表及数据的插入、查询、更新、删除等基本操作。
三、实验软件
Oracle 数据库、SQL Developer
四、实验步骤及数据记录
1.使用SQL Developer导入表
(1) 使用学生用户连接数据库,此时角色选择“默认值”。
(2) 将SQL 脚本粘贴进工作表窗口中,点击“运行脚本”按钮,导入成功后查询到的DEPT,EMP和SALGRADE表的数据内容如下图所示。
相关截图如下:
图1 图2 |
图3 |
2.数据库表和字段的基本操作
2.1 创建学生信息表和约束
插入脚本之后,就可以得到关系表。
查看 INFOS 表创建成功后的“列”和“约束条件”内容,如下图所示。
图4 |
图5 |
2.2 创建成绩表和约束
插入脚本
查看 SCORES 表创建成功后的“列”和“约束条件”内容,结果如图所示。
图6 |
图7 |
2.3 插入数据
使用insert命令插入数据。
查看插入数据成功后 INFOS 表如图所示。
图8 |
2.4 简单查询数据
用 SELECT 命令查询学生信息表(INFOS),获取所有性别(GENDER)为 “男”的学生姓名(STUNAME)、性别(GENDER)、年龄(AGE)和住址 (STUADDRESS)信息,并按年龄排序。
查询命令为:SELECT STUNAME,GENDER,AGE,STUADDRESS FROM INFOS WHERE GENDER=‘男’ ORDER BY AGE;
结果如下:
图9 |
2.5 更新数据
用 UPDATE 命令更新学生信息表(INFOS)中学生姓名(STUNAME)为“阮小二”的以下信息:
班号(CLASSNO)改为“1002” 住址(STUADDRESS)改为“山东莱芜”
查询命令为:UPDATE INFOS SET CLASSNO=‘1002’,STUADDRESS=‘山东莱芜’ WHERE STUNAME=‘阮小二’;
查询结果如图所示
图10 |
2.6 删除某条数据
用 DELETE 命令删除学生信息表(INFOS)中学号(STUID)为“s100102”的学生信息;然后用 SELECT 命令查询学生信息表(INFOS)的所有信息。
删除命令:DELETE FROM INFOS WHERE STUID=‘s100102’;
删除后的结果如图所示:
图11 |
3. 简单查询
使用 Oracle 自带的三张表:EMP 表(员工表)、DEPT 表(部门表)和SALGRADE 表(工资等级表)。
1)每名员工年终奖是 2000 元,请在 EMP 表中查询获取基本工资在 2000 元以上的员工姓名及其工资和不含奖金的年总工资信息。
相关命令:
SELECT ENAME,SAL,12*SAL FROM EMP WHERE SAL>2000;
查询结果:
图12 |
2)请在 EMP 表中查询获取工资在 2000 元以上的员工姓名及其工作信息。
4.高级查询
1)查询 EMP 表中的员工所在部门编号
分析:可能有多个员工在一个部门的情况,此时只需要查询一个结果即可,不需要查询多条数据。
相关命令为:
SELECT DISTINCT DEPTNO FROM EMP; |
图13 |
2)查询出薪酬少于 2000 且没有发奖金的员工
第一步:查询薪酬少于 2000 的员工。
SELECT ENAME,JOB,SAL,COMM FROM EMP WHERE SAL<2000; |
图14 |
第二步:查询薪酬少于 2000 且没有发奖金的员工
SELECT ENAME,JOB,SAL,COMM FROM EMP WHERE SAL<2000 AND COMM IS NULL; |
图15 |
3)查询工作职责是 SALESMAN、PRESIDENT 或 ANALYST 的员工
SELECT ENAME,JOB,SAL FROM EMP WHERE JOB IN ('SALESMAN', 'PRESIDENT', 'ANALYST'); |
图16 |
4)查询工资从 1000 到 2000 之间的员工
SELECT ENAME,JOB,SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000; |
图17 |
5)查询员工名称以 J 开头以 S 结尾的员工的姓名、工资和工资
SELECT ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'J%S'; |
图18 |
6)查询出 DEPT 表中没有员工的部门编号
SELECT DEPTNO FROM DEPT MINUS SELECT DEPTNO FROM EMP; |
图19 |
7)查询出月工资大于 2000 元的员工姓名、工作、工资,及其所在部门名称
SELECT e.ENAME,e.JOB,e.SAL,d.DNAME FROM EMP e,DEPT d WHERE e.DEPTNO=d.DEPTNO AND e.SAL>2000; |
图20 |
五、实验结论及思考题
实验结论:
使用SQL语言对数据库中的关系表进行查询、插入、删除等操作,学会了SQL语言的灵活运用,以及加深了对关系表的理解,同时熟悉了数据库的使用。
思考题:
- 查询出工作职责不是 SALESMAN、PRESIDENT 或 ANALYST 的员工姓名、 工作、工资,及其所在部门名称。
命令:
SELECT ENAME,JOB,SAL,DNAME FROM EMP,DEPT WHERE JOB NOT IN(‘SALESMAN’, ‘PRESIDENT’, ‘ANALYST’) AND EMP.DEPTNO=DEPT.DEPTNO;
结果如下:
图21 |
图22 |
2. 换一种方法查询出工资大于 2000 元的员工姓名、工作、工资,及其所在部门名称。
命令:SELECT ENAME,JOB,SAL,DNAME FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO AND SAL>2000;
查询结果如下:
图23 |
3、查询出每个部门下的员工姓名和工资。请写出 SELECT 命令,并给出查询结果截图。
命令:SELECT ENAME,SAL,DNAME FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;
结果如下:
图24 |
4、如果在步骤 2.4 中使用 sys 用户查询学生用户的 INFOS 表,能否查询到学生用户 INFOS 表的添加、删除、修改操作?为什么?如果不同,如何才能让 sys 用户查询到学生用户对 INFOS 表的添加、删除、修改操作?
不能使用sys用户查询学生用户的INFOS表,因为没有得到dba用户的授权,需要得到dba用户的授权后,才能查询学生用户对INFOS表的添加、删除、修改操作。
六、总结及心得体会
实验中遇到的问题以及解决办法:
- 一开始输入脚本进行配置的过程当中,会产生部分错误,然后自己在网上搜索以及在老师的指导之下,解决了这个问题。
- 对于实验指导书中没有出现的数据库查询、删除、插入的指令,自己结合课件和网上的一些教程进行学习,最终还是得到了相应的结果。
七、对本实验过程及方法、手段的改进建议
1.在实验中其实相关的脚本也可以适当采取挖空的方式,让学生们进行学习填写。
2.对于插入的关系表,可以适当的增加关系表理解的相关的问题,进行训练。
3.另外,可以适当增加一些SQL语言的练习,以便对学习的知识进行掌握。