1、 Join
a、 Natural Join
利用特定的欄位來結合資料表。
Select * From 銷售明細 Natural Join 產品
b、 Equi-Join
在on的地方設定結合的條件。
Select * From 銷售明細 Join 產品 On銷售明細.id = 產品.id
或直接用 WHERE條件式
Select * From 銷售明細 Where 銷售明細.id = 產品.id
c、 Inner Join
效果同上的做法,通常可以省略Inner,只有符合條件的資料才會進行Join。
Select * From 銷售明細 Inner Join 產品 On銷售明細.id = 產品.id
d、 Outer-Join
即使不符條件一樣會進行Join,而不符合處的欄位以NULL取代。
分為LEFT OUTER JOIN、RIGHT OUTER JOIN與FULL OUTER JOIN三種。
e、 Cross-Join
乘積、交叉結合之意,效果如同用FROM一次撈兩個資料表。
Select * From 銷售明細 Cross Join 產品
Select * From銷售明細 , 產品
2、 聯集、差集、交集
a、 聯集(UNION)
將資料表的每一個row的資料全部合併成為一個Table。
Select * From 銷售明細 UNION Select * From 產品
b、 差集(EXCEPT)
將兩個資料表中,只存在於某一個資料表的資料取出來進行合併。
Select * From 銷售明細 EXCEPT Select * From 產品
c、 交集(INTERSECT)
將兩個資料表中,兩邊都同時存在的資料取出來進行合併。
Select * From 銷售明細 INTERSECT Select * From 產品
3、 子查詢(Sub-Query)
每一個經過SELECT的結果都是一個新的資料表,再用一個SELECT去對新產生的資料表做搜尋,此兩層的搜尋方法稱為子查詢。
由於用了 = 的運算,子查詢只能回傳一個結果,若結果有一個以上此法便不適用。
Select * From 銷售明細 Where 銷售明細.id = (SELECT 產品.id From 產品 Where 金額 = 500)
上述問題可以改用IN的方式來處理。
Select * From 銷售明細 Where 銷售明細.id IN (SELECT 產品.id From 產品 Where 金額 = 500)
a、 EXIST
括號內的子查詢若傳回一列以上,則會回傳True。因此下述例子的WHERE會永遠為True 並撈出全部資料。
Select * From 銷售明細 Where EXIST (SELECT 產品.id From 產品 Where 金額 = 500)
b、 ANY
括號內的子查詢撈出的資料,只要有任何一個符合條件就會被撈出來。
Select * From 銷售明細 Where銷售明細.id = ANY ( SELECT 產品.id From 產品 Where 金額 = 500)
c、 ALL
括號內的子查詢撈出的資料,每一個值皆需符合條件才會被撈出來。
Select * From 銷售明細 Where銷售明細.id < ALL ( SELECT 產品.id From 產品 Where 金額 = 500)
4、 交易(Transaction)
DBMS可以將一連串的操作(SELECT、INSERT、DELETE)視為一個交易,在交易進行中,必需直到commit後才會真正修改到實體資料庫中,避免交易中途失敗而使資料庫資料毀損的現像。若交易途中失敗,將會進行Rollback的動作,撤銷這次交易所有的動作。
交易必需符合ACID四大特性,分別為Atomicity、Consostency、Isolation、Durability。
a、Atomicity
每一次交易最後的結果一定要執行Commit,若是交易失敗也要執行Rollback。
b、Consostency
交易進行中不會對資料庫有任何更動,保持資料庫的一致性。
c、 Isolation
不同交易進行時不會影響到另一個交易的運作。
d、Durability
交易後對資料庫的更新會永久存在,不會因為故障等因素而消失。
5、 並行控制(Concurrency Control)
在多人同時使用資料庫時,常會因為交易進行先後問題而產生錯誤的結果,因此在讀取或寫入資料時會進行Lock的動作。
a、共享鎖定(Share Lock)
當使用者讀取資料時進行的Lock,其它交易仍可對這筆資料進行讀取,但不可對該資料進行修改,直到對方解除為止。
b、互斥鎖定(Exclusive Lock)
當使用者寫入資料時進行的Lock,除了該使用者之外其它人一律不準對這筆資料進行讀取或修改的動作。
6、 死結(DeadLock)
指的是使用者互相鎖定了需要的資料,導致持續等待對方釋放的情況。例如使用者A鎖定了印表機,要讀取資料1;使用者B鎖定了資料1,要讀取印表機。
a、等待圖(Wait-For Graph)
會檢查執行中的交易狀態,記時器會一段時間就檢查是否有處於停止狀態的交易,若發現DeadLock的狀態就會採用Rollback的方法來處理。
b、時間戳(Times-tamp)
以時間為基準,判斷那一個交易要優先被處理,而沒有優先權的交易則先執行Rollback。
7、 E-R Model
畫出每一個物件之間的關聯性,建立出資料庫的概念模型。例如產品對客戶是多對多的關係,員工對公司是一對多的關係。產品擁有編號、名稱與單價等內容,以此繪出資料庫的模型。
8、 完整性限制(Integrity Constraint)
設定參照完整性後的資料表,就不允許輸入會產生矛頓的資料,設定完整性有參照完整性、NOT NULL、UNIQUE…等。
a、參照完整性(Referential Integrity Constraint)
對欄位設定外部鍵(Foreign Key),例如將產品編號與銷售明細設定成Foreign Key,就可以防止像產品編號被刪除,導銷售明細找不到產品的情況。
b、NOT NULL
避免欄位輸入空值。
c、 UNIQUE
避免欄位輸入重覆的值。
9、 View
一種利用已製定好的資料表虛擬出一個新的資料表的功能。可以採用CREATE VIEW的方式來進行建立。當實際的資料改變時,於VIEW上面的資料也會跟著修改。如此一來使用者就能從虛擬出來的VIEW進行資料的搜尋,針對一些使用頻率很高的資料可以採用此方式。就算使用者對資料庫的實際結構不瞭解,依然可以從VIEW中取的所需的資料。
但是當VIEW是由兩個資料表結合起來時,為了安全性考量,將無法進行更新的操作。
Create View 銷售產品(發票編號,產品名稱,數量)
Aa Select M.發票編號 , S.產品名稱 , M.數量
From M.銷售明細 , S.產品
WHERE M.產品編號 = S.產品編號
留言列表