2.3 关系代数
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用对关系的运算来表达查询的。
关系代数的运算对象是关系,运算结果亦是关系
关系代数用到的运算符包括两类:集合运算符和专门的关系运算符
2.3.1 传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡尔积 4 种运算
① 并 Union
关系 R 与关系 S 的并记作:R ∪ S = {t|t∈R ∨ t∈S}
其结果仍为 n 目关系,由属于 R 或属于 S 的元组组成。
例图:
② 差 Difference
系R与关系S的差记作:R - S = {t|t∈R ∧ tS}
其结果关系仍为 n 目关系,由属于 R 而不属于 S 的所有元组组成。
例图:
③ 交 Intersection
关系 R 与关系 S 的交记作:R ∩ S = {t|t∈R ∧ t∈S}
其结果关系仍为 n 目关系,由既属于 R 又属于 S 的元组组成。关系的交可以用差来表示,即 R ∩ S = R-(R-S)
例图:
④笛卡尔积 Cartesian Product
例图:
2.3.2 专门的关系运算
专门的关系运算包括选择、投影、连接、除运算等
① 选择 selection
选择元组
示例 1:查询学生表 Student 中年龄小于 20 岁的学生的所有信息
σ age<20 (Student)
示例 2:
示例 3:
② 投影 projection
投影操作主要是从列的角度进行运算,投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
选择列
⚠ 注意:投影操作会去除列中的重复行
示例:查询学生表Student中都有哪些系
Ⅱ Sdept (Student)
③ 连接 join
连接也称 θ 连接。从两个关系的笛卡尔积中选取属性间满足一定条件的元组
连接运算中有两种常用连接:
等值连接:θ 为 = 的连接运算称为等值连接。他是从关系 R 与 S 的笛卡尔积中选取 A、B 属性值相等的那些元组
自然连接:自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉
示例:
在做自然连接的时候,两个关系中的某些元组可能会被抛弃,这些被舍弃的元组就称为悬浮元组。
如果要把悬浮元组也留在结果中,而在其他属性上填NULL,那么这种连接就叫做外连接 outer join
左外连接 left join:只保留左表的悬浮元组
右外连接 right join:只保留右表的悬浮元组
④ 除运算
象集的概念
举例:
给除运算下定义:
R ÷ S = T 表示 T 包含所有在 R 但不在 S 中的属性及其值,且 T 的元组与 S 的元组的 所有组合 都在 R中
示例:可以理解为在 R 中查找 B、C 属性和 S 中的 B、C 属性相同的,A 属性的值
T 中包含所有在 R 但不在 S 中的属性及其值
A在R中而不在S中,所以保留A属性,去掉 B、C、D三个属性
且 T 的元组和 S 的元组的所有组合都在 R 中
a1: a1 b1 c2 / a1 b2 c1 / a1 b2 c3 都在 R中
a2 : a2 b1 c2 不在 R 中 PASS!
a3:a3 b1 c2 不在 R 中 PASS!
a4:a4 b1 c2 不在 R 中 PASS!
2.3.3 关系代数习题
① 设有如下四个表:S(供应商表)P(零件表)J(工程项目表)SPJ(供应情况表)
② 设有如图所示的关系S、SC 和 C, 试用关系代数表达式表示下列查询语句:
检索”程军”老师所授课的课程号(C#)和课程名(CNAME)
ⅡC#,CNAME (σ TEACHER = '程军'(C) )
检索年龄大于21的男学生学号(S#)和姓名(SNAME)
ⅡS#,SNAME (σ AGE > '21' ∧ SEX = '男'(S) )
检索至少选修”程军”老师所授全部课程的学生姓名(SNAME)
关键字:至少 —— 用除法
ⅡSNAME ( ( ⅡS#,C#(SC) ÷ ⅡC#(σ TEACHER = '程军'(C)) ) ⚮ S )
检索”李强”同学不学课程的课程号(C#)
关键字:不 —— 用减法
ⅡC#(C) - ⅡC#( σSNAME = '李强'(S) ⚮ SC )
检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)
ⅡC#,CNAME(ⅡS#,C#(SC) ÷ ⅡS#(S) ⚮ C )
检索选修课程包含”程军”老师所授课程之一的学生学号(S#)
ⅡS#(σTEACHER = '程军'(C) ⚮ SC)
检索选修课程号为k1和k5的学生学号(S#)
ⅡS#,C#(SC) ÷ ⅡC#(σ C#=k1 ∨ C# = k2(C))
检索选修全部课程的学生姓名(SNAME)
关键字:全部 —— 用除法
ⅡSNAME( ( ⅡS#,C#(SC) ÷ ⅡC#(C) ) ⚮ S)
检索选修课程包含学号为2的学生所选修的全部课程的学生学号(S#)
ⅡS#,C#(SC) ÷ ⅡC#(σ S# = 2(SC) )
所有学号, 课程号 ÷ 学号为2的学生选修的课程号
检索选修课程名为'C语言'的学生学号(S#)和姓名(SNAME)
ⅡS#,SNAME(ⅡS#( SC ⚮ (σCNAME = 'C语言'(C)) ) ⚮ S)
检索没有一门课程成绩不及格的学生学号、姓名
ⅡS#,SNAME( (ⅡS#(S) - ⅡS#(σ GRADE < 60(SC) ) ⚮ S )
第三章 关系数据库标准语言 SQL
3.1 SQL 概述
SQL(Structured Query Language):结构化查询语言
大部分 DBMS 产品都支持 SQL,成为操作数据库的标准语言
3.1.1 SQL 数据库的体系结构
SQL 语言支持的关系数据库的三级模式结构
说明:
用户可以用 SQL 语言对视图(View)和基本表(Base Table)进行查询等操作,在用户观点里,视图和表一样,都是关系。
视图是从一个或多个基本表中导出的表,本身不存储在数据库中,只有其定义,可以将其理解为一个虚表。
基本表是本身独立存在的表,一个表可以带若干索引,存储文件及索引组成了关系数据库的内模式。
3.1.2 SQL 的功能
(1)数据定义(DDL)
定义、删除模式
定义、删除、修改关系模式(基本表)
定义、删除视图(View)
定义、删除索引(Index)
(2)数据操纵(DML)
数据查询
数据增、删、改
(3)数据控制(DCL)
用户访问权限的授予、收回
3.1.3 SQL 的特点
(1)高度非过程化的语言
用户只需提出“干什么”,至于“怎么干”由 DBMS 解决;用户只需要在查询语句中提出需要什么,DBMS即可按路径存取,并把结果返回给用户。
(2)面向集合的操作方式
每一个 SQL 的操作对象是一个或多个关 系,操作的结果也是一个关系。
(3)同一种语法结构,两种使用方式
即可独立使用,又可嵌入到 宿主语言中使用,具有自主型和宿主型两种特点。
(4)具有查询、操作、定义和控制四种语言一体化的特点
它只向用户提供一种语言,但该语言具有上述多种功能,且每种操作只需一种操作符。
(5)语言简洁、易学易用:核心功能只有 9 个动词,语法简单, 接近英语。
SQL 功能 动词
数据库查询 SELECT
数据定义 CREATE,DROP ,ALTER
数据操纵 INSERT,UPDATE,DELETE
数据控制 GRANT,REVOKE
3.2 SQL 基本语法
3.2.1 数据类型
SQL 语言支持的主要数据类型有:
数据类型 解释
CHAR(n) 固定长度为 n 的字符串型
VARCHAR (n) 最大长度为 n 的变长字符串型
INT 4 字节的整型
NUMERIC(n,s) 数值型,最大精度 n,s 为小数位数
DATE 日期型,包括年( 4 位)、月、日
Money 货币型( 8 字节,精确到货币单位的千分之十)
3.2.2 函数
数字函数:ABS(X), SQRT(X), RAND(X), LOG(X), …
字符函数:LENGTH(X), LOWER(X), UPPER(X), SUBSTRING(expression, start, length)…
分组函数:COUNT(*), MAX(X), MIN(X), AVG(X), SUM(X)
3.2.3 运算符
句法操作符:&
数值操作符:+,-,*,/, …
逻辑操作符:=,>,<,≤,≥,≠,IN,ANY,ALL, …
查询表达式操作符: UNION,…
3.2.4 SQL 语句格式符号
大括号 { }:大括号中的内容为必选参数,其中可有多个选项,各选项之间用竖线分隔,用户必须选择其中的一项。
方括号 [ ]:方括号中的内容为可选项,用户根据需要选用。
竖线 | :表示参数之间‘或’的关系。
省略号 “…”:表示重复前面的语法单元。
3.3 数据定义
DDL,Data Definition Language
关系数据库系统支持三级模式结构,其模式,外模式,内模式中的基本对象有模式、表、视图和索引,所以 SQL 的数据定义功能包括模式定义、表定义、视图和索引的定义