数据库SQL语言从入门到精通--Part 3--SQL语言基础知识
數(shù)據(jù)庫從入門到精通合集(超詳細(xì),學(xué)習(xí)數(shù)據(jù)庫必看)
一、關(guān)系
- 單一的數(shù)據(jù)結(jié)構(gòu)----關(guān)系
現(xiàn)實世界的實體以及實體間的各種聯(lián)系均用關(guān)系來表示 - 邏輯結(jié)構(gòu)----二維表
從用戶角度,關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表 - 建立在集合代數(shù)的基礎(chǔ)上
1.域(Domain)
域是一組具有相同數(shù)據(jù)類型的值的集合。
2.笛卡爾積(Cartesian Product)
笛卡爾積在SQL中的實現(xiàn)方式既是交叉連接(Cross Join)。所有連接方式都會先生成臨時笛卡爾積表,笛卡爾積是關(guān)系代數(shù)里的一個概念,表示兩個表中的每一行數(shù)據(jù)任意組合。
簡單來說就是兩個集合相乘的結(jié)果,集合A和集合B中任意兩個元素結(jié)合在一起,也叫交叉連接。集合A{a1,a2,a3} 集合B{b1,b2},笛卡爾積 A × B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}
- 所有域的所有取值的一個組合
- 不能重復(fù)
1)元組(Tuple)
笛卡爾積中每一個元素(d1,d2,…,dn)叫作一個n元組(n-tuple)或簡稱元組(Tuple)
2)分量(Component)
笛卡爾積元素(d1,d2,…,dn)中的每一個值di叫作一個分量
3)基數(shù)(Cardinal number)
若Di(i=1,2,…,n)為有限集,其基數(shù)為mi(i=1,2,…,n),則D1×D2×…×Dn的基數(shù)M為:
4)笛卡爾積的表示方法
笛卡爾積可表示為一個二維表
表中的每行對應(yīng)一個元組,表中的每列對應(yīng)一個域
3.關(guān)系(Relation)
1)關(guān)系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的
關(guān)系,表示為R(D1,D2,…,Dn)
R:關(guān)系名
n:關(guān)系的目或度(Degree)
2)元組
關(guān)系中的每個元素是關(guān)系中的元組,通常用t表示。
3) 單元關(guān)系與二元關(guān)系
當(dāng)n=1時,稱該關(guān)系為單元關(guān)系(Unary relation)或一元關(guān)系
當(dāng)n=2時,稱該關(guān)系為二元關(guān)系(Binary relation)
4) 關(guān)系的表示
關(guān)系也是一個二維表,表的每行對應(yīng)一個元組,表的每列對應(yīng)一個域
5)屬性
關(guān)系中不同列可以對應(yīng)相同的域
為了加以區(qū)分,必須對每列起一個名字,稱為屬性(Attribute)
n目關(guān)系必有n個屬性
6) 碼
候選碼(Candidate key)
若關(guān)系中的某一屬性組的值能唯一地標(biāo)識一個元組,則稱該屬性組為候選碼
簡單的情況:候選碼只包含一個屬性
全碼(All-key)
最極端的情況:關(guān)系模式的所有屬性組是這個關(guān)系模式的候選碼,稱為全碼(All-key)
主碼
若一個關(guān)系有多個候選碼,則選定其中一個為主碼(Primary key)
主屬性
候選碼的諸屬性稱為主屬性(Prime attribute)
不包含在任何侯選碼中的屬性稱為非主屬性( Non-Prime attribute)或非碼屬性(Non-key attribute)
7) 三類關(guān)系
基本關(guān)系(基本表或基表)
實際存在的表,是實際存儲數(shù)據(jù)的邏輯表示
查詢表
查詢結(jié)果對應(yīng)的表
視圖表
由基本表或其他視圖表導(dǎo)出的表,是虛表,不對
應(yīng)實際存儲的數(shù)據(jù)
8)基本關(guān)系的性質(zhì)
① 列是同質(zhì)的(Homogeneous)
② 不同的列可出自同一個域:其中的每一列稱為一個屬性;不同的屬性要給予不同的屬性名
③ 列的順序無所謂,,列的次序可以任意交換
④ 任意兩個元組的候選碼不能相同
⑤ 行的順序無所謂,行的次序可以任意交換
⑥ 分量必須取原子值
二、關(guān)系模式
1.什么是關(guān)系模式
- 關(guān)系模式(Relation Schema)是型
- 關(guān)系是值
- 關(guān)系模式是對關(guān)系的描述
元組集合的結(jié)構(gòu):屬性構(gòu)成、屬性來自的域、屬性與域之間的映象關(guān)系
元組語義以及完整性約束條件
屬性間的數(shù)據(jù)依賴關(guān)系集合
2.定義關(guān)系模式
R(U,D,DOM,F)
R——關(guān)系名
U——組成該關(guān)系的屬性名集合
D——屬性組U中屬性所來自的域
DOM——屬性向域的映象集合
F——屬性間的數(shù)據(jù)依賴關(guān)系集合
關(guān)系模式通常可以簡記為
R (U)或R (A1,A2,…,An)
R: 關(guān)系名
A1,A2,…,An : 屬性名
ps:域名及屬性向域的映象常常直接說明為屬性的類型、長度
3.關(guān)系模式與關(guān)系
1)關(guān)系模式
對關(guān)系的描述
靜態(tài)的、穩(wěn)定的
2)關(guān)系
關(guān)系模式在某一時刻的狀態(tài)或內(nèi)容
動態(tài)的、隨時間不斷變化的
3)關(guān)系模式和關(guān)系往往統(tǒng)稱為關(guān)系
三、關(guān)系數(shù)據(jù)庫
1.關(guān)系數(shù)據(jù)庫
在一個給定的應(yīng)用領(lǐng)域中,所有關(guān)系的集合構(gòu)成一個關(guān)系數(shù)據(jù)庫
2.關(guān)系數(shù)據(jù)庫的型與值
1)關(guān)系數(shù)據(jù)庫的型: 關(guān)系數(shù)據(jù)庫模式對關(guān)系數(shù)據(jù)庫的描述。
2)關(guān)系數(shù)據(jù)庫模式包括
若干域的定義
在這些域上定義的若干關(guān)系模式
3)關(guān)系數(shù)據(jù)庫的值: 關(guān)系模式在某一時刻對應(yīng)的關(guān)系的集合,簡稱為關(guān)系數(shù)據(jù)庫
四、關(guān)系操作
1. 基本關(guān)系操作
1).常用的關(guān)系操作
查詢:選擇、投影、連接、除、并、交、差
數(shù)據(jù)更新:插入、刪除、修改
查詢的表達能力是其中最主要的部分
選擇、投影、并、差、笛卡爾基是5種基本操作
2).關(guān)系操作的特點
集合操作方式:操作的對象和結(jié)果都是集合,一次一集合的方式
2.關(guān)系數(shù)據(jù)庫語言的分類
1).關(guān)系代數(shù)語言
用對關(guān)系的運算來表達查詢要求
代表:ISBL
2).關(guān)系演算語言:
用謂詞來表達查詢要求元組關(guān)系演算語言
謂詞變元的基本對象是元組變量
代表:APLHA, QUEL
域關(guān)系演算語言
謂詞變元的基本對象是域變量
代表:QBE
3).具有關(guān)系代數(shù)和關(guān)系演算雙重特點的語言
代表:SQL(Structured Query Language)
五、關(guān)系的完整性
1.關(guān)系的三類完整性約束
1)實體完整性和參照完整性:
關(guān)系模型必須滿足的完整性約束條件稱為關(guān)系的兩個不變性,應(yīng)該由關(guān)系系統(tǒng)自動支持
2)用戶定義的完整性:
應(yīng)用領(lǐng)域需要遵循的約束條件,體現(xiàn)了具體領(lǐng)域中的語義約束
2.實體完整性
1) 實體完整性規(guī)則(Entity Integrity)
若屬性A是基本關(guān)系R的主屬性,則屬性A不能取空值
- (1) 實體完整性規(guī)則是針對基本關(guān)系而言的。一個基本表通常對應(yīng)現(xiàn)實世界的一個實體集。
- (2) 現(xiàn)實世界中的實體是可區(qū)分的,即它們具有某種唯一性標(biāo)識。
- (3) 關(guān)系模型中以主碼作為唯一性標(biāo)識。
- (4) 主碼中的屬性即主屬性不能取空值。
3.參照完整性
1) 關(guān)系間的引用
在關(guān)系模型中實體及實體間的聯(lián)系都是用關(guān)系來描述的,因此可能存在著關(guān)系與關(guān)系間的引用。
2) 外碼
- (1)設(shè)F是基本關(guān)系R的一個或一組屬性,但不是關(guān)系R的碼。如果F與基本關(guān)系S的主碼Ks相對應(yīng),則稱F是基本關(guān)系R的外碼
- (2)基本關(guān)系R稱為參照關(guān)系(Referencing Relation)
- (3)基本關(guān)系S稱為被參照關(guān)系(Referenced Relation) 或 目標(biāo)關(guān)系(Target Relation)
3). 參照完整性規(guī)則
若屬性(或?qū)傩越M)F是基本關(guān)系R的外碼它與基本關(guān)系S的主碼Ks相對應(yīng)(基本關(guān)系R和S不一定是不同的關(guān)系),則對于R中每個元組在F上的值必須為:
或者取空值(F的每個屬性值均為空值)
或者等于S中某個元組的主碼值
4) 用戶定義的完整性
- (1)針對某一具體關(guān)系數(shù)據(jù)庫的約束條件,反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求
- (2)關(guān)系模型應(yīng)提供定義和檢驗這類完整性的機制,以便用統(tǒng)一的系統(tǒng)的方法處理它們,而不要由應(yīng)用程序承擔(dān)這一功能
六、關(guān)系代數(shù)
1.概述
| ∪ | 并 |
| ∩ | 交 |
| - | 差 |
| × | 笛卡兒積 |
| > | 大于 |
| ≥ | 大于等于 |
| < | 小于 |
| ≤ | 小于等于 |
| = | 等于 |
| <> != | 不等于 |
| σ\sigmaσ | 選擇 |
| π\(zhòng)piπ | 投影 |
| ?\bowtie? | 連接 |
| ÷ | 除 |
| ┐ | 非 |
| ∧\wedge∧ | 與 |
| ∨\vee∨ | 或 |
2.傳統(tǒng)的集合運算
具有相同的目n(即兩個關(guān)系都有n個屬性)相應(yīng)的屬性取自同一個域
1)R∪S
仍為n目關(guān)系,由屬于R或?qū)儆赟的元組組成
R∪S ={t|t∈R∨t ∈S}
2)R - S
仍為n目關(guān)系,由屬于R而不屬于S的所有元組組成
R -S = { t|t∈R∧t?S }
3)R∩S
仍為n目關(guān)系,由既屬于R又屬于S的元組組成
R∩S = { t|t∈R∧t ∈S },R∩S = R –(R-S)
4)R×S
列:(n+m)列元組的集合
元組的前n列是關(guān)系R的一個元組
后m列是關(guān)系S的一個元組
行:k1×k2個元組
R×S = {t_r⌒t_s |t_r∈R ∧ t_s∈S }
3.關(guān)系運算
幾個重要記號
1)專門的關(guān)系運算
1、選擇(selection):
選擇運算是單目運算,它從一個關(guān)系R中選擇出滿足給定條件的所有元組,并同R具有相同的結(jié)構(gòu)。
關(guān)系R的選擇運算是從關(guān)系R中選擇滿足指定條件(用F表示)的元組構(gòu)成的新關(guān)系.換言之,選擇運算的結(jié)果是一個表的水平方向的子集,是從行的角度進行的運算。
關(guān)系R的選擇運算記為:σF(R)={t|t∈R∧F(t)= ‘真’}。
F:選擇條件,是一個邏輯表達式,基本形式為: X1θY1X_1θY_1X1?θY1?
2、投影(projection):
投影運算也是單目運算,它從一個關(guān)系R所有屬性中選擇某些指定屬性,組成一個新的關(guān)系。選擇運算選取關(guān)系的某些行,而投影運算選取關(guān)系的某些列,是從一個關(guān)系出發(fā)構(gòu)造其垂直子集的運算。
投影操作主要是從列的角度進行運算,但投影之后不僅取消可原關(guān)系中的某些列,而且還可能取消某些元組(避免重復(fù)行)
3、連接(join):
連接運算是關(guān)系的二目運算.關(guān)系R與關(guān)系S的連接運算是從兩個關(guān)系的廣義笛卡爾積中選取屬性間滿足一定條件(稱為連接條件,記為AθB)的元組形成一個新關(guān)系。
①等值連接
等值連接是從關(guān)系R與S的廣義笛卡爾積中選取A、B屬性相等的那些元組,按照屬性相同的行將兩(或以上)張表元組匹配連接;
舉個例子
ID_Name表
| 1 | 大好人 |
| 2 | 大壞蛋 |
| 3 | 豬八戒 |
| 4 | 孫悟空 |
| 5 | 沙和尚 |
| 7 | 唐三藏 |
| 8 | 武松 |
ID_MingZhu 表
| 3 | 西游記 |
| 4 | 西游記 |
| 5 | 西游記 |
| 7 | 西游記 |
| 8 | 水滸傳 |
| 3 | 豬八戒 | 3 | 西游記 |
| 4 | 孫悟空 | 4 | 西游記 |
| 5 | 沙和尚 | 5 | 西游記 |
| 7 | 唐三藏 | 7 | 西游記 |
| 8 | 武松 | 8 | 水滸傳 |
② 自然連接
自然連接是特殊的等值連接,要求兩個關(guān)系中進行比較的分量必須是同名的屬性組,并且在結(jié)果中把重復(fù)的屬性列去掉。
舉個例子:
ID_Name表
| 1 | 大好人 |
| 2 | 大壞蛋 |
| 3 | 豬八戒 |
| 4 | 孫悟空 |
| 5 | 沙和尚 |
| 7 | 唐三藏 |
| 8 | 武松 |
ID_MingZhu 表
| 3 | 西游記 |
| 4 | 西游記 |
| 5 | 西游記 |
| 7 | 西游記 |
| 8 | 水滸傳 |
| 3 | 豬八戒 | 西游記 |
| 4 | 孫悟空 | 西游記 |
| 5 | 沙和尚 | 西游記 |
| 7 | 唐三藏 | 西游記 |
| 8 | 武松 | 水滸傳 |
③ 左外連接
將返回右表的所有行。如果左表的某行在右表中沒有匹配行,則將為右表返回空值左連接:
例子:
ID_Name表
| 1 | 大好人 |
| 2 | 大壞蛋 |
| 3 | 豬八戒 |
| 4 | 孫悟空 |
| 5 | 沙和尚 |
| 7 | 唐三藏 |
| 8 | 武松 |
ID_MingZhu 表
| 3 | 西游記 |
| 4 | 西游記 |
| 5 | 西游記 |
| 7 | 西游記 |
| 8 | 水滸傳 |
| 9 | 紅樓夢 |
| 1 | 大好人 | NULL | NULL |
| 2 | 大壞蛋 | NULL | NULL |
| 3 | 豬八戒 | 3 | 西游記 |
| 4 | 孫悟空 | 4 | 西游記 |
| 5 | 沙和尚 | 5 | 西游記 |
| 7 | 唐三藏 | 7 | 西游記 |
| 8 | 武松 | 8 | 水滸傳 |
④ 右外連接
將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值;
例子
ID_Name表
| 1 | 大好人 |
| 2 | 大壞蛋 |
| 3 | 豬八戒 |
| 4 | 孫悟空 |
| 5 | 沙和尚 |
| 7 | 唐三藏 |
| 8 | 武松 |
ID_MingZhu 表
| 3 | 西游記 |
| 4 | 西游記 |
| 5 | 西游記 |
| 7 | 西游記 |
| 8 | 水滸傳 |
| 9 | 紅樓夢 |
| 3 | 豬八戒 | 3 | 西游記 |
| 4 | 孫悟空 | 4 | 西游記 |
| 5 | 沙和尚 | 5 | 西游記 |
| 7 | 唐三藏 | 7 | 西游記 |
| 8 | 武松 | 8 | 水滸傳 |
| NULL | NULL | 9 | 紅樓夢 |
- 全外連接。
左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方用null 填充
例子
ID_Name表
| 1 | 大好人 |
| 2 | 大壞蛋 |
| 3 | 豬八戒 |
| 4 | 孫悟空 |
| 5 | 沙和尚 |
| 7 | 唐三藏 |
| 8 | 武松 |
ID_MingZhu 表
| 3 | 西游記 |
| 4 | 西游記 |
| 5 | 西游記 |
| 7 | 西游記 |
| 8 | 水滸傳 |
| 9 | 紅樓夢 |
| 1 | 大好人 | NULL | NULL |
| 2 | 大壞蛋 | NULL | NULL |
| 3 | 豬八戒 | 3 | 西游記 |
| 4 | 孫悟空 | 4 | 西游記 |
| 5 | 沙和尚 | 5 | 西游記 |
| 7 | 唐三藏 | 7 | 西游記 |
| 8 | 武松 | 8 | 水滸傳 |
| NULL | NULL | 9 | 紅樓夢 |
4、除
給定關(guān)系R (X,Y) 和S (Y,Z),其中X,Y,Z為屬性組。
R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。
R與S的除運算得到一個新的關(guān)系P(X),
P是R中滿足下列條件的元組在 X 屬性列上的投影:
元組在X上分量值x的象集Yx包含S在Y上投影的集合,記作:
R÷S = {t_r [X] | t_r ∈ R∧πY (S) ? Y_x }
Y_x:x在R中的象集,x = tr[X]
除操作是同時從行和列角度進行運算
例子:
這里還有數(shù)據(jù)庫相關(guān)的優(yōu)質(zhì)文章:快戳我,快戳我😳
總結(jié)
以上是生活随笔為你收集整理的数据库SQL语言从入门到精通--Part 3--SQL语言基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css中怎么实现向上的箭头
- 下一篇: 数据库SQL语言从入门到精通--Part