更新時(shí)間:2023-08-16 來源:黑馬程序員 瀏覽量:
關(guān)系代數(shù)是一種抽象的查詢語(yǔ)言,是研究關(guān)系模型的數(shù)學(xué)工具。關(guān)系代數(shù)的運(yùn)算對(duì)象是關(guān)系,運(yùn)算結(jié)果也是關(guān)系。關(guān)系代數(shù)運(yùn)算符主要分為集合運(yùn)算符和關(guān)系運(yùn)算符兩大類。
集合運(yùn)算符有笛卡爾積、并、交、差,關(guān)系運(yùn)算符有除、選擇、投影、連接,下面詳細(xì)介紹兩類運(yùn)算符的概念和運(yùn)算規(guī)則。
1.笛卡兒積
在數(shù)學(xué)中,笛卡兒積是對(duì)兩個(gè)集合相乘,假?zèng)]對(duì)集合A和集合B進(jìn)行笛卡兒積,結(jié)果中第1個(gè)對(duì)象是A的成員,第2個(gè)對(duì)象是B的所有可能有序?qū)Φ钠渲幸粋€(gè)成員。
在數(shù)據(jù)庫(kù)中,廣義笛卡兒積是對(duì)兩個(gè)關(guān)系進(jìn)行操作,產(chǎn)生的新關(guān)系中記錄個(gè)數(shù)為兩個(gè)關(guān)系中記錄個(gè)數(shù)的乘積。
假設(shè)有關(guān)系R和關(guān)系S,關(guān)系R有n個(gè)字段,關(guān)系S有m個(gè)字段,R和S的笛卡兒積(即R×S)的結(jié)果是一個(gè)具有n+m個(gè)字段的新關(guān)系。在新關(guān)系中,記錄的前n個(gè)字段來自R,后m個(gè)字段來自S,記錄的總個(gè)數(shù)是R和S中記錄的乘積。
關(guān)系R中有2個(gè)字段分別為學(xué)號(hào)和學(xué)生姓名;2個(gè)記錄分別為(1,張三)和(2,李四)
關(guān)系S中有2個(gè)字段分別為班級(jí)號(hào)和班級(jí)名稱;2個(gè)記錄分別為(001,軟件班)和(002,網(wǎng)絡(luò)班),R×S共有2+2個(gè)字段,分別為學(xué)號(hào)、學(xué)生姓名、班級(jí)號(hào)和班級(jí)名稱。
R×S共有2×2個(gè)記錄,分別為(1,張三,001,軟件班)、(1,張三,002,網(wǎng)絡(luò)班)、(2,李四,001,軟件班)、(2,李四,002,網(wǎng)絡(luò)班)。
2.并、交、差
并、交、差運(yùn)算要求參與運(yùn)算的兩個(gè)關(guān)系具有相同數(shù)量的字段,其運(yùn)算結(jié)果是一個(gè)具有相同數(shù)量字段的新關(guān)系。
假設(shè)有關(guān)系R和關(guān)系S,RUS表示合并兩個(gè)關(guān)系中的記錄,RnS表示找出既屬于R又屬于S的記錄,R~S表示找出屬于R但不屬于S的記錄。
關(guān)系R中有2個(gè)記錄,分別為(1,張三)、(2,李四)。
關(guān)系S中有2個(gè)記錄,分別為(1,張三)、(3,小明。
RS運(yùn)算:關(guān)系R和關(guān)系S中都有記錄(1,張三),需要將該記錄去重,結(jié)果為(1,張三)、(2,李四)、(3,小明)。
RnS運(yùn)算:記錄(1,張三)既在關(guān)系R中,又在關(guān)系S中,結(jié)果為(1,張三)。
RS運(yùn)算:記錄(2,李四)屬于關(guān)系R,但不屬于關(guān)系S,結(jié)果為(2,李四)。
3.除
除運(yùn)算是笛卡兒積的逆運(yùn)算。
假設(shè)有關(guān)系R和關(guān)系S,除運(yùn)算需滿足S的字段集是R字段集的真子集,R÷S的結(jié)果是R字段集減去S字段集的結(jié)果。例如,R(A,B,C,D)÷S(C,D)的結(jié)果由A和B兩個(gè)字段構(gòu)成。
R÷S1表示查詢學(xué)號(hào)為2的學(xué)生所選擇的課程,由關(guān)系R可以得知學(xué)號(hào)為2的學(xué)生選擇的課程號(hào)為1、2、3。
R÷S2表示查詢學(xué)號(hào)為2和3的學(xué)生共同選擇的課程,根據(jù)關(guān)系R可以得知學(xué)號(hào)為3的學(xué)生選擇的課程號(hào)為1、2,學(xué)號(hào)為2的學(xué)生所選擇的課程為1、2、3,那么R:S2的結(jié)果為1、2。
4.選擇和投影
選擇是在一個(gè)關(guān)系中將滿足條件的記錄找出來,即水平方向篩選;
投影是在一個(gè)關(guān)系中去掉不需要的字段,保留需要的字段,即垂直方向篩選。
選擇操作:o學(xué)號(hào)=1(R)表示在關(guān)系R中查找學(xué)號(hào)為1的學(xué)生,找到了記錄(1,張三,男);
投影操作:π學(xué)號(hào),學(xué)生姓名(R)表示在關(guān)系R中查找學(xué)號(hào)和學(xué)生姓名,也就是保留學(xué)號(hào)字段和學(xué)生姓名字段,去掉學(xué)生性別字段。
5.連接
連接是在兩個(gè)關(guān)系的笛卡兒積中選取字段間滿足一定條件的記錄。
常用的連接方式有等值連接和自然連接。
假設(shè)有關(guān)系R和關(guān)系S,使用A和B分別表示R和S中數(shù)目相等且可比的字段組。等值連接是在R和S的笛卡兒積中選取A、B字段值相等的記錄。
自然連接是一種特殊的等值連接,要求R和S必需有相同的字段組,進(jìn)行等值連接后再去除重復(fù)的字段組。
關(guān)系R中有4個(gè)記錄,關(guān)系S中有3個(gè)記錄,R×S共有12個(gè)記錄,
等值連接運(yùn)算結(jié)果為RxS中班級(jí)號(hào)相等的記錄。
自然連接運(yùn)算結(jié)果就是在等值連接運(yùn)算的結(jié)果中去除重復(fù)的字段組班級(jí)號(hào)。
用wait-notify寫一段代碼來解決生產(chǎn)者-消費(fèi)者問題?
2023-08-16Elasticsearch在部署時(shí),對(duì)Linux的設(shè)置有哪些優(yōu)化方法?
2023-08-15服務(wù)上線怎么不影響舊版本?
2023-08-14SpringApplication實(shí)例的初始化和項(xiàng)目初始化啟動(dòng)
2023-08-11a.hashCode()有什么用?與a.equals(b)有什么關(guān)系?
2023-08-11哪個(gè)類包含clone方法?是Cloneable還是Object?
2023-08-10