赞
踩
一、关系代数
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
| A | B | C |
|---|---|---|
| a1 | b1 | 5 |
| a1 | b2 | 6 |
| a2 | b3 | 8 |
| a2 | b4 | 12 |
| B | E |
|---|---|
| b1 | 3 |
| b2 | 7 |
| b3 | 10 |
| b3 | 2 |
| b5 | 2 |
(1)一般连接R连接S(C<E)
| A | B | C | B | E |
|---|---|---|---|---|
| a1 | b1 | 5 | b2 | 7 |
| a1 | b1 | 5 | b3 | 10 |
| a1 | b2 | 6 | b2 | 7 |
| a1 | b2 | 6 | b3 | 10 |
| a2 | b3 | 8 | b3 | 10 |
(2)等值连接R连接S(R.B=S.B)
| A | R.B | C | S.B | E |
|---|---|---|---|---|
| a1 | b1 | 5 | b1 | 3 |
| a1 | b2 | 6 | b2 | 7 |
| a2 | b3 | 8 | b3 | 10 |
| a2 | b3 | 8 | b3 | 2 |
(3)自然连接R连接S
| A | B | C | E |
|---|---|---|---|
| a1 | b1 | 5 | 3 |
| a1 | b2 | 6 | 7 |
| a2 | b3 | 8 | 10 |
| a2 | b3 | 8 | 2 |
例6 设关系R、S分别为下图的(a)和(b),R÷S的结果
| A | B | C |
|---|---|---|
| a1 | b1 | c2 |
| a2 | b3 | c7 |
| a3 | b4 | c6 |
| a1 | b2 | c3 |
| a4 | b6 | c6 |
| a2 | b2 | c3 |
| a1 | b2 | c1 |
| B | C | D |
|---|---|---|
| b1 | c2 | d1 |
| b2 | c1 | d1 |
| b2 | c3 | d2 |
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 查询全体学生的全部数据。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P. |
例2 求信息系全体学生的姓名。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.李勇 | IS |
例3 求年龄大于19岁的学生的学号。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P. 95001 | >19 |
例4 求计算机科学系年龄大于19岁的学生的学号。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P. 95001 | >19 | CS |
例5 查询既选修了1号课程又选修了2号课程的学生的学号。
| SC | Sno | Cno | Grade |
|---|---|---|---|
| P.95001 | 1 | ||
| P.95001 | 2 |
例6 查询计算机科学系或者年龄大于19岁的学生的学号。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P. 95001 | CS | ||||
| P. 95002 | >19 |
例7 查询选修1号课程的学生姓名。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| 95001 | P. 李勇 |
| SC | Sno | Cno | Grade |
|---|---|---|---|
| 95001 | 1 |
例8 查询未选修1号课程的学生姓名
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| 95001 | P. 李勇 |
| SC | Sno | Cno | Grade |
|---|---|---|---|
| ┐ | 95001 | 1 |
例9 查询有两个人以上选修的课程号
| SC | Sno | Cno | Grade |
|---|---|---|---|
| 95001 | P.1 | ||
| ┐95001 | 1 |
例10 查询信息系学生的平均年龄。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.AVG.ALL | IS |
例11 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.李勇 | 男 | DO(2). | AO(1). |
例12 把95001学生的年龄改为18岁。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| 95001 | U.18 |
例13 将计算机系所有学生的年龄都改为18岁
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| 95001 | U.18 | CS |
例14 把95001学生的年龄增加1岁
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| 95001 | 17 | ||||
| U. | 95001 | 17+1 |
例15 将计算机系所有学生的年龄都增加1岁
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| 95001 | 17 | CS | |||
| U. | 95001 | 17+1 | CS |
例16 把信息系女生95701,姓名张三,年龄17岁存入数据库中。
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| I. | 95701 | 张三 | 女 | 17 | IS |
例17 删除学生95089
| Student | Sno | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| D. | 95089 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。