关系型数据库-关系操做集合html
一、 基本的关系操做sql
关系模型中经常使用的关系操做包括查询(Query)操做和插入(Insert)、删除 (Delete)、修改(Update)操做两大部分。 数据库
查询操做分为:选择、投影、链接、除、并、差、交、笛卡尔积等;优化
五种基本操做:选择、投影、并、差、笛卡尔积;spa
关系操做的特色是集合操做方式,即操做的对象和结果都是集合、这种操做方式也称为一次一集合的方式。.net
二、关系数据语言的分类3d
关系操做是经过关系语言来实现的。 关系语言的特色是高度非过程化,即:code
(1)用户没必要请求数据库管理员为其创建特殊的存取路径,存取路径的选择由 DBMS 的优化机制来完成;orm
(2)用户也没必要求助于循环和递归来完成数据的重复操做。 htm
关系操做的能力能够用两种方式来表示:代数方式和逻辑方式。 关系代数、元组关系演算和域关系演算均是抽象的查询语言。结构化查询语言SQL充分体现了关系数据语言的特色和优势,是关于数据库的标准语言。
关系数据语言能够分为三类:关系代数语言、关系演算语言以及兼具二者双重特色的语言。三类语言的共同特色是语言具备完备的表达能力,是非过程化的集合操做语言,功能强,可以独立使用也能够嵌入高级语言中使用。
三、 关系代数
操做包含三大要素:操做对象、操做符、操做结果。在关系代数操做中,操做对象和操做结果均为关系。 关系代数直接应用关系的运算来表达操做目的,而代数用到的运算符包括集合运算符合专门的关系运算符两类,以下表所示:
(关系代数运算符)
A. 传统的集合运算是二目运算,关系当作元组的集合,其运算关系是从关系的“水平”方向,即行的角度来进行,有并、差、交、笛卡尔积 4 种运算。
1. 并:假设有两个关系 R1 和 R2,R1 和 R2 的并运算产生一个新关系 R3。R3 是 由属于关系 R1 或 R2 的全部不一样元组所组成,记为 R3=R1∪R2。
2. 差:假设有两个关系 R1 和 R2,R1 和 R2 的差运算产生一个新关系 R3。R3 是由属于关系关系 R1,但不属于 R2 的元组组成,记为 R3=R1-R2。
3. 交:假设有两个关系 R1 和 R2,R1 和 R2 的交运算产生一个新关系 R3。R3 是由既属于关系 R1,同时又属于 R2 的元组组成,记为 R3=R1∩R2。
4. 笛卡尔积:假设有两个关系 R1 和 R2,且 R1 为 m 元关系,R2 为 n 元关系, R1 和 R2 的笛卡尔积产生一个新关系 R3,记做 R3=R1✖R2。R3 是 由 R1 和 R2 的全部元组链接而成的具备(m+n)个份量的元组组成。
B. 从列的角度,可分为一元专门关系操做和二元专门关系操做。 一元专门关系操做包括对单个关系进行垂直分解的投影运算和进行水平分解选择运算;二元专门关系操做则是对两个关系进行操做,包括链接运算和除运算。
(0)相关概念:
(0.0)域是一组具备相同数据类型值的集合。
(0.1)设关系模式为R(A1, A2, …, An)。它的一个关系设为R。t∈R表示t是R的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个份量 。
(0.2)给定一个关系R(X,Z),X和Z为属性组。咱们定义,当t[X]=x时,x在R中的象集(Images Set)为:
eg:以下图所示关系R,则
x1在R中的像集Z(x1)={Z1,Z2,Z3},
x2在R中的像集Z(x2)={Z2,Z3},
x3在R中的像集Z(x3)={Z1,Z3}。
注:如下举例统一使用,设存在Student表,Sno表示学号属性,Sage表示年龄,Sname表示姓名,Ssex表示性别,Sdept表示所在系
(1) 选择(SELECT)
选择运算表示为:
其中,F 为条件表达式,R 为指定的被运算关系名。
sql伪代码形式以下:
SELECT 关系名 WHERE 条件
eg:
则查询表中年龄小于20的学生,
关系代数方式:
SQL方式: select * from Student where Sage > 20
(2) 投影(PROJECTION)
关系R上的投影是从R中选择出若干属性列组成新的关系。记做: 其中A为R中的属性列。投影操做是从列的角度进行运算。
eg:
查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影
关系代数方式: ∏Sname,Sdept(Student)
SQL方式: select Student.Sname,Student.Sdept form Student
注意:投影以后不只取消了原关系的某些列,并且还可能取消某些元祖,由于取消了某些属性以后,就可能出现重复行,应取消这些彻底相同的行。
(3) 链接(JOIN)
链接运算也称为θ链接,从两个关系(R、S)中的广义笛卡尔积中选取属性间知足必定条件的元组造成一个新的链接:
其中: A为包含R中的属性的表达式;
B为包含S中的属性的表达式;
θ一般为关系比较符。
(3.1) 非等值链接
θ不为“=”的链接称为非等值链接
sql伪代码: select * from emp e join dept d on e.sal > d.avgsal
(3.2) 等值链接
θ为“=”的链接称为等值链接,它是从关系R和S的笛卡儿积中选取A、B属性值相等的那些元组。等值链接的属性名能够相同也能够不相同。
select * from emp e join dept d on e.sal = d.avgsal
select * from emp e join dept d on e.deptno = d.deptno
(3.3) 天然链接
天然链接是一种特殊的等值链接,它要求两个关系进行比较的份量必须是同名的属性组,而且在结果中把重复的属性列去掉。通常的链接是从行的角度进行操做,天然链接须要取消重复列,因此它是从行和列的角度进行操做。
select * from emp natural join dept
(3.4) 外链接
两个关系R和S在作天然链接时,选择两个关系在公共属性上值相等的元组构成新的关系。此时,关系R和S可能有在公共属性上不相等的元组,从而形成R或S中元组的舍弃,这些舍弃的元组被称为悬浮元组。若是把悬浮元组也保存在结果关系中,而在其余属性上填空值,那么这种链接就叫作外链接。
① 左外链接
若是只保留左边关系R中的悬浮元组就叫作左外链接。
select * from emp e left join dept d on e.deptno = d.deptno --员工8888没有部门,只保留左表的悬浮元组,其余属性为null
② 右外链接
若是只保留右边关系S中的悬浮元组就叫作右外链接。
select * from emp e right join dept d on e.deptno = d.deptno --40号部门没有人,只保留右表的悬浮元组,其余属性为null
③ 全外链接
若是保留两边关系R和S中的全部悬浮无级就叫作全外链接。
select * from emp e full join dept d on e.deptno = d.deptno --保留两边的悬浮元组,左表和右表各有一条悬浮元组记录,一共16行
(3.5) 自链接
select * from emp e1 join emp e2 on e1.empno = e2.mgr 设图中(a)和(b)分别是关系R和关系S,图中(c)为非等值链接的结果,图(d)为等值链接
的结果,图(e)为天然链接
的结果:
(4) 除(DIVISION)
除运算表示为: R➗S,其中 R 和 S 表明两个不一样的关系。在除运算中,若被除关系为 m 元关系,除关系为 n 元关系,则运算结果为一个 m-n 元关系。
用象集来定义除法:
① 给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组,R中的Y与S中的Y能够有不一样的属性名,但必须出自相同的域集;
② 元组在X上的份量值x的象集K要包含S在Y上投影的集合,知足前面条件的元组在X属性上的投影就是R除以S的结果关系;
③ 除操做是同时从行和列角度进行的操做。
关系R
X | Y |
x1 | y1 |
x1 | y1 |
x1 | y2 |
x2 | y3 |
x2 | y5 |
关系S
Y | Z |
y1 | z1 |
y3 | z2 |
R÷S
X |
x1 |
分析:
① S在(Y)上的投影的集合是:{(y1),(y3)};
② 元组在X上的份量值x的象集有两组;
x1的象集K1={(y1),(y2),(y3)}
x2的象集K2={(y3),(y5)}
③ 从①②得知只有象集K1包含了S在(Y)上的投影;
④ 知足以上条件的象集K1在X属性上的投影为{(x1)}。
很是感谢您的阅读,如需转载请注明出处,本文连接http://www.javashuo.com/article/p-btomclir-ee.html
另附推荐相关博客连接http://www.javashuo.com/article/p-cgjcdxep-kq.html