天天看點

中級 SQL

文章目錄

    • 3.1 連接配接表達式
      • 3.1.1 連接配接條件
      • 3.1.2 外連接配接
      • 3.1.3 連接配接類型和條件
    • 3.2 視圖
      • 3.2.1 視圖定義
      • 3.2.2 物化視圖
      • 3.2.3 視圖更新
    • 3.3 事務
    • 3.4 完整性限制
      • 3.4.1 not null 限制
      • 3.4.2 unique 限制
      • 3.4.3 check 子句
      • 3.4.4 參照完整性限制

3.1 連接配接表達式

SQL 提供了自然連接配接以外的連接配接運算形式,包括能夠指定顯示的連接配接謂詞,能夠在結果中包含被自然連接配接排除在外的元組。

3.1.1 連接配接條件

SQL 支援可以指定任意的連接配接條件的連接配接,on 條件允許在參與連接配接的關系上設定通用的謂詞。該謂詞的寫法與 where 子句謂詞類似,隻不過使用的是 on,與 using 條件一樣,on 條件出現在連接配接表達式的末尾。形式如下:

select A1, A2, ..., An
from r join s on P;
           

3.1.2 外連接配接

外連接配接運算通過在結果中建立包含空值的元組的方式,保留了那些在自然連接配接中丢失的元組。有三種形式的外連接配接:

  • 左外連接配接隻保留出現在左外連接配接運算之前(左邊)的關系中的元組。
  • 右外連接配接隻保留出現在右外連接配接運算之後(右邊)的關系中的元組。
  • 全外連接配接保留出現在兩個關系中的元組。

此前的不保留未比對元組的連接配接運算被稱作内連接配接運算。

右外連接配接和左外連接配接是對稱的,全外連接配接是左外連接配接與右外連接配接類型的組合。

on 和 where 在外連接配接中的表現是不同的,原因是外連接配接隻為那些對相應内連接配接結果沒有貢獻的元組補上空值并加入結果。on 條件是外連接配接聲明的一部分,但 where 子句是對謂詞中的屬性值比較條件逐一進行确認,若不符合則抛棄。

3.1.3 連接配接類型和條件

SQL 中把正常連接配接稱作内連接配接。關鍵詞 inner 對應内連接配接。當 join 子句中沒有使用 outer 字首。預設的連接配接類型是 inner join。

3.2 視圖

SQL 允許通過查詢來定義 “虛關系”,它在概念上包含查詢的結果。虛關系并不預先計算并存儲,而是在使用虛關系的時候才通過執行查詢被計算出來。任何像這種不是邏輯模型的一部分,但作為虛關系對使用者可見的關系稱為視圖。

3.2.1 視圖定義

SQL 中用 create view 指令定義視圖。為了定義視圖,必須給視圖一個名稱,并且必須提供計算視圖的查詢。形式如下:

create view v as
<query expression>;
           

當視圖關系被通路時,其中的元組是通過計算查詢結果而被建立出來的。進而,視圖關系是愛需要的時候才被建立的。

3.2.2 物化視圖

  • 特定資料庫系統允許存儲視圖關系,但是其保證:如果用于定義視圖的實際關系改變,視圖也跟着修改。這樣的視圖被稱為物化視圖。
  • 保持物化視圖一直在最新狀态的過程稱為物化視圖維護,或者通常簡稱視圖維護。當構成視圖定義的任何關系被更新時,可以馬上進行視圖維護。

3.2.3 視圖更新

一般來說,如果定義視圖的查詢對下列條件都能滿足,稱這樣的 SQL 視圖是可更新的(即視圖上可以執行插入、删除或者更新):

  • from 子句中隻有一個資料庫關系。
  • select 子句中隻包含關系的屬性名,不包含任何表達式、聚集或 distinct 聲明。
  • 任何沒有出現在 select 子句中的屬性可以取空值;即這些屬性上沒有 not null 限制,也不構成主碼的一部分。
  • 查詢中不含有 group by 或 having 子句。

若嘗試向視圖插入不滿足視圖所要求的選擇條件的元組,這個元組可以被插入到對應關系中,但不會出現在視圖中,在預設情況下,SQL 允許執行上述更新。但是可以通過在視圖定義的末尾包含 with check option 子句的方式來定義視圖。這樣如果向視圖中插入一條不滿足視圖的 where 子句條件的元組,資料庫系統将拒絕該插入操作。

3.3 事務

事物由查詢和更新語句的序列組成。SQL 标準規定當一條 SQL 語句被執行,就隐式地開始了一個事務。下列 SQL 語句之一會結束一個事務:

  • Commit work:送出目前事務,也就是将該事務所做的更新在資料庫中持久儲存。在事務被送出後,一個新的事務自動開始。
  • Rollback work:復原目前事務,即撤銷該事務中所有 SQL 語句對資料庫的更新。這樣,資料庫就恢複到執行該事務第一條語句之前的狀态。
  • 關鍵詞 work 在兩條語句中都是可選的。

一個事務或者在完成所有步驟後送出其行為,或者在不能完成其所有動作的情況下復原其所有動作,通過這種方式資料庫提供了對事務具有原子性的抽象。

3.4 完整性限制

完整性限制保證授權使用者對資料庫所做的修改不會破壞資料的一緻性。是以,完整性限制防止的是對資料的意外破壞。

3.4.1 not null 限制

not null 聲明禁止在該屬性上插入空值。

3.4.2 unique 限制

SQL 支援如下的完整性限制:

unique 聲明指出屬性 A1, A2, …, An 形成了一個超碼,即在關系中沒有兩個元組能在所有列出的屬性上取值相同,然而唯一屬性可以為 null ,除非它們被顯式的聲明為 not null。

3.4.3 check 子句

當應用于關系聲明時,check (P) 子句指定一個謂詞 P,關系中的每一個元組都必須滿足謂詞 P。check 子句允許以有力的方式對屬性域加以限制。

3.4.4 參照完整性限制

。。。待更

繼續閱讀