您好,欢迎来到聚文网。 登录 免费注册
ORACLE数据库从入门到实战(微课视频版)/景雨

ORACLE数据库从入门到实战(微课视频版)/景雨

  • 装帧: 简装
  • 出版社: 清华大学出版社
  • 作者: 景雨 祁瑞华 杨晨 刘建鑫 闫薇 陈恒 楼偶俊
  • 出版日期: 2019-10-01
  • 商品条码: 9787302529163
  • 版次: 1
  • 开本: 其他
  • 页数: 0
  • 出版年份: 2019
定价:¥59.8 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
编辑推荐
本书是基于当前大学计算机相关专业课程设置的要求和基础上,考虑到Oracle数据库在各大公司和企业项目开发中的广泛应用,从而为学生及相关开发人员所编写的理论与实际应用相结合的基础教科书。本书以Oracle 12c 数据库管理系统为开发环境,以学生-课程数据库和员工-部门数据库为例,全面系统地介绍了Oracle 12c的管理操作和应用开发方法。全书共分13章,分别介绍Oracle 12c的安装和卸载、数据库服务的启动与关闭、Oracle 12c的管理工具、Oracle数据库的物理存储结构、逻辑存储结构、内存结构、进程结构和数据库例程、SQL基础、PL/SQL程序设计的基础、异常处理、游标、存储过程、存储函数、包、触发器、用户、权限和角色管理、数据库的备份与恢复等内容。在本书的最后提供了两个数据库应用的案例,可作为教学和实训的内容,培养学生开发简单应用系统的能力。
内容简介
本书以Oracle 12c 数据库管理系统为开发环境,以学生课程数据库和员工部门数据库为例,全面系统地介绍了Oracle 12c的管理操作和应用开发方法。全书共分13章,分别介绍Oracle 12c的安装和卸载,Oracle数据库体系结构,SQL基础,PL/SQL概述,异常处理,游标,存储子程序,包,触发器,用户、权限与角色管理,数据库备份与恢复。在本书的最后提供了两个数据库应用的案例: 名片管理系统的设计与实现和学生成绩管理系统的设计与实现,可作为教学和实训的内容,培养学生开发简单应用系统的能力。 本书以核心知识的讲解为基础,以培养相应的能力目标为导向,以任务驱动的案例教学为手段,以实践问答为巩固,详细介绍每一部分内容。本书部分章节提供了视频讲解。 本书可作为大学本科、高职高专及数据库应用相关培训课程的教学用书,也可作为计算机应用人员和计算机爱好者的自学参考书。
作者简介
本人已发表学术论文20余篇,涉及的刊物主要有《IEEE Transactions on Geosicence and Remote Sensing》(SCI,EI检索源刊)、《计算机科学》(中文核心期刊)、《Journal of Convergence Information Technology》(EI检索源刊)、《Sensors & Transducers》(EI检索源刊)、等,其中发表在遥感领域具有较强国际影响力的《IEEE Transactions on Geosicence and Remote Sensing》期刊的论文,受到国际遥感图像处理领域专家的认可和好评,被国外有名检索工具Web of Science(SCI-E)他引次数达数十次,并且获得了2012年度辽宁省自然科学学术成果奖论文类一等奖。本人撰写的学术专著《航空遥感图像边缘检测技术及其应用》印数为2000册,自2017年3月28日出版至今,网络销量达1500册,并获得了2017年辽宁省自然科学成果奖二等奖。本人作为主要参与人编写的《.NET实训》电子教程获得2013年辽宁省教育软件大赛多媒体课程三等奖。本人主持国家自然科学基金项目一项,
目录
目录 源码下载 第1章 Oracle数据库的安装和卸载 1.1Oracle数据库的安装 1.1.1Oracle 数据库的发展历程 1.1.2Oracle 12c数据库的安装 1.1.3使用数据库配置向导创建数据库 1.1.4实践环节: 使用DBCA创建OracleDB数据库 1.2数据库服务的启动与关闭 1.2.1数据库服务的启动 1.2.2数据库服务的关闭 1.2.3实践环节: 数据库服务状态的查看和启动方式的更改 1.3Oracle管理工具 1.3.1Oracle 12c数据库的默认安装用户 1.3.2Oracle数据库的开发工具 1.3.3访问数据库的方法 1.3.4实践环节: 使用不同的开发工具对数据库进行访问 1.4Oracle数据库的卸载 1.4.1Oracle 12c数据库的卸载步骤 1.4.2实践环节: 卸载已安装的Oracle 12c数据库 1.5小结 习题1 第2章 Oracle数据库体系结构 2.1物理存储结构 2.1.1控制文件 2.1.2重做日志文件 2.1.3数据文件 2.1.4其他文件 2.1.5实践环节: 查询物理存储结构中各类文件的存储 位置和基本信息 2.2逻辑存储结构 2.2.1表空间 2.2.2段 2.2.3区 2.2.4数据块 2.2.5实践环节: 画出Oracle数据库的逻辑结构关系图 2.3内存结构 2.3.1系统全局区 2.3.2程序全局区 2.3.3实践环节: 设置数据缓冲区中数据块的大小 2.4进程结构 2.4.1用户进程 2.4.2服务器进程 2.4.3后台进程 2.4.4实践环节: 查看Oracle数据库实例的进程信息 2.5数据库例程 2.5.1数据库实例和数据库的关系 2.5.2Oracle例程的启动与关闭 2.5.3实践环节: 启动和关闭数据库例程 2.6小结 习题2 第3章 SQL基础 3.1SQL语言 3.1.1SQL的分类 3.1.2SQL的特点 3.2数据定义语言 3.2.1基本表的定义 3.2.2基本表的修改 3.2.3基本表的删除 3.2.4实践环节: 基本表的操作 3.3数据操纵语言 3.3.1插入数据 3.3.2修改数据 3.3.3删除数据 3.3.4实践环节: 数据的操纵 3.4数据查询语言 3.4.1SELECT语句的一般格式 3.4.2单表查询 3.4.3分组查询 3.4.4连接查询 3.4.5嵌套查询 3.4.6实践环节: 数据的查询 3.5小结 习题3 第4章 PL/SQL概述 4.1PL/SQL程序设计简介 4.1.1什么是PL/SQL 4.1.2PL/SQL的优点 4.1.3PL/SQL块结构 4.1.4PL/SQL的注释样式 4.1.5实践环节: 编写简单的PL/SQL程序 4.2PL/SQL变量 4.2.1标识符定义 4.2.2常量和变量的声明 4.2.3数据类型 4.2.4变量赋值 4.2.5实践环节: 编写一个包含%ROWTYPE类型和SELECT… INTO赋值语句的PL/SQL程序 4.3PL/SQL运算符和函数 4.3.1PL/SQL中的运算符 4.3.2PL/SQL中的函数 4.3.3实践环节: 编写带有系统函数的PL/SQL程序 4.4PL/SQL条件结构 4.4.1IF条件语句 4.4.2CASE条件语句 4.4.3实践环节: 编写带IF或CASE条件语句的PL/SQL 程序 4.5PL/SQL循环结构 4.5.1简单循环 4.5.2WHILE循环 4.5.3数字式FOR循环 4.5.4实践环节: 编写PL/SQL程序实现输出1~10之间的 整数和 4.6小结 习题4 第5章 异常处理 5.1异常简介 5.1.1Oracle错误处理机制 5.1.2异常的类型 5.1.3异常处理的基本语法 5.2预定义异常 5.2.1预定义异常的处理 5.2.2实践环节: 编写包含处理系统预定义异常的PL/SQL 程序 5.3非预定义异常 5.3.1非预定义异常的处理步骤 5.3.2实践环节: 编写包含处理非预定义异常的PL/SQL 程序 5.4用户自定义异常 5.4.1用户自定义异常的处理步骤 5.4.2实践环节: 编写包含用户自定义异常的PL/SQL程序 5.5小结 习题5 第6章 游标 6.1显式游标 6.1.1显式游标的处理步骤 6.1.2显式游标的属性 6.1.3显式游标的简单循环 6.1.4显式游标的WHILE循环 6.1.5实践环节: 利用显式游标的LOOP循环和WHILE循环 实现数据的操作 6.2游标的FOR循环 6.2.1游标的FOR循环的优点 6.2.2游标的FOR循环的实现方法 6.2.3实践环节: 利用游标的FOR循环实现数据的操作 6.3利用游标操纵数据库 6.3.1游标的定义 6.3.2游标的使用 6.3.3实践环节: 编写利用游标操纵数据库的PL/SQL程序 6.4带参数的游标 6.4.1带参数的游标的处理步骤 6.4.2实践环节: 利用带参数游标的循环实现数据的 操作 6.5隐式游标 6.5.1游标的定义 6.5.2隐式游标的属性 6.5.3实践环节: 利用隐式游标的属性完成相应的数据操作 6.6小结 习题6 第7章 存储子程序 7.1存储过程的创建 7.1.1创建存储过程的基本方法 7.1.2存储过程的形式参数 7.1.3实践环节: 创建带参数的存储过程 7.2存储过程的调用 7.2.1参数传值 7.2.2调用方法 7.2.3实践环节: 调用带参数的存储过程 7.3存储过程的管理 7.4存储函数的创建 7.4.1创建存储函数的基本方法 7.4.2存储函数的形式参数与返回值 7.4.3实践环节: 创建存储函数 7.5存储函数的调用 7.5.1调用方法 7.5.2实践环节: 调用存储函数 7.6存储函数的管理 7.7小结 习题7 第8章 包 8.1包的创建 8.1.1包说明的创建 8.1.2包主体的创建 8.1.3包元素的性质 8.1.4实践环节: 创建包括存储过程和存储函数的包 8.2包的调用 8.2.1包中元素的调用方法 8.2.2实践环节: 在PL/SQL程序中调用已创建包中的公有 元素 8.3包的重载 8.3.1包的重载对象和要求 8.3.2实践环节: 在一个包中重载两个存储过程并调用 8.4包的管理 8.5小结 习题8 第9章 触发器 9.1语句级触发器 9.1.1触发器的组成 9.1.2语句级触发器 9.1.3触发器谓词 9.1.4实践环节: 创建AFTER型的语句级触发器 9.2行级触发器 9.2.1行级触发器的创建 9.2.2使用行级触发器标识符 9.2.3行级触发器使用WHEN子句 9.2.4实践环节: 创建行级触发器 9.3INSTEAD OF触发器 9.3.1INSTEAD OF触发器的作用 9.3.2INSTEAD OF触发器的创建 9.3.3实践环节: 在某视图上创建INSTEAD OF触发器 9.4系统事件与用户事件触发器 9.4.1系统事件与用户事件 9.4.2系统事件与用户事件触发器的创建 9.4.3实践环节: 创建系统事件触发器 9.5触发器的管理 9.6小结 习题9 第10章 用户、权限与角色管理 10.1用户管理 10.1.1创建用户 10.1.2修改用户 10.1.3删除用户 10.1.4查询用户信息 10.1.5实践环节: 用户管理方法的应用 10.2权限管理 10.2.1系统权限 10.2.2对象权限 10.2.3查询权限 10.2.4实践环节: 为创建的某用户授予和回收 系统权限 10.3角色管理 10.4小结 习题10 第11章 数据库备份与恢复 11.1物理备份 11.1.1物理备份的方法 11.1.2实践环节: Oracle物理备份策略中的备份 11.2逻辑备份 11.2.1逻辑备份的方法 11.2.2实践环节: 逻辑备份方法的具体应用 11.3物理恢复 11.3.1物理恢复的方法 11.3.2实践环节: 进行归档模式的联机物理恢复的 测试 11.4逻辑恢复 11.4.1逻辑恢复的方法 11.4.2实践环节: Oracle逻辑恢复方法的具体应用 11.5小结 习题11 第12章 名片管理系统的设计与实现 12.1Servlet MVC模式 12.2Java Web开发环境构建 12.2.1开发工具 12.2.2工具集成 12.3使用Eclipse开发Web应用 12.3.1JSP运行原理 12.3.2一个简单的Web应用 12.4系统设计 12.4.1系统功能需求 12.4.2系统模块划分 12.5数据库设计 12.5.1数据库概念结构设计 12.5.2数据库逻辑结构设计 12.6系统管理 12.6.1导入相关的jar包 12.6.2管理主页面 12.6.3组件与Servlet管理 12.7组件设计 12.7.1过滤器 12.7.2验证码 12.7.3实体模型 12.7.4数据库操作及存储子程序 12.7.5工具类 12.8名片管理 12.8.1添加名片 12.8.2查询名片 12.8.3修改名片 12.8.4删除名片 12.9用户相关 12.9.1用户注册 12.9.2用户登录 12.9.3修改密码 12.9.4基本信息 12.10管理员解锁用户 12.11安全退出 12.12小结 第13章 学生成绩管理系统的设计与实现 13.1Windows窗体开发环境构建 13.1.1开发工具 13.1.2工具集成 13.2使用Visual Studio开发窗体应用程序 13.3系统设计 13.3.1系统功能需求 13.3.2系统模块划分 13.4数据库设计 13.4.1数据库概念结构设计 13.4.2数据库逻辑结构设计 13.5系统管理 13.5.1添加相关的动态链接库引用 13.5.2系统管理主页面 13.5.3系统模块管理与数据库操作程序 13.6系统实现 13.6.1用户注册 13.6.2用户登录 13.6.3修改密码 13.6.4退出系统 13.7信息管理 13.7.1学生管理 13.7.2课程管理 13.7.3选课管理 13.7.4统计管理 13.8小结 附录A 样本数据库 附录B 书中视频对应二维码汇总表
摘要
    第3章SQL基础
     学习目的与要求
     本章主要介绍PL/SQL中的基础储备知识,数据定义语言(DDL)、数据操纵语言(DML)和数据查询语言(DQL)。通过本章的学习,读者应了解基本表的创建、修改和删除的方法; 熟悉表中数据的插入、修改和删除的方法; 重点掌握对基本表中数据的各种查询方法,为PL/SQL编程奠定良好的基础。
     本章主要内容
     ? SQL概述
     ? 数据定义
     ? 数据操纵
     ? 数据查询
     3.1SQL语言
     SQL是一种介于关系代数与关系演算之间的结构化查询语言(Structured Query Language),是一个通用的、功能极强的关系数据库语言。SQL不仅具有丰富的查询功能,还具有数据定义和数据控制功能,是集DQL(数据查询语言)、DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)于一体的关系数据语言。当前几乎所有的关系数据库管理系统都支持SQL,许多软件厂商还对SQL基本命令集进行了不同程度的修改和扩充。
     SQL最早是1974年由Boyce和Chamberlin提出,并作为IBM公司研制的关系数据库管理系统原型System R的一部分付诸实施。它功能丰富,不仅具有数据定义、数据操纵、数据控制功能,还有着强大的查询功能,而且语言简洁,容易学习,易于使用。现在SQL已经成为关系数据库的标准语言,并且发展了4个主要标准,即ANSI(美国国家标准机构)SQL; 对ANSI SQL修改后在1992年采纳的标准,称为SQL?92或SQL2; 后来又出了SQL?99也称SQL3标准。SQL?99从 SQL2扩充而来,并增加了对象关系特征和许多其他的新功能。2003年,推出了SQL?2003。自1986年公布以来,SQL随着数据库技术的发展而不断更新、丰富。
     自 SQL 成为国际标准语言以后,各个数据库厂家纷纷推出各自的 SQL 软件或与 SQL的接口软件。这就使大多数数据库均用 SQL 作为共同的数据存取语言和标准接口,使不同数据库系统之间的相互操作有了共同的基础,这个意义是十分重大的。
     SQL语言的应用更加广泛,Oracle、Sybase、Informix、Ingres、DB2、SQL Server、Rdb 等大型数据库管理系统都实现了SQL语言; Dbase、Foxpro、Access 等PC机数据库管理系统部分实现了SQL语言; 可以在 HTML(Hypertext Markup Language, 超文本标记语言)中嵌入SQL语句,通过WWW访问数据库; 在 VC、VB、Delphi、PB中也可嵌入 SQL 语句。目前,很多数据库产品都对SQL语句进行再开发与扩展,如Oracle 提供的PL/SQL(Procedure Language and SQL)就是对SQL的一种扩展。 3.1.1SQL的分类
     SQL语言的核心内容包括如下数据语言:
     (1) 数据定义语言(Data Definition Language,DDL),用于定义数据库的逻辑结构,包括基本表、视图及索引的定义。
     (2) 数据操纵语言(Data Manipulation Language,DML),用于对关系模式中的具体数据进行增、删、改等操作。
     (3) 数据查询语言(Data Query Language,DQL),用于实现各种不同的数据查询。
     (4) 数据控制语言(Data Control Language,DCL),用于数据访问权限的控制。
     3.1.2SQL的特点
     SQL 语言是一个综合的、通用的、功能极强的、易学易用的语言,所以能够被用户和业界广泛接受,并成为国际标准。其主要特点如下。
     1. 综合统一
     SQL语言集数据定义语言(DDL)、数据操纵语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、插入数据、建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,这些为数据库应用系统的开发提供了良好的环境。
     2. 高度非过程化
     SQL语言是非过程化的语言,用户只需提出“做什么”,而不必指明“怎么做”,也不需要了解存取路径的选择,SQL语言就可以将要求交给系统,自动完成全部工作。这不但大大减轻了用户负担,而且有利于提高数据独立性。
     3. 面向集合的操作方式
     非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。而SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
     4. 以同一种语法结构提供两种使用方式
     SQL 语言既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立地被用于联机交互的使用方式中,用户可以在终端键盘上直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C、COBOL、FORTRAN、C++、Java等)程序中,供程序员设计程序时使用。现在很多数据库应用开发工具,都将SQL语言直接融入到自身的语言中,使用起来更加方便。尽管SQL的使用方式不同,但SQL语言的语法基本上是一致的。这种统一语法结构又提供两种不同使用方式的方法,为用户提供了极大的灵活性与方便性。
     5. 语言简洁,易学易用
     SQL语言功能极强,但其语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词: CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。而且SQL语言语法简单,接近英语口语,因此易学易用。
     3.2数据定义语言
     通过SQL语言的数据定义功能,可以完成基本表、视图、索引的创建、修改和删除。但SQL不提倡修改视图和索引的定义,如果想修改视图和索引的定义,只能先将它们删除,然后再重建。SQL常用的数据定义语句如表3.1所示。
     表3.1SQL的数据定义语句
     操 作 对 象操 作 方 式
     创建删除修改
     表CREATE TABLEDROP TABLEALTER TABLE
     视图CREATE VIEWDROP VIEW
     索引CREATE INDEXDROP INDEX
     视频讲解
     3.2.1基本表的定义
     表是数据库中最基本的操作对象,是实际存放数据的地方。其他的数据库对象的创建及各种操作都是围绕表进行的,可以将表看作含列和行的表单。
     1. 创建基本表的语法格式
     SQL语言使用CREATE TABLE语句定义基本表。其一般格式为:
     CREATE TABLE <基本表名>
     ( <列名> <数据类型> [列级完整性约束]
     [,<列名> <数据类型> [列级完整性约束] ]
     …
     [,表级完整性约束]);
     说明:
     (1) 其中,“< >”中的内容是必选项,“[]”中的内容是可选项。本书以下各章节也遵循这个规定。
     (2) <基本表名>规定了所定义的基本表的名字,在一个用户中不允许有两个基本表的名字相同。<列名>规定了该列(属性)的名称。一个表中不能有两列的名字相同。
     (3) 表名或列名命名规则: 第一个字符必须是字母,后面可以跟字母、数字、3个特殊符号(_、$、#); 表名或列名中不可以包含空格; 表名和列名不区分大小写,但显示出来都是大写; 保留字不能用作表名或列名。
     (4) <数据类型>规定了该列的数据类型。
     (5) <列级完整性约束>是指对某一列设置的约束条件。
     (6) <表级完整性约束>规定了关系主键、外键和用户自定义完整性约束。
     2. 数据类型
     由于基本表的每个属性列都有自己的数据类型,所以首先介绍一下SQL所支持的数据类型。各个厂家的SQL所支持的数据类型不接近一致,这里只介绍SQL?99规定的主要数据类型。 1) 数值型
     ? INTEGER定义数据类型为整数类型,它的精度(总有效位)由执行机构确定。INTEGER可简写成INT。
     ? SMALLINT定义数据类型为短整数类型,它的精度由执行机构确定。
     ? NUMERIC(p,s)定义数据类型为数值型,并给定精度p(总的有效位,不包含符号位及小数点)或标度s(十进制小数点右边的位数)。
     ? FLOAT(p)定义数据类型为浮点数值型,p为指定的精度。
     ? REAL定义数据类型为浮点数值型,它的精度由执行机构确定。
     ? DOUBLE PRECISION定义数据类型为双精度浮点类型,它的精度由执行机构确定。
     2) 字符类型
     ? CHAR(n)定义指定长度的字符串,n为字符数的固定长度。
     ? VARCHAR(n)定义可变长度的字符串,其优选长度为 n,n不可省略。
     3) 位串型
     ? BIT(n)定义数据类型为二进制位串,其长度为n。
     ? BIT VARYING(n)定义可变长度的二进制位串,其优选长度为n,n不可省略。
     4) 时间型
     ? DATE用于定义日期,包含年、月、日,格式为YYYY?MM?DD。
     ? TIME用于定义时间,包含时、分、秒,其格式为HH:MM:SS。
     5) 布尔型
     ? BOOLEAN定义布尔类型,其值可以是TRUE(真)、FALSE(假)。
     对于数值型数据,可以执行算术运算和比较运算,但对其他类型数据,只可以执行比较运算,不能执行算术运算。我们在这里只介绍了常用的一些数据类型,许多SQL产品还扩充了其他一些数据类型,用户在实际使用中应查阅数据库系统的参考手册。
     3. 约束条件
     在SQL语言中,约束是一些规则,约束在数据库中不占存储空间。根据约束所完成的功能不同,表达完整性约束的规则有主键约束、外键约束、属性约束几类。
     1) 主键约束(PRIMARY KEY)
     主键约束体现了实体完整性。要求某一列的值既不能为空,也不能重复。
     2) 外键约束(FOREIGN KEY)
     外键约束体现了参照完整性。外键的取值或者为空或者参考父表的主键。
     3) 属性约束
     属性约束体现了用户定义的完整性。属性约束主要某一属性的取值范围。属性约束可分为以下几类: ? 非空约束(NOT NULL)。要求某一属性的值不允许为空值。
     ? 专享约束(UNIQUE)。要求某一属性的值不允许重复。
     ? 检查约束(CHECK)。检查约束可以对某一个属性列的值加以。就是给某一列设定条件,只有满足条件的值才允许插入。
     基本表的完整性约束可定义为两级: 表级约束和列级约束。表级约束可以约束表中的任意一列或多列,而列级约束只能约束其所在的某一列。
     上述5种约束条件均可作为列级完整性约束条件,但非空约束不可以作为表级完整性约束条件,其他4种可以作为表级完整性约束条件。
     下面通过具体实例介绍基本表的创建方法。
     3?1建立样本数据库中的STUDENT表,要求所有约束条件均为列级完整性约束,且该表满足表3.2中所示的条件。
     表3.2STUDENT(学生)表
     字段名字 段 类 型是 否 为 空说明字 段 描 述
     SNOCHAR(8)NOT NULL主键学生学号
     SNAMEVARCHAR2(20)UNIQUE专享约束学生姓名
     SEXCHAR(4)NOT NULL非空约束性别
     AGEINT年龄大于16岁年龄
     DEPTVARCHAR2(15)学生所在的系别名称
     SQL语句如下所示:
     CREATE TABLE STUDENT
     (SNO CHAR(8) PRIMARY KEY,/*主键约束*/
     SNAME VARCHAR2(20) UNIQUE , /*专享约束*/
     SEX CHAR(4) NOT NULL, /*非空约束*/
     AGE INT CHECK(Age>16), /*检查约束*/
     DEPT VARCHAR2(15));
     3?2建立样本数据库中的COURSE表,要求所有约束条件均为列级完整性约束,且该表满足表3.3中所示的条件。
     表3.3COURSE(课程)表
     字段名字 段 类 型是 否 为 空说明字 段 描 述
     CNOCHAR(8)NOT NULL主键课程编号
     CNAMEVARCHAR2(10)课程名称
     TNAMEVARCHAR2(10)授课教师名
     CPNOCHAR(8)外键(参照课程表中的课程编号)先修课程号
     CREDITNUMBER学分
     SQL语句如下所示:
     CREATE TABLE COURSE
     (CNO CHAR(8) PRIMARY KEY, /*主键约束*/
     CNAME VARCHAR2(10), TNAME VARCHAR2(10),
     CPNO CHAR(8) REFERENCES COURSE(Cno), /*外键约束*/
     CREDIT NUMBER);
     3?3建立样本数据库中的SC表,要求所有约束条件均为列级完整性约束,且该表满足表3.4中所示的条件。
     表3.4SC(选课)表
     字段名字 段 类 型是 否 为 空说明字 段 描 述
     SNOCHAR(8)NOT NULL外键(参照学生表中的学生编号)学生学号
     CNOCHAR(8)NOT NULL外键(参照课程表中的课程编号)课程编号
     GRADENUMBER选修成绩
     其中,(SNO,CNO)属性组合为主键。
     SQL语句如下所示:
     CREATE TABLE SC
     (SNO CHAR(8),
     CNO CHAR(8),
     GRADE NUMBER,
     PRIMARY KEY(SNO,CNO),
     /*主键约束*/
     FOREIGN KEY(SNO) REFERENCES STUDENT(SNO),
     /*外键约束*/
     FOREIGN KEY (CNO) REFERENCES COURSE(CNO) ); /*外键约束*/
     视频讲解
     3.2.2基本表的修改
     随着应用环境和实际需求的变化,经常需要修改基本表的结构,包括修改属性列的数据类型及其精度,增加新的属性列或删除属性列,增加新的约束条件或删除原有的约束条件。SQL语言通过ALTER TABLE命令对基本表的结构进行修改。其一般格式为:
     ALTER TABLE <基本表名>
     [ADD <新列名> <数据类型> [列级完整性约束]]
     [DROP COLUMN <列名>]
     [MODIFY <列名> <新的数据类型>]
     [ADD CONSTRAINT <完整性约束>]
     [DROP CONSTRAINT <完整性约束>];
     说明:
     (1) ADD: 为一个基本表增加新的属性列,但新的属性列的值必须允许为空(除非有默认值)。
     (2) DROP COLUMN: 删除基本表中原有的一列。
     (3) MODIFY: 修改基本表中原有属性列的数据类型。
     (4) ADD CONSTRAINT和DROP CONSTRAINT: 分别表示添加完整性约束和删除完整性约束。
     3?4向STUDENT表中增加一个身高Height属性列,数据类型为INT。 SQL语句如下所示:
     ALTER TABLE STUDENT ADD Height INT;
     新增加的属性列总是表的最后一列。不论表中是否已经有数据,新增加的列值为空。所以新增加的属性列不能有NOT NULL约束,否则就会产生矛盾。
     3?5将 STUDENT 表中的Height属性列的数据类型改为REAL。
     SQL语句如下所示:
     ALTER TABLE STUDENT MODIFY Height REAL;
     修改原有的列定义有可能会破坏已有数据,所以在修改时需要注意: 可以增加列值的宽度及小数点的长度,只有当某列所有行的值为空或整张表是空时,才能减少其列值宽度,或改变其列值的数据类型。
     3?6给STUDENT表中Height属性列增加一个CHECK约束,要求学生的身高要超过140cm才行。
     SQL语句如下所示:
     ALTER TABLE STUDENT ADD CONSTRAINT Chk1 CHECK(Height>140);
     Chk1是Height属性列上新增加的CHECK约束的名字。
     3?7删除Height属性列上的CHECK约束。
     SQL语句如下所示:
     ALTER TABLE STUDENT DROP CONSTRAINT Chk1;
     3?8删除 STUDENT 表中新增加的Height属性列。
     SQL语句如下所示:
     ALTER TABLE STUDENT DROP COLUMN Height;
     3.2.3基本表的删除
     当数据库某个基本表不再使用时,可以使用DROP TABLE语句删除它。其一般格式为:
     DROP TABLE <表名> [CASCADE CONSTRAINTS];
     删除基本表时要注意以下几点:
     (1) 表一旦被删除,则无法恢复。
     (2) 如果表中有数据,则表的结构连同数据一起删除。
     (3) 在表上的索引、约束条件、触发器以及表上的权限也一起被删除。
     (4) 当删除表时,涉及该表的视图、存储过程、函数、包被设置为无效。
     (5) 只有表的创建者或者拥有DROP ANY TABLE权限的用户才能删除表。
     (6) 如果两张表之间有主外键约束条件,则必须先删除子表,然后再删除主表。
     (7) 如果加上CASCADE CONSTRAINTS,在删除基本表的同时,相关的依赖对象也一起被删除。
     3?9删除学生选课表SC。
     SQL语句如下所示:
     DROP TABLE SC;
     基本表定义一旦被删除,表中的数据、表上建立的索引和视图都将自动被删除掉。因此执行删除基本表的操作一定要格外小心。删除表时要先删除从表,再删除主表。
     3.2.4实践环节: 基本表的操作
     某员工?部门数据库中包含雇员信息和部门信息两张基本表。各表的结构如附录A的表A.4和表A.5所示。
     雇员信息表: Emp(Empno,Ename,Age,Sal,Deptno),表中属性列依次是雇员编号、雇员姓名、年龄、月薪和部门号。
     部门信息表: Dept(Deptno,Dname,Loc), 表中属性列依次是部门号、部门名称和部门地点。
     (1) 请根据表的结构,用SQL语句分别创建部门信息表和雇员信息表。
     (2) 向雇员表中增加性别属性列,列名为Sex,数据类型为CHAR(4)。
     (3) 更改部门表中部门地点Loc的数据类型为VARCHAR2(20)。
     3.3数据操纵语言
     学生选课系统中的数据表定义完成后,用户需要用DML语句向表中插入数据。如果数据输入有误,则需要修改数据。如果不再需要某些数据,则需要删除数据。数据的插入、修改和删除都属于SQL语言的数据操纵功能。
     视频讲解
     3.3.1插入数据
     当基本表建立以后,就可以使用INSERT语句向表中插入数据了。向基本表中插入数据的语法格式如下:
     INSERT INTO <基本表名> [(<列名 1>,<列名 2>,…,<列名 n>)]
     VALUES(<列值 1>,<列值 2>,…,<列值 n>)
     其中,<基本表名>指定要插入元组的表的名字; <列名 1>,<列名 2>,…,<列名 n>为要添加列值的列名序列; VALUES 后则一一对应要添加列的输入值。
     注意:
     (1) 向表中插入数据之前,表的结构必须已经创建。
     (2) 插入的数据及列名之间用逗号分开。
     (3) 在 INSERT 语句中列名是可以选择指定的,如果没有指定列名,则表示这些列按表中或视图中列的顺序和个数。
     (4) 插入值的数据类型、个数、前后顺序必须与表中属性列的数据类型、个数、前后顺序匹配。
     3?10向学生表中插入一个新的学生记录。
     方法一: 省略所有列名
     INSERT INTO STUDENT
     VALUES ('05880111', '张晓三', '男', 23, '数学系');
     方法二: 指出所有列名
     INSERT INTO STUDENT(SNO,SNAME,SEX,AGE,DEPT)
     VALUES ('05880111', '张晓三', '男', 23, '数学系'); 两种方法的作用是相同的。
     3?11向学生表中指定的属性列插入数据。
     INSERT INTO STUDENT (SNO,SNAME,SEX)
     VALUES ('05880112', '王晓五', '女');
     其中,没有插入数据的属性列的值均为空值。
     注意: 在向表中插入数据时,所插入的数据应满足定义表时的约束条件。例如,如果再次向STUDENT表中插入学号为“05880112”的学生记录时,系统就会给出错误提示信息,违反了主键约束。如果再插入另一个新的学生“05880113”的学生记录,但不知道此同学的性别,插入的性别属性列的值为空值,此时系统也会给出错误提示信息,违反了定义表时对于“性别”字段的非空约束。
     视频讲解
     3.3.2修改数据
     如果表中的数据出现错误,可以利用UPDATE命令进行修改。UPDATE语句用以修改满足指定条件的元组信息。UPDATE语句一般语法格式为:
     UPDATE <基本表名>
     SET <列名 1> = <表达式> [,<列名 2> = <表达式>]…
     [WHERE <条件>];
     其中,UPDATE关键字用于定位修改哪一张表,SET关键字用于定位修改这张表中的哪些属性列,WHERE<条件>用于定位修改这些属性列中的哪些行。UPDATE语句只能修改一个基本表中满足 WHERE<条件>的元组的某些列值,即其后只能有一个基本表名。这里,WHERE<条件>是可选的,如果省略不选,则表示要修改表中所有的元组。
     1. 修改某一个元组的值
     3?12将java课程的学分改为4学分。
     UPDATE COURSE
     SET CREDIT=4
     WHERE CNAME='java';
     2. 修改多个元组的值
     3?13将所有男同学的年龄增加2岁。
     UPDATE STUDENT
     SET AGE=AGE+2
     WHERE SEX='男';
     3?14将所有课程的学分减 1。
     UPDATE COURSE
     SET CREDIT=CREDIT-1;
     3.3.3删除数据
     如果不再需要学生选课系统中的某些数据,此时应该删除这些数据,以释放其所占用的存储空间。DELETE 语句的一般语法格式为:
     DELETE FROM <表名> [WHERE <条件>];
     DELETE语句的功能是从指定表中删除满足 WHERE<条件>的所有元组。DELETE语句只删除表中的数据,而不能删除表的结构,所以表的定义仍然在数据字典中。如果省略WHERE<条件>,表示删除表中全部的元组信息。
     1. 删除某一个元组的值
     3?15删除学号为“20180010”的学生记录。
     DELETE FROM STUDENT
     WHERE SNO='20180010';
     2. 删除多个元组的值
     3?16删除学号为“20180002”的学生的选课记录。
     DELETE FROM SC
     WHERE SNO='20180002';
     每一个学生可能选修多门课程,所以 DELETE 语句会删除这个学生的多条选课记录。
     3?17删除所有学生的选课记录。
     DELETE FROM SC;
     3.3.4实践环节: 数据的操纵
     根据3.2.4节中所创建的两张表――部门信息表Dept(Deptno,Dname,Loc)和雇员信息表Emp(Empno,Ename,Age,Sal,Deptno),用 SQL语句完成下列操作。
     (1) 分别向雇员信息表和部门信息表中插入数据,各表中的数据如附录A的图A.4和图A.5所示。
     (2) 给部门编号为20的所有员工月薪涨500元。
     (3) 删除雇员表中年龄小于18岁的员工信息。
     3.4数据查询语言
     3.4.1SELECT语句的一般格式
     PL/SQL语言中最重要、最核心的操作就是数据查询。关系代数的运算在关系数据库中主要由SQL数据查询来体现。SQL语言提供SELECT语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。其基本格式为:
     SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]…
     FROM <表名或视图名>[,<表名或视图名>]…
     [WHERE<条件表达式>]
     [GROUP BY<列名 1> [HAVING <组条件表达式>]]
     [ORDER BY<列名 2> [ASC|DESC]];
     其中:
     (1) SELECT子句说明要查询的数据。ALL表示筛选出数据库表中满足条件的所有记录,一般情况下省略不写。DISTINCT表示查询结果中无重复记录。
     (2) FROM子句说明要查询的数据来源。可以是数据库中的一个或多个表,或者是视图,各项之间用逗号分隔。
     (3) WHERE子句指定查询条件。查询条件中会涉及PL/SQL函数和PL/SQL操作符。
     (4) GROUP BY子句表示在查询时,可以按照某个或某些字段分组汇总,各分组选项之间用逗号分隔。HAVING子句必须跟随GROUP BY一起使用,表示在分组汇总时,可以根据组条件表达式筛选出满足条件的组记录。
     (5) ORDER BY子句表示在显示结果时,按照指定字段进行排序。ASC表示升序,DESC表示降序,默认情况下是ASC。
     整个SELECT语句的含义是: 根据WHERE子句的条件表达式,从FROM子句指定的表或视图中找出满足条件的元组,再按照SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP BY子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中使用聚组函数。如果GROUP BY子句带有HAVING子句,则只有满足指定条件的组才能够输出。如果有ORDER BY子句,则结果表还需要按<列名2>的值的升序或者降序排列。查询子句的顺序是不可以前后调换的。
     由于SELECT语句的形式多样,可以完成单表查询、多表连接查询、嵌套查询和集合查询等,想要熟练地掌握和运用SELECT语句,必须要下一番工夫。
     下面我们以学生选课样例数据库系统为例,说明SELECT语句的各种用法。
     视频讲解
     3.4.2单表查询
     单表查询是指查询的数据只来自一张表,此时,SELECT语句中的FORM子句只涉及一张表的查询。
     1. 选择表中若干列
     选择表中的全部列或部分列,这就是投影运算。
     1) 查询指定的列
     3?18查询全体学生的学号、姓名和年龄。
     SELECT SNO,SNAME,AGE
     FROM STUDENT;
     查询结果如图3.1所示。
     3?19查询全部课程的课程名称和授课教师名。
     SELECT CNAME,TNAME
     FROM COURSE;
     查询结果如图3.2所示。
     图3.1例3?18的PL/SQL程序运行效果
     图3.2例3?19的PL/SQL程序运行效果
     2) 查询全部列
     3?20查询全部课程的详细记录。
     SELECT *
     FROM COURSE;
     查询结果如图3.3所示。
     3) 查询经过计算的值
     3?21查询全体学生的姓名、性别及其出生年份。
     SELECT SNAME,SEX,2018-AGE
     FROM STUDENT;
     查询结果如图3.4所示。
     图3.3例3?20的PL/SQL程序运行效果
     图3.4例3?21的PL/SQL程序运行效果
     4) 指定别名来改变查询结果的列标题 从前面的查询结果中,我们可以看到,显示的每一个属性列的标题是列名,有时候列名就是拼音代码,意义不是很清楚,为了解决这个问题,我们可以给属性列提供一个别名。方法就是: 在列名的后面加上一个空格或者“as”,然后写上它的别名。在查询结果显示时就用别名代替列名了。
     3?22查询全体学生的姓名、性别及其出生年份。
     SELECT SNAME,SEX,2018-AGE 出生年份
     FROM STUDENT;
     查询结果如图3.5所示。
     2. 选择表中若干行
     选择表中若干行,这就是选择运算。
     1) 消除取值重复的行
     3?23查询学生表中的所有院系。
     SELECT DEPT
     FROM STUDENT;
     查询结果如图3.6所示。
     图3.5例3?22的PL/SQL程序运行效果
     图3.6例3?23的PL/SQL程序运行效果
     图3.7例3?23的PL/SQL
     程序运行效果
     由于多名同学属于同一个院系,所以查询的结果中包含了许多重复的行。如果想去掉重复的行,必须指定DISTINCT关键字。
     SELECT DISTINCT dept
     FROM STUDENT;
     查询结果如图3.7所示。
     2) 查询满足条件的元组
     查询满足指定条件的元组可以通过WHERE子句来实现。使用WHERE子句时,应该注意以下几点:
     (1) 如果该列数据类型为字符型,需要使用单引号把字符串括起来。例如WHERE Cname='java'。单引号内的字符串大小写是有区别的。
     (2) 如果该列数据类型为日期型,需要使用单引号把日期括起来。
     (3) 如果该列数据类型为数字型,则不必用单引号。例如WHERE Age>20。
     (4) WHERE子句中可以使用?

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网