当前位置:   article > 正文

数据库系统理论——关系代数、关系演算_查询信息系中年龄小于20岁的学生的学号和年龄

查询信息系中年龄小于20岁的学生的学号和年龄

一、关系代数
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号课程的学生的学号。
πSnoCno=‘2’(SC))

例9 查询至少选修了一门其直接先行课为5号课程的课程的学生姓名。
πSnameCpno=‘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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40136
推荐阅读
相关标签
  

闽ICP备14008679号