更新時間:2023-08-16 來源:黑馬程序員 瀏覽量:
關(guān)系代數(shù)是一種抽象的查詢語言,是研究關(guān)系模型的數(shù)學(xué)工具。關(guān)系代數(shù)的運算對象是關(guān)系,運算結(jié)果也是關(guān)系。關(guān)系代數(shù)運算符主要分為集合運算符和關(guān)系運算符兩大類。
集合運算符有笛卡爾積、并、交、差,關(guān)系運算符有除、選擇、投影、連接,下面詳細介紹兩類運算符的概念和運算規(guī)則。
1.笛卡兒積
在數(shù)學(xué)中,笛卡兒積是對兩個集合相乘,假沒對集合A和集合B進行笛卡兒積,結(jié)果中第1個對象是A的成員,第2個對象是B的所有可能有序?qū)Φ钠渲幸粋€成員。
在數(shù)據(jù)庫中,廣義笛卡兒積是對兩個關(guān)系進行操作,產(chǎn)生的新關(guān)系中記錄個數(shù)為兩個關(guān)系中記錄個數(shù)的乘積。
假設(shè)有關(guān)系R和關(guān)系S,關(guān)系R有n個字段,關(guān)系S有m個字段,R和S的笛卡兒積(即R×S)的結(jié)果是一個具有n+m個字段的新關(guān)系。在新關(guān)系中,記錄的前n個字段來自R,后m個字段來自S,記錄的總個數(shù)是R和S中記錄的乘積。
關(guān)系R中有2個字段分別為學(xué)號和學(xué)生姓名;2個記錄分別為(1,張三)和(2,李四)
關(guān)系S中有2個字段分別為班級號和班級名稱;2個記錄分別為(001,軟件班)和(002,網(wǎng)絡(luò)班),R×S共有2+2個字段,分別為學(xué)號、學(xué)生姓名、班級號和班級名稱。
R×S共有2×2個記錄,分別為(1,張三,001,軟件班)、(1,張三,002,網(wǎng)絡(luò)班)、(2,李四,001,軟件班)、(2,李四,002,網(wǎng)絡(luò)班)。
2.并、交、差
并、交、差運算要求參與運算的兩個關(guān)系具有相同數(shù)量的字段,其運算結(jié)果是一個具有相同數(shù)量字段的新關(guān)系。
假設(shè)有關(guān)系R和關(guān)系S,RUS表示合并兩個關(guān)系中的記錄,RnS表示找出既屬于R又屬于S的記錄,R~S表示找出屬于R但不屬于S的記錄。
關(guān)系R中有2個記錄,分別為(1,張三)、(2,李四)。
關(guān)系S中有2個記錄,分別為(1,張三)、(3,小明。
RS運算:關(guān)系R和關(guān)系S中都有記錄(1,張三),需要將該記錄去重,結(jié)果為(1,張三)、(2,李四)、(3,小明)。
RnS運算:記錄(1,張三)既在關(guān)系R中,又在關(guān)系S中,結(jié)果為(1,張三)。
RS運算:記錄(2,李四)屬于關(guān)系R,但不屬于關(guān)系S,結(jié)果為(2,李四)。
3.除
除運算是笛卡兒積的逆運算。
假設(shè)有關(guān)系R和關(guān)系S,除運算需滿足S的字段集是R字段集的真子集,R÷S的結(jié)果是R字段集減去S字段集的結(jié)果。例如,R(A,B,C,D)÷S(C,D)的結(jié)果由A和B兩個字段構(gòu)成。
R÷S1表示查詢學(xué)號為2的學(xué)生所選擇的課程,由關(guān)系R可以得知學(xué)號為2的學(xué)生選擇的課程號為1、2、3。
R÷S2表示查詢學(xué)號為2和3的學(xué)生共同選擇的課程,根據(jù)關(guān)系R可以得知學(xué)號為3的學(xué)生選擇的課程號為1、2,學(xué)號為2的學(xué)生所選擇的課程為1、2、3,那么R:S2的結(jié)果為1、2。
4.選擇和投影
選擇是在一個關(guān)系中將滿足條件的記錄找出來,即水平方向篩選;
投影是在一個關(guān)系中去掉不需要的字段,保留需要的字段,即垂直方向篩選。
選擇操作:o學(xué)號=1(R)表示在關(guān)系R中查找學(xué)號為1的學(xué)生,找到了記錄(1,張三,男);
投影操作:π學(xué)號,學(xué)生姓名(R)表示在關(guān)系R中查找學(xué)號和學(xué)生姓名,也就是保留學(xué)號字段和學(xué)生姓名字段,去掉學(xué)生性別字段。
5.連接
連接是在兩個關(guān)系的笛卡兒積中選取字段間滿足一定條件的記錄。
常用的連接方式有等值連接和自然連接。
假設(shè)有關(guān)系R和關(guān)系S,使用A和B分別表示R和S中數(shù)目相等且可比的字段組。等值連接是在R和S的笛卡兒積中選取A、B字段值相等的記錄。
自然連接是一種特殊的等值連接,要求R和S必需有相同的字段組,進行等值連接后再去除重復(fù)的字段組。
關(guān)系R中有4個記錄,關(guān)系S中有3個記錄,R×S共有12個記錄,
等值連接運算結(jié)果為RxS中班級號相等的記錄。
自然連接運算結(jié)果就是在等值連接運算的結(jié)果中去除重復(fù)的字段組班級號。