一、关系代数
1.四类运算符
(1)集合运算符
∩(交)、∪(并)、—(差)、X(广义笛卡尔积)
(2)比较运算符
>、≥、<、≤、=、≠
(3)专门的关系运算符
σ(选择)、π(投影)、⋈(连接)、÷(除)
(4)逻辑运算符
与、或、非


例1 查询信息系(IS系)全体学生
σSdept=‘IS’(Student)

例2 查询年龄小于20岁的学生
σSage<20(Student)

例3 查询学生的姓名和所在系
πSname,Sdept(Student)

例4 查询学生关系Student中都有哪些系
πSdept(Student)

例5 关系R和关系S如图所示。一般连接R⋈S(C<E)、等值连接R⋈S(R.B=S.B)、自然连接R⋈S

ABC
a1b15
a1b26
a2b38
a2b412
BE
b13
b27
b310
b32
b52

(1)一般连接R连接S(C<E)

ABCBE
a1b15b27
a1b15b310
a1b26b27
a1b26b310
a2b38b310

(2)等值连接R连接S(R.B=S.B)

AR.BCS.BE
a1b15b13
a1b26b27
a2b38b310
a2b38b32

(3)自然连接R连接S

ABCE
a1b153
a1b267
a2b3810
a2b382

例6 设关系R、S分别为下图的(a)和(b),R÷S的结果

ABC
a1b1c2
a2b3c7
a3b4c6
a1b2c3
a4b6c6
a2b2c3
a1b2c1
BCD
b1c2d1
b2c1d1
b2c3d2

a1的象集为{(b1,c2),(b2,c3),(b2,c1)}
a2的象集为{(b3,c7),(b2,c3)}
a3的象集为{(b4,c6)}
a4的象集为{(b6,c6)}
S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}
R÷S={a1}

A
a1

例7 查询至少选修1号课程和3号课程的学生号码
先建立一个临时关系K

Cno
1
3

πSno,Cno(SC)÷K

例8 查询选修了2号课程的学生的学号。
πSno(σCno=‘2’(SC))

例9 查询至少选修了一门其直接先行课为5号课程的课程的学生姓名。
πSname(σCpno=‘5’(Course⋈SC⋈Student))

例10 查询选修了全部课程的学生号码和姓名。
πSno,Cno(SC)÷πCno(Course)⋈πSno,Sname(Student)


二、关系演算
1.元组关系演算语言ALPHA
(1)检索语句
GET
(2)更新语句
PUT、HOLD、UPDATE、DELETE、DROP


例1 查询所有被选修的课程号码。
get w (SC.Cno)

例2 查询所有学生的数据。
get w (Student)

例3 查询信息系(IS)中年龄小于20岁的学生的学号和年龄。
get w (Student.Sno,Student.Sage):Student.Sdept=‘IS’ ∧ Student.Sage<20

例4 查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序。
get w (Student.Sno,Student.Sage):Student.Sdept=‘CS’ down Student.Sage

例5 取出一个信息系学生的学号。
get w (1) (Student.Sno):Student.Sdept=‘IS’

例6 查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序。
get w (3) (Student.Sno,Student.Sage):Student.Sdept=‘IS’ down Student.Sage

例7 查询信息系学生的名字
range Student x
get w (x.Sname):x.Sdept=‘IS’

例8 查询选修2号课程的学生名字。
range SC x
get w (Student.Sname): ∃x(x.Sno=Student.Sno ∧ x.Cno=‘2’)

例9 查询选修了这样课程的学生学号,其直接先行课是6号课程。
range Course x
get w (SC.Sno): ∃x(SC.Cno=x.Cno ∧ x.Cpno=‘6’)

例10 查询至少选修一门其先行课为6号课程的学生名字
range Course cx
          SC scx
get w (Student.Sname): ∃cx∃scx(scx.Cno=cx.Cno ∧ cx.Cpno=‘6’ ∧ scx.Sno=Student.Sno)

例11 查询成绩为90分以上的学生名字与课程名字。
range SC x
get w (Student.Sname,Course.Cname): ∃x(x.Grade>90 ∧ x.Sno=Student.Sno ∧x.Cno=Course.Cno)

例12 查询不选1号课程的学生名字。
range SC x
get w (Student.Sno): ┐∃x(x.Sno=Student.Sno ∧ x.Cno=‘1’)
或
range SC x
get w (Student.Sno): ∀x(x.Sno≠Student.Sno v x.Cno=‘1’)

例13 查询选修了全部课程的学生姓名。
range Course cx
          SC scx
get w (Student.Sname): ∀cx∃scx(x.Cno=scx.Cno ∧ scx.Sno=Student.Sno)

例14 查询最少选修了95002学生所选课程的学生学号。
range Course cx
          SC scx
          SC scy
get w (Student.Sno): ∀cx(∃scx(scx.Cno=cx.Cno ∧ scx.Sno=‘95002’)->∃scx(scy.Sno=Student.Sno ∧ scy.Cno=cx.Cno))

例15 查询学生所在系的数目。
get w (count(Student.Sdept))

例16 查询信息系学生的平均年龄
get w (avg(Student.Sage):Student.Sdept=‘IS’)

例17 把95007学生从计算机科学系转到信息系。
hold w (Student.Sno,Student.Sdept):Student.Sno=‘95007’
move ‘IS’ to w.Sdept
update w

例18 学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入该课程元组
move ‘8’ to w.Cno
move ‘计算机组织与结构’ to w.Cname
move ‘6’ to w.Cpno
move ‘2’ to w.Ccredit
put w (Course)

例19 95110学生因故退学,删除该学生元组。
hold w (Student):Student.Sno=‘95110’
delete w

例20 将学号95001改为95102。
由于主码不能修改
hold w (Student):Student.Sno=‘95001’
delete w
move ‘95102’ to w.Sno
…
put w (Student)

例21 删除全部学生。
hold w (Student)
delete w


2.域关系演算语言QBE


例1 查询全体学生的全部数据。

StudentSnoSnameSsexSageSdept
P.

例2 求信息系全体学生的姓名。

StudentSnoSnameSsexSageSdept
P.李勇IS

例3 求年龄大于19岁的学生的学号。

StudentSnoSnameSsexSageSdept
P. 95001>19

例4 求计算机科学系年龄大于19岁的学生的学号。

StudentSnoSnameSsexSageSdept
P. 95001>19CS

例5 查询既选修了1号课程又选修了2号课程的学生的学号。

SCSnoCnoGrade
P.950011
P.950012

例6 查询计算机科学系或者年龄大于19岁的学生的学号。

StudentSnoSnameSsexSageSdept
P. 95001CS
P. 95002>19

例7 查询选修1号课程的学生姓名。

StudentSnoSnameSsexSageSdept
95001P. 李勇
SCSnoCnoGrade
950011

例8 查询未选修1号课程的学生姓名

StudentSnoSnameSsexSageSdept
95001P. 李勇
SCSnoCnoGrade
┐950011

例9 查询有两个人以上选修的课程号

SCSnoCnoGrade
95001P.1
┐950011

例10 查询信息系学生的平均年龄。

StudentSnoSnameSsexSageSdept
P.AVG.ALLIS

例11 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。

StudentSnoSnameSsexSageSdept
P.李勇男DO(2).AO(1).

例12 把95001学生的年龄改为18岁。

StudentSnoSnameSsexSageSdept
95001U.18

例13 将计算机系所有学生的年龄都改为18岁

StudentSnoSnameSsexSageSdept
95001U.18CS

例14 把95001学生的年龄增加1岁

StudentSnoSnameSsexSageSdept
9500117
U.9500117+1

例15 将计算机系所有学生的年龄都增加1岁

StudentSnoSnameSsexSageSdept
9500117CS
U.9500117+1CS

例16 把信息系女生95701,姓名张三,年龄17岁存入数据库中。

StudentSnoSnameSsexSageSdept
I.95701张三女17IS

例17 删除学生95089

StudentSnoSnameSsexSageSdept
D.95089

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐