电子科技大学数据库与软件工程三

news2024/12/23 1:25:09

适用于网工和物联网专业

目录

一、实验目的

二、实验内容

三、实验软件

四、实验步骤及数据记录

1.子查询

2. 伪列

3.数据库对象

4. 块、存储过程和触发器

五、实验结论及思考题

实验结论:

思考题:

六、总结及心得体会

七、对本实验过程及方法、手段的改进建议


一、实验目的

1、学习子查询和常用函数;

2、了解数据库视图的操作;

3、学习 PL/SQL 语言实现对数据库存储过程、触发器等操作。

二、实验内容

 在 SQL Developer 中使用学生用户连接 Oracle 数据库,使用实验二导入的 EMP 表(员工表)、DEPT 表(部门表)和 SALGRADE 表(工资等级表),实现数据库子查询、视图、存储过程、触发器等的操作过程。

三、实验软件

Oracle 数据库、SQL Developer

四、实验步骤及数据记录

1.子查询

1)查询出销售部(SALES)下面的员工姓名、工作、工资。

SELECT NAME,JOB,SAL FROM EMP

WHERE DEPTNO=(SELECT DEPTNO FROM WHERE DNAME='SALES');

结果如下:

图1

2)查询出 EMP 表中比任意一个销售员(SALESMAN)工资低(比销售员工资查询结果中的最大值小)的员工姓名、工作和工资。

SELECT ENAME,JOB,SAL FROM EMP

WHERE SAL<ANY(SELECT SAL FROM EMP WHERE JOB='SALESMAN');

结果如下:

图2

2. 伪列

1)查询出员工表中前 5 名员工的姓名、工作和工资。

SELECT ROWNUM,ENAME,JOB,SAL FROM EMP WHERE ROWNUM<=5;

结果如下:

图3

2)查询出工资最高的前 5 名员工的姓名、工资和工资

SELECT ROWNUM,T.* FROM

(SELECT ENAME,JOB,SAL

FROM EMP ORDER BY SAL DESC) T

WHERE ROWNUM<=5;

结果如下:

图4

3.数据库对象

1)基于 EMP 表和 DEPT 表创建一个只读视图,该视图中只包含员工编号、姓名、工作、入职日期和部门名称,隐藏了员工的工资、奖金、部门编号等信息。

CREATE OR REPLACE VIEW EMPDETAIL

AS

SELECT EMPNO,ENAME,JOB,HIREDATE,DNAME

FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO

WITH READ ONLY;

查询创建的 EMPDETAIL 视图:

结果如下:

图5

2)为 EMP 表的 ENAME 列创建唯一索引,为 EMP 表的工资列创建普通索引,把 JOB 列先变为小写再创建索引

CREATE UNIQUE INDEX UQ_ENAEM_IDX ON EMP(ENAME);

CREATE INDEX IDX_SAL ON EMP(SAL);

CREATE INDEX IDX_JOB_LOWER ON EMP(LOWER(JOB));

 使用下面的 SELECT 命令查看表 EMP 的索引:

SELECT INDEX_NAME,INDEX_TYPE,TABEL_OWNER,TABLE_NAME,UNIQUENESS

FROM USER_INDEXES WHERE TABLE_NAME='EMP';

结果如下:

图6

4. 块、存储过程和触发器

1)声明一个名为sname 的变量

DECLARE

SNAME VARCHAR2(20):='jerry';

BEGIN

SNAME:SNAME||'and tom';

DBMS_OUTPUT.PUT_LINE(sname);

END;

在SQL *Plus 中输出数据时,可能没有结果显示,可以使用命令:set serveroutput on设置输出到 SQL *Plus 控制台上。

​ 输出结果如图所示

图7

2)创建一个显示雇员总人数的存储过程。

CREATE OR REPLACE PROCEDURE EMP_COUNT

AS

V_TOTAL NUMBER(10);

BEGIN

SELECT COUNT(*) INTO V_TOTAL FROM EMP;

DBMS_OUTPUT.PUT_LINE('雇员总人数为:'||V_TOTAL);

END;

存储过程需要点击 SQL Developer 的“运行”按钮才能执行,如果存在错误,就会显示:“警告:创建的过程带有编译错误”。如果存在错误,对脚本进行修改,直到没有错误产生。如果编译结果正确,将显示:“过程已编译”。

调用存储过程,在工作表中输入以下语句并执行:

结果如下:

图8

 3)制作一个数据库触发器。记录所有对 EMP 表进行的 INSERT、UPDATE和DELETE 操作。

CREATE TABLE EMP_LOG(

who varchar2(30),

when date);

CREATE OR REPLACE TRIGGER EMP_OP

BEFORE INSERT OR UPDATE OR DELETE

ON EMP

BEGIN

INSERT INTO EMP_LOG (who,when)

VALUES(user,sysdate);

END EMP_OP;

执行 EMP 表更新操作,查看日志表,结果如下:

图9

五、实验结论及思考题

实验结论:

SQL语言变化要灵活运用,对查询和视图,存储触发器的代码使用和运用更要更加的灵活。

对于一些的查询自己要运用数据库中的笛卡尔相关运算进行解决。

思考题:

  1. 查询出比所有销售员的工资都高的员工姓名、工作和工资。请写出 SELECT命令,并给出查询结果截图

 SELECT ENAME,JOB,SAL FROM EMP

WHERE SAL>ALL (SELECT SAL FROM EMP WHERE JOB='SALESMAN');

查询结果如下:

图10

2、查询出 EMPDETAIL 视图中第 5 条到第 10 条之间的记录。请写出 SELECT命令,并给出查询结果截图。

SELECT *FROM (SELECT rownum no, EMPNO, ENAME, JOB, HIREDATE, DNAME FROM EMPDETAIL WHERE rownum<=10 ORDER BY rownum ASC) WHERE no>=5;

结果如下:

图11

3、创建一个存储过程,显示工资最低的雇员名字。请写出创建存储过程的代码,并给出存储过程的执行结果截图。

CREATE OR REPLACE PROCEDURE SAL_LOW

AS

V_LOW STRING(20);

BEGIN

SELECT ENAME INTO V_LOW FROM EMP WHERE ROWNUM=1 ORDER BY SAL ASC;

DBMS_OUTPUT.PUT_LINE('最低工资:'||V_LOW);

END;

结果如下:

图12

六、总结及心得体会

  1. 实验过程中会遇到一些命令执行失败,之后发现是自己的相关命令的用法出现错误。
  2. 在实验过程中要融汇变通,对课堂上讲述的命令进行变换和总结。
  3. 同时在实验过程中要认真仔细,对出问题的每一个过程进行分析总结,运用课堂知识进行解决。

七、对本实验过程及方法、手段的改进建议

1.另外,可以适当增加一些SQL语言的练习,以便对学习的知识进行掌握。

2.建议实验步骤相关部分可以不给出代码,让学生们自己撰写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为OD机试模拟题】用 C++ 实现 - 关联子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明关联子串题目输入输出示例一输入输出说明示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华…

Spring的Bean的生命周期,Bean的装配和注入

Spring容器启动获得BeanDefinition对象中有一个scope 属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期&#xff0c;了解bean是怎么来的又怎么没的。 一、Bean的作用域 在Bean容器启动会读取bean的xml配置文件&#xff0c;然后将xml中每个bean元素分别转…

Bean作用域和生命周期

目录 Bean作用域的例子 作用域定义 Bean的六种作用域 设置作用域 Spring的执行过程和Bean的生命周期 Spring的主要执行流程 Bean的生命周期 在上篇博客中我们使用Spring存储和获取Bean,因此Bean是Spring中最重要的资源,今天这篇博客就深入了解Bean对象 Bean作用域的例子 …

redis(8)有序集合Zset

有序集合Zset Redis 有序集合 zset 与普通集合 set 非常相似&#xff0c;是一个没有重复元素的字符串集合。 不同之处是有序集合的每个成员都关联了一个评分(score)&#xff0c;这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的&#xf…

如何在Linux中实现进程间通信

致前行路上的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 1.进程间通信介绍 1.1进程间通信的目的 1.2进程间通信发展 1.3进程间通信分类 1.4进程间通信的本质 2.管道 2.1什么是管道 2.2管道与进程的关系…

华为OD机试题,用 Java 解【玩牌高手】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

智能算法实现PID智能车控制系统

智能算法实现PID智能车控制系统摘要关键词第一章绪论1.1智能车概述1.2智能PID研究现状1.3本文工作第二章 PID控制简介第三章 内模PID简介3.1 内模PID控制第四章内模智能PID智能车控制系统设计4.1 系统设计4.2内模控制原理第五章 系统仿真及结果分析5.1 系统仿真分析5.2 控制效果…

前端资源浏览器渲染原理

浏览器的渲染页面过程 HTML解析过程 一般情况下服务器会给浏览器返回 xx.html 文件 解析html 其实就是 Dom 树的构建过程 我们可以根据以下html 结构 来简单的分析出 html 的解析过程 解析CSS 规则树 在解析的过程中&#xff0c;如果遇到CSS的link元素&#xff0c;那么会由浏览…

分享 7 个有用的 JavaScript 库,也许你会用的上

使用这7个库&#xff0c;加速你的项目开发当我们可以通过使用库轻松实现相同的结果时&#xff0c;为什么还要编写自定义功能&#xff1f;开发人员最好的朋友和救星就是这些第三方库。我相信一个好的项目会利用一些可用的最佳库。本系列就是帮助前端开发者整理一些相关的优秀的J…

一文了解互联网中的UI设计师

&#xff08;点击即可收听&#xff09;一文了解UI设计师UI设计师是什么岗位,以及它的职责所在是什么,初入职场,今天带你一起来了解一下宏观上:设计师微观上: 上游对接产品经理,根据产品经理产出的PRD(也就是产品文档手册),以及产品原型,设计产品的UI界面,产出设计稿(如:蓝湖,Sk…

vite:常见的配置

最近在捣鼓一下vite&#xff0c;因为自己一直在使用react&#xff0c;就选择vite、react来体验一下vite。 使用最简单的方法创建一个应用&#xff1a;yarn create vite&#xff0c;然后选择react框架。 vite默认配置是使用了defineConfig工具函数&#xff1a; import { defi…

TCP协议原理二

文章目录四、滑动窗口二、流量窗口三、拥塞控制四、滑动窗口 前面我们学习了 确认应答&#xff0c;超时重传&#xff0c;连接管理&#xff0c;这些机制都为我们TCP的可靠性提供了保证&#xff0c;当然在保证TCP的可靠性的同时&#xff0c;传输效率也受到了一定的影响&#xff…

[创业之路-56] :职场真相:越便宜的员工其实越贵

引言&#xff1a;创业公司由于资金的限制&#xff0c;喜欢招聘经验不多、价格便宜的员工&#xff0c;殊不知&#xff0c;放在宏观的视角看&#xff0c;越发发现&#xff0c;越便宜的员工其实越贵&#xff0c;虽然他们能加班、好学习、听话&#xff0c;但创业公司不是大学&#…

【华为OD机试模拟题】用 C++ 实现 - 剩余可用字符集 or @分割可用字符集(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明剩余可用字符集 or @分割可用字符集题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才…

LLVM高级架构介绍

LLVM 为什么要开一个LLVM的新坑呢&#xff1f; 我从智能穿戴转行到芯片软件行业&#xff0c;从事编译器开发&#xff0c;不过是AI编译器。不过基本的传统编译器还是绕不过去啊&#xff0c;所以开始学习LLVM&#xff0c;后面开始学习TVM&#xff0c;MLIR。 LLVM GitHub地址 L…

vue-知识点总结

历史 2015年 10月27 1.0.0 Evangelion 新福音战士2016年 10月1日 2.0.0 Ghost in the Shell 攻壳机动队2019年 2月 2.62020年 9月18日 3.0.0 One Piece(海贼王)2021年 8月10日 3.2.0 .sync where 父向子传递props, 需要双向绑定的时候(子组件想更新这个值) how <one-comp…

vscode配置drawio绘制流程图

目录 vscode配置drwaio drawio使用 添加元素 调整元素 连接元素 添加公式 图像与表格 组合元素 保存以及导出 最近课程设计需要画流程框图&#xff0c;所以在网上找找绘制流程图的软件。然后我选择了这个drawio&#xff0c;无他&#xff0c;只是因为用vscode插件就…

同步和异步promise

进程和线程进程&#xff08;厂房&#xff09;&#xff1a;程序的运行环境线程&#xff08;工人&#xff09;&#xff1a;进行运算的东西同步和异步同步&#xff1a;一件事干完才去干下一件事&#xff0c;前面的代码不执行&#xff0c;后面的代码也不执行。同步的代码可能会出现…

lesson01_ts知识回顾

基本数据类型 undefined 和 null 可赋值给其他基本数据类型 let num: number 3; let flag: boolean false; let str: string "abc";let a: null null; let b: undefined undefined;联合数据类型 let variable: number | boolean false; variable 123;数组 …

指针的进阶【中篇】

文章目录&#x1f4c0;4.数组参数&#x1f4bf;4.1.一维数组传参&#x1f4bf;4.2.二维数组传参&#x1f4c0;5.指针参数&#x1f4bf;5.1.一级指针传参&#x1f4bf;5.2.二级指针传参&#x1f4c0;6.函数指针&#x1f4bf;6.1. 代码1&#x1f4bf;6.2. 代码2&#x1f4c0;7.函…