数据库系统概述 数据模型 关系数据库和SQL语言 关系数据库操作 数据仓库和数据挖掘简介 小结和习题 第6章 数据库技术基础 数据库系统概述 数据模型 关系数据库和SQL语言 关系数据库操作 数据仓库和数据挖掘简介 小结和习题 返回书目
数据库系统概述 信息、数据和数据处理 数据管理技术的发展 数据库应用系统和数据库管理系统 第6章 数据库技术基础 数据库系统概述 信息、数据和数据处理 数据管理技术的发展 数据库应用系统和数据库管理系统
6.1 数据库系统概述 信息、数据和数据处理 信息和数据 信息是经过加工处理并对人类客观行为产生影响的事物属性的表现形式。 数据是指用符号记录下来的、可识别的信息,是反映客观事物属性的记录,是信息的载体。 信息是有用的数据,数据是信息的表现形式,信息通过数据符号来传播,而数据如不具有知识性和有用性,则不能称其为信息。
6.1 数据库系统概述 信息、数据和数据处理 数据处理 数据处理又称为信息处理。数据处理指的是利用计算机对各种类型的数据进行处理,包括对数据的采集、整理、存储、分类、排序、检索、维护、加工、计算、统计和传输等一系列操作过程。
6.1 数据库系统概述 与硬件(主要是外存)、软件、计算机应用范围有密切的联系。 数据管理技术的发展 人工管理阶段(特点 ) 文件系统阶段 (特点 不足) 数据库系统阶段(特点 )
6.1 数据库系统概述 人工管理阶段的特点: (1)计算机主要用于计算 (2)没有专用的软件对数据进行管理 (3)只有程序(program)的概念,没有文件(file)的概念 (4)数据面向应用,即一组数据对应一个程序 前一页
6.1 数据库系统概述 文件系统阶段的特点: 在文件系统阶段,由于具有设备独立性,因此改变存储设备,不必改变应用程序 (1)数据可长期保存在外存的磁盘上 (2)数据的逻辑结构与物理结构有了区别 (3)文件组织呈现多样化 (4)数据处理不再属于某个特定的程序,可以重复使用 在文件系统阶段,由于具有设备独立性,因此改变存储设备,不必改变应用程序 前一页
6.1 数据库系统概述 文件系统的不足: (1)数据不独立。 (2)数据冗余性。 (3)数据不一致性。 用户1 处理教师信息的应用程序 教师信 息文件 用户2 处理课程信息的应用程序 课程信 (2)数据冗余性。 (3)数据不一致性。 (4)难以提供符合用户不同要求的信息。 (5)安全性差。 前一页
6.1 数据库系统概述 数据库系统阶段的特点:(参见表6-1 ) 数据不再针对某一应用,而是面向全组织,具有整体的结构化,共享性高,冗余度小,而且具有一定的独立性,系统对数据进行统一的控制。 用户1 用户2 用户3 数据库 应用程序 管理系统 前一页
6.1 数据库系统概述 数据库应用系统和数据库管理系统 数据库应用系统 (DataBase Application Sytems,DBAS)是专指基于数据库的信息处理系统。 一个DBAS通常由数据库系统和应用程序两部分组成。 着重介绍数据库系统。
6.1 数据库系统概述 数据库应用系统和数据库管理系统 数据库系统的组成 数据库系统的特点 数据库管理系统 数据库系统的体系结构
6.1 数据库系统概述 1.数据库系统(DataBase System,DBS)的组成 (1)数据库(Data Base,DB ) (2)硬件 工(3)软件 (4)数据库管理系统(Database Management System,DBMS) (5)数据库管理员(DataDase Administrator,DBA)
6.1 数据库系统概述 2.数据库系统的特点 (1)数据集中管理 (2)数据重复少 (3)应用程序与数据独立 (4)容易提供符合用户不同要求的信息 (5)易于提供安全保障
6.1 数据库系统概述 3.数据库管理系统 数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库管理系统负责数据库中数据的查找、增加、删除、修改的操作,并维护数据的一致性、完整性等管理任务。
6.1 数据库系统概述 用户1 用户2 用户3 数据库 应用程序 管理系统
6.1 数据库系统概述 3.数据库管理系统 数据库管理系统主要的功能: (1)数据定义功能 (2)数据操纵功能 (3)数据库的运行和管理功能 (4)数据库的建立和维护功能
6.1 数据库系统概述 4.数据库系统的体系结构 --- 三级模式结构:外模式、概念模式和内模式 (1)外模式(子模式或用户模式),对应于用户级 (2)概念模式(逻辑模式,简称模式)对应于概念级 (3)内模式(存储模式),对应于物理级 三级模式是数据的三个级别的抽象,使用户能够逻辑地、抽象地处理数据而不必关心数据在计算机中的表示和存储。
6.1 数据库系统概述 用户A1 用户A2 用户B1 用户B2 外视图A 外视图B 概念视图 存储数据库 (内视图) DBMS 由数据库管理员建立和维护的模式 … 外模式A 外模式B 概念模式 存储结构定义 (内模式)
6.2 数据模型 数据模型(Data Model) 用来抽象、表示和处理现实世界中的数据和信息。 数据模型的概念 概念模型 基本数据模型
6.2 数据模型 数据模型的概念 数据模型是指构造数据时所遵循的规则以及对数据所能进行的操作的总体。 数据模型的定义 现实世界的模拟和抽象。在数据库中用数据模型这个工具表示和处理现实世界中的数据和信息
6.2 数据模型 数据模型的基本要求 数据模型的两个层次 (1)比较真实地模拟现实世界; (2)容易为人们理解; (3)便于计算机表达。 (1)概念数据模型,简称概念模型,又称信息模型,是按用户观点将数据模型化。 (2)结构数据模型,简称数据模型。它是按计算机观点将数据模型化,是机器世界中数据之间关系及其操作的描述。
6.2 数据模型 现实世界 信息世界 概念模型 机器世界 数据模型 人脑的认 识与抽象 转换
6.2 数据模型 数据模型的组成 数据模型是严格定义的一组概念的集合,这些概念精确地描述了系统的静态特性、动态特性和完整性约束条件。数据模型包括: (1)数据结构 (2)数据操作 (3)完整性约束
6.2 数据模型 概念模型(用于信息世界的建模) 概念模型的特点 概念模型是对现实世界的抽象和概括 概念模型简洁、明晰、独立于机器,很容易理解 概念模型易于改动 概念模型很容易向层次、网状、关系等数据模型转换
6.2 数据模型 信息世界中的基本概念 (1)实体(entity ) (2)属性(attribute) (3)码(key) (4)域(domain) (5)实体型(entity type) (6)实体集(entity set) (7)联系(Relationship)
6.2 数据模型 实体之间的联系 实体之间的联系通常指不同实体集之间的联系。 1. 两个实体集之间的联系 (1)一对一联系(1:1) 1. 两个实体集之间的联系 (1)一对一联系(1:1) (2)一对多联系(1:n) (3)多对多联系(m:n) 2. 两个以上实体集之间也存在着一对一、一对多和多对多的联系
6.2 数据模型 物理系 数学系 化学系 赵亮 李明 王莉 物理 数学 化学 王丽 刘英 徐剑 张强 林海 (c)多对多 微积分 程序设计 (a)一对一 物理 数学 化学 王丽 刘英 徐剑 张强 林海 (c)多对多 微积分 程序设计 数据库 大学物理 (b)一对多
6.2 数据模型 概念模型的表示方法-ER图 (1)实体型:用矩形表示 (2)属性:用椭圆形表示 (3)联系:用菱形表示 (Entity-RelationshipApproach,E-R方法) (1)实体型:用矩形表示 (2)属性:用椭圆形表示 (3)联系:用菱形表示 E-R图描述了实体及其联系,但还不能进一步说明详细的数据结构。
6.2 数据模型 “学生”实体及其属性
6.2 数据模型 “学生”和“课程”实体及其联系
6.2 数据模型 基本数据模型 遇到实际问题总是先设计一个E-R模型,再把它转换为计算机能实现的某一种基本数据模型。 层次模型 层次模型例 信息学院 计算机 电子工程 自动化 计1 计2 计3 电1 电2 动1 动2 层次模型例
6.2 数据模型 网状模型 学院领导 教授联谊会 计算机协会理事 赵教授 研究生 李教授 网状模型例
6.2 数据模型 关系模型 关系模型是最重要的数据模型。 关系模型的所谓“关系”特指那种虽具有相关而非从属性的平行的数据之间按照某种序列排列的集合关系。 某班学生基本情况表 例如:同一班级的学生,就可用一张二维表表示,称为建立一个关系 姓名 性别 年龄 籍贯 孙勇 男 19 上海 许丽 女 18 浙江 张伟 山西 唐红 天津 田兵 20 江苏
6.2 数据模型 在用户看来,关系模型中数据的逻辑结构是一张二维表。 关系数据模型中的一些基本概念: (1)关系:一个关系对应于一张二维表。 (2)属性:表中的一列称为一个“属性”,在实际系统中,有时又称为“字段”。 (3)域:属性的取值范围。
6.2 数据模型 (4)元组:表中的一行称为一个“元组”,在实际系统中,有时又称为“记录”。 (5)码:表中的某个属性组,其值唯一地标识一个元组,称该属性组为“候选码”。若一个关系有多个候选码,则选定其中一个为主码,主码的诸属性称为“主属性”。 (6)分量:元组中的一个属性值。
6.2 数据模型 (7)关系模式:对关系的描述,包括关系名、组成该关系的属性名、属性向域的映象 ,通常记为: 关系名(属性名1,属性名2,… ,属性名n)。 属性向域的映象直接说明为属性的类型、长度。
6.2 数据模型 (8)关系模型:关系模型是一种建立在严格数学理论基础上的数据模型,实体以及实体之间的联系都用二维表表示。二维表在关系模型中称为“关系”,对关系的描述是“关系模式”。 例如,学生与课程之间多对多的联系在关系模型中可以用三个关系模式来表示: 学生(学号,姓名,性别,年龄,系名) 课程(课程号,课程名,先修课程号) 选课(学号,课程号,成绩)
6.2 数据模型 在这里,“选课”关系把“学生”和“课程”这两个关系联系了起来。 上述关系也可简写为: S(SNO,SN,SS,SA,SD),码为SNO C(CNO,CN,PCNO),码为CNO SC(SNO,CNO,SG),码为(SNO,CNO) 在这里,“选课”关系把“学生”和“课程”这两个关系联系了起来。
6.2 数据模型 (9)关系数据库:按照关系模型建立的数据库。 应当分清型与值的概念。 关系数据库的型即数据库描述,它包括若干域的定义以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某时刻对应的关系的集合。 关系模式是稳定的,而关系是不断变化的,因为数据库中的数据是在不断变化更新的。模式在某一时刻对应的的集合。 关系模型具有许多优点。
6.2 数据模型 面向对象模型 面向对象模型是用面向对象观点来描述现实世界中的事物(对象)的逻辑结构和对象间的联系等的数据模型。 面向对象模型能完整地描述现实世界的数据结构,具有丰富的表达能力,但模型相对比较复杂,涉及的知识面广。 用面向对象模型组织的数据库称为面向对象数据库。面向对象数据库具有检索效率高、自然合理(与人类的思维最接近)等特性。
6.3 关系数据库和SQL语言 关系模型 关系操作 关系模型给出了关系操作集合。关系操作采用集合操作方式,即操作的对象和结果都是集合。 (1)传统的集合操作,如并、交、差、广义笛卡尔积。 (2)专门的关系操作,如选择、投影、连接。
6.3 关系数据库和SQL语言 关系模型的完整性约束条件 (1)实体完整性。 实体完整性是指关系的主属性(主码的组成部分)不能是空值。 说明。 (2)参照完整性。参照完整性规则要求“不引用不存在的实体”。 设有学生、专业、课程三个实体以及学生和课程之间的多对多的选课联系,为此用下列四个关系表示(带下划线的属性为主属性):
6.3 关系数据库和SQL语言 显然,上述关系之间存在着属性的引用: 专业(专业号,专业名,所属学院) 学生(学号,姓名,性别,年龄,专业号,班长) 课程(课程号,课程名,学时数,学分) 选课(学号,课程号,成绩) 显然,上述关系之间存在着属性的引用: 学生关系中某个属性(专业号 )的取值需要参照专业关系中的属性取值。 选课关系中某些属性(学号 、课程号 )的取值需要参照其它关系中的属性取值。
6.3 关系数据库和SQL语言 参照完整性的定义: 如基本关系R2的属性中包含与另一个基本关系R1的主码K相对应的属性组F,那么F称为“外部码”。对R2中每个元组在F上的取值只允许两种可能:①空值;②等于R1中某个元组的主码值。这里R1与R2不一定是不同的关系,K与F是定义在同一域中的。
6.3 关系数据库和SQL语言 参照完整性的实例: 学生关系中的“专业号”属性与专业关系中的主码“专业号”对应,因此“专业号”属性是学生关系的外码。这里专业关系是被参照关系,学生关系是参照关系。对于学生关系中的外码“专业号”而言,它取空值表示该学生还没有确定专业;取非空值,该值必须是专业关系中某个元组的“专业号”值,表示该专业是专业关系中确实存在的,即参照关系中“专业”中一定存在一个元组,它的主码等于该参照关系“学生”中的外码值。
6.3 关系数据库和SQL语言 关于参照完整性规则的注意点(1)~(3)。 (3)用户定义的完整性。 用户定义的完整性是针对某一具体应用环境的完整性约束条件,反映了某一具体应用所涉及的数据应该满足的语义要求。例如,工人的性别必须为男或女,工人的年龄限制在16~60之间。 数据库管理系统提供了定义和检验这类完整性约束规则的机制,目的是用统一的方式由系统处理,而不必由应用程序来处理。
6.3 关系数据库和SQL语言 关系数据语言 数据库的主要功能是通过数据库支持的数据语言来实现的。 关系数据语言的分类 SQL语言概述
6.3 关系数据库和SQL语言 关系数据语言的分类 查询是数据操纵语言中最主要的部分,按查询的表达方式数据操纵语言分为关系代数和关系演算两类,而关系演算又分为元组关系演算和域关系演算。 关系数据语言可以分为四类: (1)关系代数语言 (2)元组关系演算语言 (3)域关系演算语言 (4)具有代数及关系演算双重特点的语言
6.3 关系数据库和SQL语言 SQL语言概述 SQL(Structured Query Language)在关系数据库领域中被称为标准数据库语言,它不仅具有丰富的数据操纵功能,而且具有数据定义和数据控制功能,是集数据操纵、数据定义、数据控制功能为一体的关系数据语言,充分体现了关系数据语言的特点和优点。
6.3 关系数据库和SQL语言 SQL语言的组成及特点 SQL包括了对数据库的所有操作,主要分为三个部分:①数据定义语言,主要定义数据库的逻辑结构,包括定义基本表、索引和视图;②数据操纵语言,包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和修改操作;③数据控制语言(Data Control Language,DCL),主要有对基本表和视图的授权、事务控制等。
6.3 关系数据库和SQL语言 SQL语言的组成及特点 SQL 的特点主要有: 综合统一 高度非过程化 面向集合的操作方式 语言简洁、易学易用
6.3 关系数据库和SQL语言 SQL数据库的体系结构 几个基本概念: 基本表 视图 用户可以用SQL语言对视图和基本表进行查询
6.3 关系数据库和SQL语言 SQL数据库的体系结构
6.4 关系数据库操作 SQL语言是高度非过程化的语言,用户只要按SQL语法写出自己的查询要求,而不需要告诉系统怎么干,就能实现SQL的各项功能,完成各种数据操作。 SQL的主要功能 :
6.4 关系数据库操作 数据定义 数据定义功能包括对数据库、基本表、视图和索引的创建和撤销操作。 SQL中的数据类型 CHAR(n) 、VARCHAR(n)、 SMALLINT 、INT 或 INTEGER DECIMAL(p,s)或 NUMERIC(p,s) REAL 、 FLOAT 或 DOUBLE PRECISION 、 DATE 、TIME
6.4 关系数据库操作 数据库的创建和删除 关系数据库被定义为关系(基本表)、索引和视图的集合。在创建关系、索引和视图前,必须首先创建数据库。 在SQL92中,创建数据库可用CREATE SCHEMA语句。 SQL Server使用CREATE DATABASE语句来创建一个关系数据库。
6.4 关系数据库操作 [例6.1]在SQL Server 7.0中创建一个学生管理数据库STUDENTS: CREATE DATABASE STUDENTS ON(NAME=‘STUDENTS’ FILENAME=’C:\MSSQL7\DATA\STUDENTS.MDF’, SIZE=10MB, MAXSIZE=50MB, FILEGROWTH=5MB ) LOG ON( NAME=’ STULOG’ FILENAME=’C:\MSSQL7\DATA\STULOG.LDF‘, SIZE=1MB, MAXSIZE=5MB, FILEGROWTH=10%
6.4 关系数据库操作 例如 数据库的创建和删除 删除一个学生管理数据库STUDENTS 当一个数据库及其所属的基本表、视图、索引都不需要时,可以用DROP语句删除(撤销)。在SQL92中,撤销数据库可用DROP SCHEMA 语句。 SQL Server用DROP DATABASE语句来删除一个关系数据库。 例如 DROP DATABASE STUDENTS 删除一个学生管理数据库STUDENTS
6.4 关系数据库操作 基本表的创建、修改和删除 创建基本表 CREATE TABLE <表名> ( <列名><数据类型> [<列级完整性约束条件>] [,<列名> <数据类型> [<列级完整性约束条件>]]... [,<表级完整性约束条件>] )
6.4 关系数据库操作 [例6.2]在学生管理数据库中创建一个学生情况表S,它由学号SNO、姓名SN、性别SS、年龄SA、所在系SD五个属性组成,其中学号为主码,姓名取值不能为空且要唯一,性别只能区男或女。 CREATE TABLE S ( SNO CHAR(6) PRIMARYKEY, SN CHAR(8)NOT NULL UNIQUE, SS CHAR(2) CHECK(SS IN(’男’,’女’), SA SMALLINT, SD CHAR(14) )
6.4 关系数据库操作 [例6.3] 创建一个选课表SC,它由学号SNO、课程号CNO、成绩G三个属性组成,其中(学号,课程号)为主码,成绩取值为空或在0~100之间。 CREATE TABLE SC ( SNO CHAR(6) FOREIGN KEY REFERENCES S(SNO), CNO CHAR(6) FOREIGN KEY REFERENCES C(CNO), SG SMALLINT CHECK(SG IS NULL OR SG BETWEEN 0 AND 100, PRIMATRY KEY(SNO,CN0) )
6.4 关系数据库操作 基本表的创建、修改和删除 修改基本表 [例6.4]在基本表S中增加一个属性电话号码: ALTER TABLE <表名> [ADD <新列名><数据类型>[<完整性约束>]] [DROP<完整性约束名><完整性约束名>] [MODIFY<列名> <数据类型><数据类型>] [例6.4]在基本表S中增加一个属性电话号码: ALTER TABLE S ADD PH CHAR(8)
6.4 关系数据库操作 基本表的创建、修改和删除 [例6.6]删除基本表SC。 删除基本表 DROP TABLE<表名> DROP TABLE SC 创建和删除索引 (1)CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名>[<次序>] [,<列名>[<次序>]]...)
6.4 关系数据库操作 DROP INDEX SC_SNOCNOI (2)DROP INDEX <索引名> [例6.7]为S和SC两个基本表建立索引,其中S表按年龄升序索引,SC表按学号升序和课程号降序索引。 CREATE INDEX S_SAI ON S(SA) CREATE UNIQUE INDEX SC_SNOCNOI ON SC(SNO,CNO DESC) (2)DROP INDEX <索引名> [例6.8] 删除SC表上的SC_SNOCNOI索引。 DROP INDEX SC_SNOCNOI
6.4 关系数据库操作 数据查询 数据查询是数据库的核心操作。它是指根据用户的需要,以一种可读方式从数据库中提取所需的数据。 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]... FROM <表名或视图名> [,<表名或视图名>] ... [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式>]] [ORDER BY <列名2> [ASC|DESC]]
6.4 关系数据库操作 查询准备 设学生管理数据库STUDENTS由三个基本表: (1)“学生”表: (2)“课程”表: (3)“选课”表: S(SNO,SN,SS,SA,SD),码为SNO (2)“课程”表: C(CNO,CN,PCNO),码为CNO (3)“选课”表: SC(SNO,CNO,SG),码为(SNO,CNO)
6.4 关系数据库操作 数据查询 (1)选择表中的若干列( “投影”) 简单查询(单个表 ) [例6.9]查询全体学生的学号与姓名。 SELECT SNO,SN FROM S [例6.10] 查询全体学生的详细记录。 SELECT * FROM S
6.4 关系数据库操作 [例6.12]查找全体学生情况,并将结果按年龄升序排序。 [例6.11]查询学生的姓名和出生年份。 SELECT SN,2003-SA AS BirthYear FROM S [例6.12]查找全体学生情况,并将结果按年龄升序排序。 SELECT * ORDER BY SA ASC
6.4 关系数据库操作 (2)用WHERE子句选择满足条件的行 [例6.13]查找计算机系全体学生的名单。 SELECT SN FROM S WHERE SD=’CS’ [例6.14] 查所有选修过课的学生的学号。 SELECT DISTINCT SN FROM SC
6.4 关系数据库操作 [例6.15]查找年龄不在20至22岁的学生姓名、系别和年龄。 SELECT SN,SD,SA FROM S WHERE SA NOT BETWEEN 20 AND 22 [例6.16]查找数学系和计算机学生的姓名和年龄。 SELECT SN,SA WHERE SD=’MA’ OR SD=’CS’
6.4 关系数据库操作 [例6.17]查找缺少成绩的学生号和课程号。 SELECT SNO,CNO FROM SC WHERE SG IS NULL [例6.18]查询姓名前四个字符为“WANG”的所有学生的姓名及所在系。 SELECT SN,SD FROM S WHRERE SN LIKE ’WANG%’
6.4 关系数据库操作 连接查询 若查询涉及两个以上的表,则称为连接查询。在连接查询中需要将多个表连接起来,形成一个包含条件和结果中涉及的全部数据的临时表,再对该临时表用单表查询的方法进行查询。 连接查询主要包括等值连接、非等值连接查询、自身连接查询(自身连接)、外连接查询(外连接)和复合条件连接查询(复合条件连接)等。
6.4 关系数据库操作 连接查询 等值与非等值连接查询 用来连接两个表的条件称为连接条件。 其一般格式为: [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> 其中比较运算符主要有: =、>、<、>=、<=、!=<=、!=
6.4 关系数据库操作 当连接运算符为=时,称为等值连接。使用其它运算符称为非等值连接。 连接谓词词还可以使用下面形式: [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3> 当连接运算符为=时,称为等值连接。使用其它运算符称为非等值连接。 连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的。
6.4 关系数据库操作 DBMS执行连接操作的过程: 首先在表1中找到第一个元组,然后从头开始顺序扫描表2,查找满足连接条件的元组,每找到一个元组, 就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。表2全部扫描完毕后,再到表1中找第二个元组,然后再从头开始顺序扫描表2,查找满足连接条件的元组,每找到一个元组, 就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直到表1全部元组都处理完毕为止。
6.4 关系数据库操作 [例6.19]查询每个学生的选课情况。 学生信息在S表中,学生选课信息在SC表中,所以本查询实际上同时涉及S与SC两个表中的数据。这两个表之间的联系是通过两个表都具有的属性SNO实现的。要查询学生及其选修课程的情况,就必须将这两个表中学号相同的元组连接起来。这是一个等值连接。 SELECT S.*, SC.* FROM S,SC WHERE S.SNO=SC.SNO
6.4 关系数据库操作 自身连接 连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,这种连接称为表的自身连接。 [例6.20]查询每一门课的间接先修课。 SELECT FIRST.CNO,SECOND.PCNO FROM C FIRST,C SECOND WHERE FIRST.PCNO=SECOND.CNO
6.4 关系数据库操作 [例6.21]查找选修C1课程而且成绩为75分以上的学生姓名、学号、系别和成绩。 SELECT SN,SNO,SD,CNO,SG FROM S,SC WHERE SC.SNO=S.SNO AND SC.CNO=’C1’ AND SC.SG>=75
6.4 关系数据库操作 嵌套查询 [例6.22]查询选修了C1课程的学生姓名。 FROM S WHERE SNO IN SELECT SNO 一个SELECT…FROM…WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HANVIG短语中的查询称为嵌套查询。 [例6.22]查询选修了C1课程的学生姓名。 SELECT SN FROM S WHERE SNO IN SELECT SNO FROM SC WHERE CN0=’C1’
6.4 关系数据库操作 [例6.23]查询选修了课程名为“OS”的学生学号和姓名。 方法一 : SELECT S.SNO,SN FROM S,C,SC WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND C.CN=’OS’
6.4 关系数据库操作 [例6.23]查询选修了课程名为“OS”的学生学号和姓名。 方法二 : SELECT SNO,SN FROM S WHERE SNO IN SELECT SNO FROM SC WHERE CNO IN SELECT CNO FROM C WHERTE CN=’OS’
6.4 关系数据库操作 [例6.24]查询选修了C2课程的学生姓名。 SELECT SN FROM S WHERE EXISTS FROM SC WHERE SNO=S.SNO AND CNO=’C2’ )
6.4 关系数据库操作 [例6.25] 查询不修C2课程的学生姓名。 SELECT SN FROM S WHERE NOT EXISTS FROM SC WHERE SNO=S.SNO AND CNO=’C2’ )
6.4 关系数据库操作 [例6.26]查询计算机科学系的学生及年龄小于18岁的学生。 SELECT * FROM S WHERE SD=’CS’ UNION WHERE SA<18
6.4 关系数据库操作 库函数 COUNT( )对一列中的值计算个数 COUNT(*)计算记录个数 SUM( ) 求某一列值的总和(此列值必须为数值) AVG( ) 求某一列值的平均值(此列值必须为数值) MAX( ) 求一列中的最大值 MIN( ) 求一列中的最小值
6.4 关系数据库操作 [例6.27]使用库函数求: ①课程总数; ②选修了课程的学生人数; ③数学系学生的平均年龄; ④课程号与选修该课程的学生人数; ⑤选修课程超过了3门的学生学号。
6.4 关系数据库操作 (1)SELECT COUNT(*) FROM C (2)SELECT COUN(DISTINCT SNO) FROM SC (3)SELECT AVG(SA) FROM S WHERE SD=’MA’ (4)SELECT CNO,COUNT(SNO) GROUP BY CNO
6.4 关系数据库操作 (5)题意分析: 首先要求出每个学生选修了几门课程,为此要按SNO分组,再用库函数COUNT对每一组计数,如果某一组的数目大于3,表示该学生选修的课程超过3门,应将其学号选出。分组条件可以使用HAVING子句。 SELECT SNO FROM SC GROUP BY SNO HAVING COUNT(*)>3
6.4 关系数据库操作 数据更新 数据的插入、删除、和修改。 插入数据 (1)插入一个元组 INSERT INTO <表名>[(<属性列1> [,<属性列2>]…)] VALUES(<常量1>[,<常量2>]…)
6.4 关系数据库操作 [例6.28]将一个新学生记录(S10,张明,男,18,MA)插入到S表中。 INSERT INTO S VALUES(’S10’,’张明’,’男’,18,’MA’) [例6.29]插入一个选课记录(’S15’,’C10’,90)。 INTO SC(SNO,CNO,SG) VALUES(’S15’,’C10’,90)
6.4 关系数据库操作 (2)插入子查询结果 INSERT INTO <表名>[(<属性列1> [,<属性列2>]…)] 子查询 如果有些属性列在插入语句中没有出现,则这些列上的值取空值。需要注意的是,在表的定义时说明了NOT NULL的属性列不能取空值。若INTO子句中没有指明列名,则新插入的记录必须在每个列上均有值。
6.4 关系数据库操作 [例6.30]对每个系求学生的平均年龄,并把结果存入数据库。 首先创建一个存放结果的新表: CREATE TABLE DEPTAGE ( SDEPT CHAR(15), AVGAGE SMALLINT )
6.4 关系数据库操作 再将查询结果插入到新表中: INSERT INTO DEPTAGE(SDEPT,AVGAGE) SELECT SD,AVG(SA) FROM S GROUP BY SD
6.4 关系数据库操作 删除数据 DELETE FROM <表名> [WHERE<条件表达式>] 删除语句的功能是从指定的表中删除满足WHERE子句中的条件表达式的那些元组。如果没有WHERE子句,表示删除表中所有元组,但表的定义仍在字典中。
6.4 关系数据库操作 [例6.31] 删除一个元组:从学生表中删除学号为S124的记录。 DELETE FROM S WHERE SNO= ’S124’ [例6.32] 删除多个元组:从课程表中删除先修课程号为C328的所有记录。 FROM C WHERE PCNO= ’C328’
6.4 关系数据库操作 [例6.33] 删除所有元组:从选课表中删除所有记录。 DELETE FROM SC
6.4 关系数据库操作 [例6.34] 用子查询表达删除条件:删除计算机系所有学生的选课记录。 DELETE FROM SC WHERE ’CS’= ( SELECT SD FROM S WHERE S.SNO=SC.SNO ) WHERE PCNO= ’C328’
6.4 关系数据库操作 修改数据 修改数据是指修改指定表中满足条件表达式的元组。 UPDATE<表名> SET <列名1>=<表达式1> [,<列名2>=<表达式2>]… [WHERE<条件表达式>] 执行时按SET子句中的表达式修改元组的列值。如果省略WHERE子句,表示表中所有元组都要修改,否则仅修改满足条件的部分元组。
6.4 关系数据库操作 [例6.35] 修改一个元组:学生表中学号为“S1”的学生的姓名改为“王平”。 UPDATE S SET SN=’王平’ WHERE SNO=’S1’ [例6.36] 修改多个元组:所有学生年龄加1。 SET SA=SA+1
6.4 关系数据库操作 [例6.37] 用子查询表达修改条件:把数学系所有学生成绩置’0’。 UPDATE SC SET SG=0 WHERE ’MA’= ( SELECT SD FROM S WHERE S.SNO=SC.SNO )
6.4 关系数据库操作 视图(虚表,导出表 ) 定义视图 CTEATE VIEW <视图名>[(<列名1> [,<列名2>]…)] AS <子查询> [WITH CHECK OPTION] 子查询可以是任意复杂的SELECT 语句。WITH CHECK OPTION表示对视图进行UPDATE和INSERT时要保证更新或插入的行满足视图定义中的条件。
6.4 关系数据库操作 [例6.38]建立计算机科学系学生的视图。 CTEATE VIEW CS_S AS SELECT SNO,SN,SS,SA FROM S WHERE SD=’CS’
6.4 关系数据库操作 [例6.39]将学生的学号及其所有已考课程的平均成绩定义为一个视图。 CTEATE VIEW S_G(SNO,GAVE) AS SELECT SNO,AVG(SG) FROM SC WHERE SG IS NOT NULL GROUP BY SNO
6.4 关系数据库操作 删除视图 查询视图 删除视图使用语句DROP VIEW DROP VIEW <视图名> 视图定义后,用户就可以像基本表一样对视图进行查询。
6.4 关系数据库操作 [例6.40]在计算机系学生视图中查询年龄小于20岁的学生。 FROM CS_S WHERE SA=<20 SELECT SNO,SA FROM CS_S WHERE SA=<20 对视图的查询涉及视图CS_S中的子查询 AS SELECT SNO,SN,SS,SA FROM S WHERE SD=’CS’
6.4 关系数据库操作 系统将用户对视图CS_S的查询最终转换为对基本表的查询: SELECT SNO,SA FROM S WHERE SD=’CS’ AND SA<20 [例6.41] 查询平均成绩在80分以上的学生学号。 SELECT SNO FROM S_G WHERE GAVE>=80
6.4 关系数据库操作 更新视图 [例6.42]删除计算机系年龄为20的学生记录。 通过视图进行数据的插入、删除和修改。 FROM CS_S DELETE FROM CS_S WHERE SA=20 转换为对基本表的删除: FROM S WHERE SA=20 AND SD=’CS’
6.4 关系数据库操作 视图的优点 对数据库的重构提供了一定程度的逻辑独立性。 简化了用户观点。 使用户能以多种方式看待同一数据。 提供对机密数据的安全保护功能。
6.4 关系数据库操作 数据控制 数据控制是系统通过对数据库用户的使用权限加以限制而保证数据安全的重要措施。 SQL中数据库控制功能主要有:数据的安全性与完整性控制、并发控制、数据恢复等。
6.5 数据仓库和数据挖掘 数据仓库 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
6.5 数据仓库和数据挖掘 数据仓库系统是一个包含四个层次的体系结构。
6.5 数据仓库和数据挖掘 数据挖掘 数据挖掘是指从大量的、不完全的、有噪声的、模糊的、随机的数据集中识别有效的、新颖的、潜在有用的,以及最终可理解的模式的非平凡过程。 数据挖掘可粗略地理解为三部曲:数据准备(data preparation)、数据挖掘,以及结果的解释评估(interpretation and evaluation)。
6.6 小结和习题 小结 本章介绍了数据管理技术的发展和数据库应用系统的基本组成,介绍了数据模型的基本知识,着重讨论了关系数据库和SQL的数据定义、数据操纵和视图功能,简单介绍了数据控制、数据仓库和数据挖掘的概念。 习题 (P219 习题)