数据库的关系代数表达式
一、关系代数的9种操作:
关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。
五个基本操作:
并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)
四个组合操作:
交(∩)、联接(等值联接)、自然联接(R S)、除法(÷)
注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列)
注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列
二、关系代数表达式:
由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。
三、举例说明:
设教学数据库中有3个关系:
学生关系S(SNO, SNAME,AGE,SEX)
学习关系SC(SNO,CNO,GRADE)
课程关系C(CNO,CNAME,TEACHER)
(1) 检索学习课程号为C2的学生学号与成绩
------------------------------------
SELECT SNO,GRADE
FROM SC
WHERE CNO='C2'
------------------------------------
π SNO, GRADE (σ CNO='C2' (SC))
************************************
(2) 检索学习课程号为C2的学生学号与姓名
------------------------------------
SELECT SC.SNO,S.SNAME
FROM SC,S
WHERE SC.SNO=S.SNO
AND SC.CNO='C2'
------------------------------------
π SNO,SNAME (σ CNO='C2' (S SC))
此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
----
π SNO,SNAME (S) (π SNO (σ CNO='C2' (SC)))
自然连接的右分量为"学了C2课的学生学号的集合"。
此表达式比前一个表达式优化,执行起来要省时间、省空间。
************************************
(3) 检索选修课程名为MATHS的学生学号与姓名
------------------------------------
SELECT SC.SNO,S.SNAME
FROM SC,S,C
WHERE SC.SNO=S.SNO
AND SC.CNO=C.CNO
AND C.CNAME='MATHS'
------------------------------------
π SNO, SANME (σ CNAME='MATHS' (S SC C))
************************************
(4) 检索选修课程号为C2或C4的学生学号
------------------------------------
SELECT SNO
FROM SC
WHERE CNO='C2'
OR CNO='C4'
------------------------------------
π SNO (σ CNO='C2'∨CNO='C4' (SC))
************************************
(5) 检索至少选修课程号为C2或C4的学生学号
------------------------------------
SELECT SA.SNO
FROM SC AS SA,SC AS SB
WHERE SA.SNO=SB.SNO
AND SA.CNO='C2'
AND SB.CNO='C4'
------------------------------------
π 1 (σ 1=4∧2='C2'∧5='C4' (SC×SC))
************************************
(6) 检索不学C2课的学生姓名与年龄
------------------------------------
SELECT SNAME,AGE
FROM S
MINUS
SELECT S.SNAME,S.AGE
FROM SC,S
WHERE SC.SNO=S.SNO
AND SC.CNO='C2'
(Oracle)
------------------------------------
π SNAME, AGE (S)-π SNAME, AGE (σ CNO='C2' (S SC))
************************************
(7) 检索学习全部课程的学生姓名
------------------------------------
1)查询在XYZ工资工作的员工ID和姓名列表。
SELECT a.EmployeeId, a.EmployeeName
from Employee a, Working b, Company c
where a.EmployeeId = b.EmployeeId
and b.CompanyId = c.CompanyId
and c.CompanyName = 'XYZ'
2)查找居住地和公司所在地在同一个城市的所有员工
select a.EmployeeId, EmployeeName, a.City
from Employee a, Working b, Company c
where a.EmployeeId = b.EmployeeId
and b.CompanyId = c.CompanyId
and a.city = c.city
3)查找在CITY BANK工作并且工资大于30000美金的员工
Select a.EmployeeId, a.EmployeeName, b.Salary
from Employee a, Working b, Company c
where a.EmployeeId = b.EmployeeId
and b.CompanyId = c.CompanyId
and c.CompanyName = 'City Bank'
and b.Salary > 30000
4)查找每个公司员工的人数以及平均工资
SELECT b.CompanyName, COUNT(1) as empcnt, avg(a.salary) as avgsalary
from Working a, Company b
where a.companyid = b.companyid
group by b.companyname
数据库的关系代数表达式是由关系代数运算经有限次复合而成的式子。
在关系代数运算中,把由并(∪)、差(-)、笛卡尔积(×)、投影(π)、选择(σ)五个基本操作经过有限次复合的式子称为关系代数表达式。关系代数表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的各种数据查询和更新操作。
关系代数表达式用到的运算符包括集合运算符、专门的关系运算符、算术比较符和逻辑运算符。和交(∩)、联接(等值联接)、自然联接(RXS)、除法(÷) 四个组合操作。
扩展资料:
关系代数表达式的运算过程是将关系的属性分为像集属性和结果属性两部分;与关系相同的属性属于像集属性;不相同的属性属于结果属性。在关系中,对像集属性投影,得到目标数据集。将被关系分组。
分组原则是结果属性值一样的元组分为一组。逐一考察每个组,如果它的像集属性值中包括目标数据集,则对应的结果属性应属于该运算结果集。
一、关系代数的9种操作:
关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。
五个基本操作:
并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)
四个组合操作:
交(∩)、联接(等值联接)、自然联接(R S)、除法(÷)
注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列)
注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列
二、关系代数表达式:
由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。
三、举例说明:
设教学数据库中有3个关系:
学生关系S(SNO, SNAME,AGE,SEX)
学习关系SC(SNO,CNO,GRADE)
课程关系C(CNO,CNAME,TEACHER)
(1) 检索学习课程号为C2的学生学号与成绩
------------------------------------
SELECT SNO,GRADE
FROM SC
WHERE CNO='C2'
------------------------------------
π SNO, GRADE (σ CNO='C2' (SC))
************************************
(2) 检索学习课程号为C2的学生学号与姓名
------------------------------------
SELECT SC.SNO,S.SNAME
FROM SC,S
WHERE SC.SNO=S.SNO
AND SC.CNO='C2'
------------------------------------
π SNO,SNAME (σ CNO='C2' (S SC))
此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
----
π SNO,SNAME (S) (π SNO (σ CNO='C2' (SC)))
自然连接的右分量为"学了C2课的学生学号的集合"。
此表达式比前一个表达式优化,执行起来要省时间、省空间。
************************************
(3) 检索选修课程名为MATHS的学生学号与姓名
------------------------------------
SELECT SC.SNO,S.SNAME
FROM SC,S,C
WHERE SC.SNO=S.SNO
AND SC.CNO=C.CNO
AND C.CNAME='MATHS'
------------------------------------
π SNO, SANME (σ CNAME='MATHS' (S SC C))
************************************
(4) 检索选修课程号为C2或C4的学生学号
------------------------------------
SELECT SNO
FROM SC
WHERE CNO='C2'
OR CNO='C4'
------------------------------------
π SNO (σ CNO='C2'∨CNO='C4' (SC))
************************************
(5) 检索至少选修课程号为C2或C4的学生学号
------------------------------------
SELECT SA.SNO
FROM SC AS SA,SC AS SB
WHERE SA.SNO=SB.SNO
AND SA.CNO='C2'
AND SB.CNO='C4'
------------------------------------
π 1 (σ 1=4∧2='C2'∧5='C4' (SC×SC))
************************************
(6) 检索不学C2课的学生姓名与年龄
------------------------------------
SELECT SNAME,AGE
FROM S
MINUS
SELECT S.SNAME,S.AGE
FROM SC,S
WHERE SC.SNO=S.SNO
AND SC.CNO='C2'
(Oracle)
------------------------------------
π SNAME, AGE (S)-π SNAME, AGE (σ CNO='C2' (S SC))
************************************
(7) 检索学习全部课程的学生姓名
------------------------------------
这个定义用SQL表示比较麻烦,略过
------------------------------------
π SNO, CNO (SC)÷π CNO (C)
先用除法取出选取所有课程的SNO集(除法可以理解为一个Filter)
π SNAME (S (π SNO,CNO (SC)÷π CNO (C)))
再关联S表取出SNAME
************************************
(8) 检索所学课程包含S3所学课程的学生学号
------------------------------------
这个定义用SQL表示比较麻烦,略过
------------------------------------
π SNO,CNO (SC)÷ π CNO (σ SNO='S3' (SC))
同样运用了除法的特性
************************************
(9) 将新课程元组( 'C10','PHYSICS','YU') 插入到关系C中
------------------------------------
INSERT INTO C VALUES('C10','PHYSICS','YU')
------------------------------------
(C∪ ('C10','PHYSICS','YU'))
记住该符号的用法
************************************
(10) 将学号S4选修课程号为C4的成绩改为85分
------------------------------------
UPDATE SC SET GRADE=85
WHERE SNO='S4'
AND CNO='C4'
------------------------------------
(SC- ('S4','C4',? )∪ ('S4','C4',85))
先用'- '实现DELETE功能,再用'∪'实现INSERT功能
注意使用?来表示检索时忽略该字段值
************************************
四、关系代数表达式的优化:
目的 :为了系统在执行时既省时间又能提高效率。
基本策略 :先做选择,运用投影去除多余属性等等。
优化算法 :语法树( 尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)
例如:
π SNO ,SNAME (σ GRADE>60 (S SC)) 进行 优化后转换为:
π SNO ,SNAME (π SNO ,SNAME (S) π SNO (σ GRADE>60 (SC)))
--即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值
又如:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
π CNAME,TEACHER (σ SEX='女' (S SC C)) 进行 优化后转换为:
π CNAME, TEACHER (C π C# (π S#,C# (SC) π S# (σ SEX='女' (S))))
彩叛益气: 数据库的关系代数表达式是由关系代数运算经有限次复合而成的式子. 在关系代数运算中,把由并(∪)、差(-)、笛卡尔积(*)、投影(π)、选择(σ)五个基本操作经过有限次复合的式子称为关系代数表达式.关系代数表达式的运算结果...
晋宁县13231281473: 怎么用关系代数表达式完成数据库查询 - ?
彩叛益气: 括号里面的S▷◁SC表示的是自然连接,当查询的选择条件涉及的属性和查询结果要求的属性不在同一张表里的时候,这时就需要使用连接查询将条件和结果关联起来.
晋宁县13231281473: 数据库的关系代数有哪些? ?
彩叛益气: ⑴θ联接θ联接是从关系R和S的笛卡尔积中选取属性值满足某一θ操作的元组,记为:R?*iθj?S,这里i和j分别是关系R和S中第i个、第j个属性的序号 这是我的回答,希望对你有帮助.
晋宁县13231281473: 数据库关系代数表达式问题E1=πA(θB=C^D=99(R*S))E2=πB(θB=C(R*(θD=99(S)))这是俩个等价的关系代数表达式问哪个执行效率高 为什么?3Q - ?
彩叛益气:[答案] e2执行效率高 先选择再连接 和先连接再选择 原始的数据时前者少很多所以前者效率高
晋宁县13231281473: 设有基本表R(A,B,C)和S(A,B,C),试用SQL语句表示下列关系代数表达式.1.RXS 2.∏A,B(R)∏B,C(S)3.∏1,6(σ3=4(R*S)) 4.∏1,2,3((R S)) 5.R÷ ∏C(S) - ?
彩叛益气:[答案] 1 select R.*, S.* from R, S2 select A,B from R select B,C from S3 select R.A, S.C from R, S where R.C=B.A4 select R.A, R.B, R.C from R, S and R.A=S.A and R.B=S.B and R.C=S.C5select distinct R1.A, R1....
晋宁县13231281473: 求数据库查询语句:设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式 - ?
彩叛益气: 1) select A from R2) select * from R WHERE B = '17'3) select A, B, C, D, E, F FROM A, B4) SELECT A, F FROM R, S WHERE C = D
晋宁县13231281473: 数据库系统概论关系代数语句问题 - ?
彩叛益气: [例]设教学数据库中有3个关系:学生关系S(SNO,SNAME,AGE,SEX)学习关系SC(SNO,CNO,GRADE)课程关系C(CNO,CNAME,TEACHER) 下面用关系代数表达式表达每个查询语句.(1) 检索学习课程号为C2的学生学号与成绩.πSNO,...
晋宁县13231281473: 设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:(1)R∪S (2)R∩S (3)R - S - ?
彩叛益气:[答案] R∪S :select * from R union S R∩S:select * from R intersect S R-S:select * from R except S
晋宁县13231281473: 求解数据库查询语句:设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式 - ?
彩叛益气: (1)πA(R) SELECT A FROM R(2)σB='17'(R)SELECT * FROM R WHERE B=17(3)R*SSELECT * FROM R ACROSS S(4))πA,F(σC=D(R*S)) SELECT A , F FROM R JOIN S ON C=D
晋宁县13231281473: 数据库中 σ这个符号是什么意思啊 设有关系R(A,B,C)和关系S(B,C,D),那么与R⋈S等价的关系代数表达式[] - ?
彩叛益气:[选项] A. σ1=5(R⋈S) B. σ1=5(R*S) C. σ1=2(R⋈S) D. σ1=2(R*S) 这个里面1=5,1=2的什么意思啊?