關系代數sql
A. sql語句實現關系代數中的「除法」
給定關系R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運算可以得到一個新的關系P(X),P是R中滿足下列條件的元組在X 屬性列上的投影: 元組在X上的分量值x的像集Y(x)包含S在Y上的投影的集合。
第一步:找出關系R和關系S中相同的屬性,即Y屬性。在關系S中對Y做投影(即將Y列取出);
第二步:被除關系R中與S中不相同的屬性列是X,關系R在屬性X上做取消重復值的投影;
第三步:求關系R中X屬性對應的像集Y;
第四步:判斷包含關系,R÷S其實就是判斷關系R中X各個值的像集Y是否包含關系S中屬性Y的所有值。
R(X,Y)÷S(Y,Z)的運算用結構化語言SQL 語句可表達為下列形式:
B. SQL、關系代數練習
一、
--1.建立學生表Student,其中以學號為主碼,以系號為外碼,姓名不可以為空值,性別取值為「男」或「女」
CREATETABLEStudent
(
Sno INT,
Name VARCHAR(20) NOTNULL,
Gender CHAR(2),
Class VARCHAR(20),
Major VARCHAR(20),
Dno CHAR(2)
CONSTRAINTpk_Student_SnoPRIMARYKEY(Sno),
CONSTRAINTfk_Student_DnoFOREIGNKEY(Dno)REFERENCESDept(Dno),
CONSTRAINTchk_Student_GenderCHECK(GenderIN('男','女'))
)
--2.檢索與「王強」在同一個班級的學生的學號、姓名、性別
SELECTSno,Name,Gender
FROMStudent
WHEREClass=(='王強')
--3.檢索管理學院沒有選修「電子商務」課程的學生的學號、姓名、班級、專業
SELECTS1.Sno,Name,Class,Major
FROMStudentS1
JOINDeptD
ONS1.Dno=D.Dno
WHEREDname='管理學院'
ANDSnoNOTIN
( SELECTS2.SnoFROMStudyS2
JOINCourseC
ONS2.Cno=C.Cno
WHERESubject='電子商務')
--4.檢索選修了「C語言」且C語言考試成績高於這門課平均成績的學生的學號、姓名
SELECTS1.Sno,Name
FROMStudentS1
JOINStudyS2
ONS1.Sno=S2.Sno
JOINCourseC1
ONS2.Cno=C1.Cno
WHERESubject='C語言'
ANDScore>( SELECTAVG(Score)
FROMStudyS3
WHERES3.Cno=S2.Cno)
--5.在院系表(Dept)中插入一條記錄,系號為06,系名為「物理系」,電話為8470660
INSERTINTODempVALUES('06','物理系','84706600')
--6.將「資料庫原理」課程的學時改為64,學分改為4
UPDATECourse
SETTime=64,
Credit=4
WHERESubject='資料庫原理'
--7.建立由班級、學號、姓名、課程號、課程名、學分、成績七個數據項組成的視圖
CREATEVIEWVW_SC
AS
SELECTClass,Sno,Name,Cno,Subject,Credit,Score
FROMStudentS1
JOINStudyS2
ONS1.Sno=S2.Sno
JOINCourseC
ONS2.Cno=C.Cno
二、
2.
C. 關系代數與SQL語句的關系舉例說明
SQL語句用法及關系代數運算是資料庫原理課中的重點和難點內容,關系代數是一種抽象數學語言,是關系數據操縱語言的一種傳統表達方式.SQL是業界公認的一種結構化的查詢語言,雖然各類資料庫管理系統中SQL語言有不同語法結構,但差別不大,且已形成了關系資料庫的國際標准語言.
D. 如何把sql語言轉換成關系代數
sql和關系代數實現查詢的方法是一樣的,只是表現形式不一樣。關系代數用選擇、投影、連接、除來實現查詢,SQL通過select--from--where來實現。加上where條件後就相當於關系代數中的選擇,select後面的屬性列相當於投影,from後面如果有幾個數據表,則在where子句中需要加上各個數據表的連接屬性是相同的這個查詢條件,也就相當於連接了。
E. 簡述SQL與關系代數的聯系和區別
聯系:關系代數是sql的理論基礎。
區別:sql是結構化查詢語言,是資料庫具體的技術標准和規范。關系代數是數學理論。
F. 關系代數與SQL語句:
我用一個例子進行講述,希望您可以理解其中的含義:例題:有以下三個關系:
關系XSJB(學生信息) 關系KC(課程) 關系SC(選課)
XH XM NI XB KCH KCM XH KCH G
1001 張明 20 女 001 離散數學 1001 001 88
1002 吳海 21 男 002 數據結構 1001 002 80
1003 孫軍 23 男 003 資料庫原理 1001 003 80
2001 王一 25 女 004 計算機網路 2002 005 85
2002 黃三 20 男 005 英語 2003 001 70
2003 趙平 19 男 2003 003 85
2003 002 90
005 85
上面三張表中XH、XM、NI、XB、KCH、KCM、G分別表示學生的學號、姓名、年齡、性別、課程號、課程名、成績
檢索課程號為「001」的課程名。(用關系代數和SQL語言表示)
關系代數:
πkcm(σkch='001'(XSJB))
SQL語言:
select KCM
from XSJB
where KCH='001'
G. sql資料庫中關系代數的除運算怎麼理解
R(A,B)/S(B)
將被除關系R按照除S不包含的屬性A進行分組,查看每個分組a,如果分組a中包含的B屬性值能夠覆蓋S中的B屬性值,則該分組符合查詢條件。
H. 述關系代數運算中的每一種運算與SQL 查詢語句有什麼關系
關系運算的投影,就是SQL查詢一列(豎),比如Select
sno
from
stu。而關系運算的選擇,就是查詢幾行(橫),比如,select
*
from
stu。關系的聯接運算,就是SQL的連接查詢(內,外,左,右,自然,等值等等),比如
Select
*
(或者某列)
from
stu,sc
where
stu.sno=sc.sno
關系的除運算應用較少也不好理解,這里不考慮。
I. SQL的五種基本關系代數運算是什麼
五種基本操作:並,差,積,選擇,投影;構成關系代數完備的操作集。其他非基本操作:可以用以上五種基本操作合成的所有操作。並(U)、交(⌒)、投影(π)選擇(σ)和笛卡兒積(×)。
J. sql,關系代數~~
資料庫關系代數表達式學習
關系代數是關系資料庫系統查詢語言的理論基礎。很有必要學習一下,有些是用代數表達式很方便的東西,用SQL寫出來還是挺麻煩的,並不是想像當中那麼直接。
種操作:一、關系代數的9種操作:
關系代數中包括了:並、交、差、乘、選擇、投影、聯接、除、自然聯接等操作。
五個基本操作:五個基本操作:並(∪)、差(-)、笛卡爾積(×)、投影(σ)、選擇(π)
四個組合操作:四個組合操作:交(∩)、聯接(等值聯接)、自然聯接(RS)、除法(÷)注2:等值連接表示先做笛卡爾積(×)之後,對相應列進行選擇或等值關聯後的結果(僅篩選行、不篩選列)注2:自然連接表示兩個關系中若有相同名稱的屬性,則自動作為關聯條件,且僅列出一列
二、關系代數表達式:關系代數表達式:
由關系代數運算經有限次復合而成的式子稱為關系代數表達式。這種表達式的運算結果仍然是一個關系。可以用關系代數表達式表示對資料庫的查詢和更新操作。
三、舉例說明:舉例說明:
設教學資料庫中有3個關系:
學生關系S(SNO,SNAME,AGE,SEX)學習關系SC(SNO,CNO,GRADE)課程關系C(CNO,CNAME,TEACHER)
(1)檢索學習課程號為C2的學生與成績-----------------------------------SELECTSNO,GRADEFROMSCWHERECNO='C2'------------------------------------
π
SNO,GRADE(σCNO='C2'(SC))
************************************
(2)檢索學習課程號為C2的學生與-----------------------------------SELECTSC.SNO,S.SNAMEFROMSC,SWHERESC.SNO=S.SNOANDSC.CNO='C2'-----------------------------------π
SNO,SNAME(σCNO='C2'(S
SC))
此查詢涉及S和SC,先進行自然連接,然後再執行選擇投影操作。---π
SNO,SNAME(S)
(πSNO(σCNO='C2'(SC)))
自然連接的右分量為"學了C2課的學生的集合"。此表達式比前一個表達式優化,執行起來要省時間、省空間。************************************
(3)檢索選修課程名為MATHS的學生與------------------------------------
SELECTSC.SNO,S.SNAMEFROMSC,S,CWHERESC.SNO=S.SNOANDSC.CNO=C.CNOANDC.CNAME='MATHS'-----------------------------------π
SNO,SANME(σCNAME='MATHS'(S
SCC))
************************************
(4)檢索選修課程號為C2或C4的學生-----------------------------------SELECTSNOFROMSCWHERECNO='C2'ORCNO='C4'-----------------------------------π
SNO(σCNO='C2'∨CNO='C4'(SC))
************************************
(5)檢索至少選修課程號為C2或C4的學生
-----------------------------------SELECTSA.SNOFROMSCASSA,SCASSBWHERESA.SNO=SB.SNOANDSA.CNO='C2'ANDSB.CNO='C4'-----------------------------------π1(σ1=4∧2='C2'∧5='C4'(SC×SC))************************************
(
6)檢索不學C2課的學生與年齡-----------------------------------SELECTSNAME,AGEFROMSMINUSSELECTS.SNAME,S.AGEFROMSC,SWHERESC.SNO=S.SNOANDSC.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中插入到關系-----------------------------------INSERTINTOCVALUES('C10','PHYSICS','YU')-----------------------------------(C∪('C10','PHYSICS','YU'))∪記住該符號的用法************************************
(10)將S4選修課程號為C4的成績改為85分-----------------------------------UPDATESCSETGRADE=85WHERESNO='S4'ANDCNO='C4'-----------------------------------(SC-('S4','C4',?)∪('S4','C4',85))-∪先用'-'實現DELETE功能,再用'∪'實現INSERT功能-注意使用?來表示檢索時忽略該欄位值************************************
四、關系代數表達式的優化:關系代數表達式的優化:
目的:為了系統在執行時既省時間又能提高效率。目的基本策略:先做選擇,運用投影去除多餘屬性等等。基本策略優化演算法:語法樹(盡量提前做選擇操作;在每個操作後,應做優化演算法個投影操作,去掉不用的屬性值)
例如:
ππ
SNO,SNAME(σGRADE>60(S
SC))進行優化後轉換為:πSNO(σGRADE>60(SC)))
SNO,SNAME(πSNO,SNAME(S)
--即提前做選擇操作;在每個操作後,應做個投影操作,去掉
不用的屬性值
又如:
S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)
π
CNAME,TEACHER(σSEX='女'(S
SCC))進行優化後轉換為:
πCNAME,TEACHER(CπC#(πS#,C#(SC)πS#(σSEX='女'(S))))
優化前和優化後的語法樹如下所示: