已知關係r(x,y)x
yx1y1x2
y2x2
y3x2
y1和關係s(y,f)y
fy1f1y2
f3r÷s其實就是判斷關係r中x各個值的像集y是否包含關係s中屬性y的所有值
第一步:找出關係r和關係s中相同的屬性,即y屬性。在關係s中對y做投影(即將y列取出);所得結果如下yy1
y2第二步:被除關係r中與s中不相同的屬性列是x ,關係r在屬性(x)上做取消重複值的投影為;
第三步:求關係r中x屬性對應的像集yxy
x1y1 x
yx2y1y2
y3對比即可發現:
x1的像集只有y1,不能包含關係s中屬性y的所有值,所以排除掉x1;
而x2的像集包含了關係s中屬性y的所有值,所以r÷s的最終結果就是x2
s:學生資訊表
snosname
age***1李強
23男2劉麗
22女5張友
22男sc:學生選課成績表
snocno
grade1k1
832k1855k1
922k5905k5
845k880
c:課程資訊表
cno(課號)
cname(課名)
teacher
k1c語言
王華k5
資料庫原理
程軍k8
編譯原理
程軍檢索至少選修程軍老師所授全部課程的學生姓名sname:
πsname(s⋈(πsno,cno(sc)÷πcno(σteacher=「程軍」(c ))))
檢索選修全部課程的學生姓名:
πsname(s⋈(πsno,cno(sc)÷πcno( c)))
檢索選修課程包含學號為2的同學所修課程的學生學號:
πsno,cno(sc)÷πcno(σsno=「2」(sc))
將除運算用sql語句表示,可以使用not exists
例如:檢索至少選修程軍老師所授全部課程的學生姓名sname,可以表達為,查詢名字為x的學生,對所有的課程y,只要是程軍老師授課,則x選修了y;等價轉換為,不存在這樣的課程y,是程軍老師授課,但學生x沒有選修,sql語言表示如下:
select sname
from s
where
notexists
(select
*from c
where teacher=
'程軍'
andnot
exists
(select
*from sc
where sc.sno=s.sno and sc.cno=c.cno)
);
同理有檢索選修課程包含學號為2的同學所修課程的學生學號,可以表達為,查詢學號為x的學生,對所有的課程y,只要學號為2的同學選修了課程y,那麼x也選修了課程y;等價轉換為,不存在這樣的課程y,學號為2的同學選修了y,而學號x的同學沒有選,sql語言表示如下:
select sno
from s
where
notexists
(select
*from sc a
where sc.sno=
'2'and
notexists
(select
*from sc b
where b.sno=s.sno and b.cno=a.cno)
);
關係代數運算除
1.關係運算的分類 1 基本運算操作 並 差 笛卡爾積 投影和選擇。2 組合運算操作 交 聯接 自然聯接和除。另外,還有幾種擴充的關係代數操作 外聯接 左外聯接和右外聯接 外部並和半聯接。2.除法定義的理解 設兩個關係r和s的元數分別為r和s r s 0 那麼r s是乙個 r s 元的元組的集合。r...
關係代數 除
1.關係運算的分類 1 基本運算操作 並 差 笛卡爾積 投影和選擇。2 組合運算操作 交 聯接 自然聯接和除。另外,還有幾種擴充的關係代數操作 外聯接 左外聯接和右外聯接 外部並和半聯接。2.除法定義的理解 設兩個關係r和s的元數分別為r和s r s 0 那麼r s是乙個 r s 元的元組的集合。r...
資料庫關係代數之除運算
除運算的 含義 給定關係r x,y 和s y,z 其中x,y,z為屬性組。r中的y與s中的y可以有不同的屬性名,但必須出自相同的域集。r與s的除運算得到乙個新的關係p x p是r中滿足下列條件的 元組在x屬性列上的投影 元組在x上分 量值x的象集yx包含s在y上投影的集合。解釋 有關係 r x,y ...