圖解 SQL 基礎(chǔ)知識_第1頁
圖解 SQL 基礎(chǔ)知識_第2頁
圖解 SQL 基礎(chǔ)知識_第3頁
圖解 SQL 基礎(chǔ)知識_第4頁
圖解 SQL 基礎(chǔ)知識_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

圖解SQL基礎(chǔ)知識

在計算機領(lǐng)域有許多偉大的設(shè)計理念和思想,例如

在Unix中,一切皆文件。

在面向?qū)ο蟮木幊陶Z言中,一切皆對象。

關(guān)系數(shù)據(jù)庫同樣也有自己的設(shè)計思想:在SQL中,一切皆關(guān)系。

關(guān)系模型

關(guān)系模型(Relationalirodel)由E.F.Codd博士于1970年提出,以集合

論中的關(guān)系概念為基礎(chǔ);無論是現(xiàn)實世界中的實體對象還是它們之間的聯(lián)系

都使用關(guān)系表示。我們在數(shù)據(jù)庫系統(tǒng)中看到的關(guān)系就是二維表(Tabic),由

行(Row)和列(Column)組成。因此,也可以說關(guān)系表是由數(shù)據(jù)行構(gòu)成的集

合。

employeeJdV:*fir$t_nameY:,la$t_nam?盯Qhire_date¥:a*job.kiTI依MhryT:

100StevenKing2003-06-17GAD.PRES24.000

101NeeoaKochhar2005-09-21AAO■VP17,000

102LexDeHaan2001-01-13EfAD_VP17,000

103AlexanderHunold2006-01-03arr.pROG9.000

104BruceErnst2007-05-21a工PROG6.000

105DavidAustin2005*0625aIT■PROG4,800

106ValliP?ub?lla20060205IT.PROG4.800

107Lorentz2007-02-07aIT■PROG4.200

108NancyGreenberg2002-06-17E?R_MGR12.008

109DxwlFavict2002-<?-16"Fl.ACCOUNT9.000

110JohnChen2005-09-28E;Fl.ACCOUNT8.200

111lsm?dSci?rr?200509-30EfR.ACCOUNT7.700

112JoseManuelUrman2006-03-07“A.ACCOUNT7.800

113Lu注Popp2007-12-070R.ACCOUNT6.900

114DwRaphaely2002-12-07e?PU_MAN11.000

115AJcx^nderKhoo2003-05-18aPU.CIERK3,100

116SheiKBaida2005-12-24E;PU.CURK2.900

117知ITobias200507-24PU.CLERK2.800

118GuyHimuro2006-11-15占PU.CIERK2.600

119KarenColmenares2007-08-10日叫CLERK2,500

關(guān)系模型由數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作、完整性約束三部分組成。

關(guān)系模型中的數(shù)據(jù)結(jié)構(gòu)就是關(guān)系表,包括基礎(chǔ)表、派生表(查詢結(jié)果)

和虛擬表(視圖)。

常用的關(guān)系操作包括增加、刪除、修改和直詢(CRUD),使用的就是

SQL語言。其中查詢操作最為復雜,包括選捋Selection)、投影(Projection)、

并集(Union)、交集(Intersection)、差集(Exception)以及笛卡兒積

(Cartesianproduct)等。

完整性約束用于維護數(shù)據(jù)的完整性或者滿足業(yè)務(wù)約束的需求,包括實

體完整性(主鍵約束)、參照完整性(外鍵約束)以及用戶定義的完整性(非

空約束、唯一約束、檢杳約束和默認值)0

我們今天的主題是關(guān)系操作語言,也就是SQLo本文使用的示例數(shù)據(jù)來源于

https://blog.csdn.net/horses/article/detai1s/86518676o

面向集合SQL(結(jié)構(gòu)化查詢語言)是操作關(guān)系數(shù)據(jù)庫的標準語言。SQL非常

接近英語,使用起來非常簡單。它在設(shè)計之初就考慮了非技術(shù)人員的使用需

求,我們通常只需說明想要的結(jié)果(What),而將數(shù)據(jù)處理的過程(How)交

給數(shù)據(jù)庫管理系統(tǒng)。所以說,SQL才是真正給人用的編程語言!

接下來我們具體分析一下關(guān)系的各種操作語句;目的是為了讓大家能夠了

解SQL是一種面向集合的編程語言,它的操作對象是集合,操作的結(jié)果也

是集合。

□在關(guān)系數(shù)據(jù)庫中,關(guān)系、表、集合三者通常表示相同的概念。

SELECT

下面是一個簡單的查詢語句:

mployeeid.

它的作用就是從employees表中查詢員工信息。顯然,我們都知道FROM之

后是一個表(關(guān)系、集合)。不僅如此,整個查詢語句的結(jié)果也是一個表。

所以,我們可以將上面的查詢作為表使用:

I(SELECTemployeeid,firstname,las/name,hite

括號內(nèi)的查詢語句被稱為派生表,我們給它指定了一個別名叫做to同樣,

整個查詢結(jié)果也是一個表:這就意味著我們可以繼續(xù)嵌套,雖然這么做很無

聊。我們再看一個PostgreSQL中的示例:

upper()是一個大寫轉(zhuǎn)換的函數(shù)。它出現(xiàn)再FROM子句中,意味著它的結(jié)果

也是一個表,只不過是1行1列的特殊表。SELECT子句用于指定需要查

詢的字段,可以包含表達式、函數(shù)值等。SELECT在關(guān)系操作中被稱為投影

(Projection),看下面的示意圖應該就比較好理解了。

除了SELECT之外,還有一些常用的SQL子句。WHERE用于指定數(shù)據(jù)過濾

的條件,在關(guān)系運算中被稱為選擇(Selection),示意圖如下:

ORDERBY用于對查詢的結(jié)果進行排序,示意圖如下:

4

在這些關(guān)弓操作中,有一個比較特殊,就是分組。

JROUPBYI分組(GROUPBY)操作和其他的關(guān)系操作不同,因為它改變了關(guān)

系的結(jié)構(gòu)。來看下面的示例:

ELECTdear匕ment.工d,count(*)zrirscnam<

該語句的目的是按照部門統(tǒng)計員工的數(shù)量,但是存在一個語法錯誤,就是

不能出現(xiàn)在查詢列表中。原因在于按照部門進行分組的話,每個

部門包含多個員工:無法確定需要顯示哪個員工的姓名,這是一個謖輯上的

錯誤。所以說,GROUPBY改變了集合元素(數(shù)據(jù)行)的結(jié)構(gòu),創(chuàng)建了一個全

新的關(guān)系。分組操作的示意圖如下:

COUNTSUMN

盡管如此,GROUPBY的結(jié)果仍然是一個集合。

UNION^QL面向集合特性最明顯的體現(xiàn)就是UNION(并集運算)、INTERSECT

(交集運算)和EXCEPT/MINUS(差集運算)。

這些集合運算符的作用都是將兩個集合并成一個集合,因此需要滿足以下條

件:

兩邊的集合中字段的數(shù)量和順序必須相同;

兩邊的集合中對應字段的類型必須匹配或兼容。

具體來說,UNION和UNIONALL用于計算兩個集合的并集,返回出現(xiàn)在第一

個查詢結(jié)果或者第二個查詢結(jié)果中的數(shù)據(jù)。它們的區(qū)別在于UNION排除了結(jié)

果中的重復數(shù)據(jù),UNIONALL保留了重復數(shù)據(jù)。下面是UNION操作的示意圖:

INTERSECT操作符用于返回兩個集合中的共同部分,即同時出現(xiàn)在第一個查

詢結(jié)果和第二個查詢結(jié)果中的數(shù)據(jù),并且排除了結(jié)果中的重復數(shù)據(jù)。

INTERSECT運算的示意圖如下:

EXCEPT或者MINUS操作符用于返回兩個集合的差集,即出現(xiàn)在第一個查詢

結(jié)果中,但不在第二個查詢結(jié)果中的記錄,并且排除了結(jié)果中的重復數(shù)據(jù)。

EXCEPT運算符的示意圖如下:

除此之外,DISTINCT運算符用于消除重復數(shù)據(jù),也就是排除集合中的重復元

素。

□SQL中的關(guān)系概念來自數(shù)學中的集合理論,因此UNION.

INTERSECT和EXCEPT分別來自集合論中的并集(U\cup

U)、交集(A\capA)和差集(\\setminusv)運算。需要注

意的是,集合理論中的集合不允許存在重復的數(shù)據(jù),但是SQL

允許。因此,SQL中的集合也被稱為多重集合(multiset);

多重集合與集合理論中的集合都是無序的,但是SQL可以通

過ORDERBY子句對查詢結(jié)果進行排序。

OIN在SQL中,不僅實體對象存儲在關(guān)系表中,龍象之間的聯(lián)系也存儲在

.

關(guān)系表中。因此,當我們想要獲取這些相關(guān)的數(shù)據(jù)時,需要使用到另一個操

作:連接查詢(JOIN)。常見的SQL連接查類型包拈內(nèi)連接、外連接、交叉

連接等。其中,外連接又可以分為左外連接、右外連接以及全外連接。內(nèi)連

接(InnerJoin)返回兩個表中滿足連接條件的數(shù)據(jù),內(nèi)連接的原理如下圖

所示:

111

333

5

左外連接(LeftOuterJoin)返回左表中所有的數(shù)據(jù);對于右表,返回滿足

連接條件的數(shù)據(jù);如果沒有就返回空值。左外連接的原理如卜.圖所示:

11

23

35

tlLE

右外連接(RightOuterJoin)返回右表中所有的數(shù)據(jù);對于左表,返回滿

足連接條件的數(shù)據(jù),如果沒有就返回空值。右外連接與左外連接可以互換,

以下兩者等價:

全外連接(FullOuterJoin)等價于左外連接加上右外連接,同時返回左表

和右表中所有的數(shù)據(jù);對于兩個表中不滿足連接條件的數(shù)據(jù)返回空值。全外

連接的原理如下圖所示:

11

23

35

交叉連接也稱為笛卡爾積(CartesianProduct)。兩個表的交叉連接相當于

一個表的所有行和另一個表的所有行兩兩組合,結(jié)果的數(shù)量為兩個表的行數(shù)

相乘。交叉連接的原理如下圖所示:

1

1

1

112

232

352

3

3

3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論