資料庫系統理論(九)

檢視表(VIEW)的用途與優缺點

    VIEW 檢視表 的主要用途,就是可以提供不同的使用者不同的查詢資訊。因此,我們可以歸納為下列幾項用途:
1.讓不同使用者對於資料有不同的觀點與使用範圍。
例如:教務處是以學生的「學業成績」為主要觀點;學務處是以學生的「操行成績」為主要觀點。
2.定義不同的視界,讓使用者看到的是過濾後的資料。
例如:一般使用者所看到的資訊只是管理者的部分子集合。
3.有保密與資料隱藏的作用
例如:個人可以看到個人全部資訊,但是,無法觀看他人的資料(如:薪資、紅利、年終獎金等)。
4.絕大部分的視界僅能做查詢,不能做更新。
優點
1.降低複雜度
如果我們要查詢的資料是來自多個資料表時,利用View檢視表就可以將所要查詢的欄位集合成檢視表中的欄位。亦即把複雜的表格關係利用View來表現,較能提高閱讀性。
例如:公司老闆所需要的摘要式資訊報表。
2.提高保密性
如果我們不想公開整個資料表中的全部欄位時,則利用View檢視表就可以有效地隱藏個人的隱私資料,以達到保密措施。亦即針對不同使用者,可產生不同權限設定的View。
例如:公司員工只能查詢個人的薪資,無法查詢他人。
3.提高程式維護性
當應用程式透過View檢視表來存取資料表時,如果基底表格的架構改變時,無需改變應用程式,只要修改View檢視表即可。
例如:當公司員工升遷為經理時,則查詢的權限直接升級。
缺點
1.執行效率差
因為View檢視表每次都是經過多個資料表合併產生的,所以,必須花費較多時間。
2.操作限制較多
因為View檢視表在進行「刪除及修改」,必須要符合某些特定的條件才能夠更新,例如:檢視表的建立指令不能包含GROUP BY 、 DISTINCT、聚合函數。

建立檢視表(CREATE VIEW)

定義
是指建立「檢視表」(或稱視界、虛擬資料表)

格式
CREATE VIEW 檢視表名稱[(欄位1,欄位2,...,欄位n)]
AS
SELECT<屬性集合>
FROM <基底表格>
[WHERE <條件>]
[GROUP BY <屬性集合>]
[HAVING<條件>]

注意
基本上,檢視表中的欄位名稱都是來自於Select_statement中的<屬性集合>,因此,「檢視表」中的欄位名稱之資料型態會與「基底表格」中的欄位名稱相同。
SQL指令
CREATE VIEW 學生成績單
AS
SELECT 姓名,課名,成績
FROM 學生表 AS A ,選課表 AS B ,課程表 AS C
WHERE A.學號=B.學號
AND C.課號=B.課號

資料庫系統理論(八)

除法(Divsion)

定義
此種運算如同數學的除法一般,有二個運算元:第一個關聯表R1當作「被除表格」;第二個關聯表R2當作「除表格」。其中,「被除表格」的屬性必須比「除表格」中的任何屬性中的值域都要與「被除表格」中的屬性之值域相符合。
代表符號
R1/R2
概念圖
基本型格式

巢狀結構查詢
定義
是指在 Where 敘述中再嵌入另一個查詢敘述,此查詢敘述稱為「子查詢」。換言之,您可以將「子查詢」的結果拿來做為另一個查詢條件。

注意
「子查詢」可以獨立地被執行,其執行結果稱為「獨立子查詢」。
分類
1.傳回單一值(=)
2.傳回多值(IN)
3.測試子查詢是否存在(利用EXIST)
第一種作法:
範例
利用子查詢來找出選修「資料庫系統」的學生學號及姓名。
解答
SELECT A.學號,姓名
FROM 學生檔 AS A, 選課檔 AS B 主查詢
WHERE A.學號=B.學號 AND B.學號=
(SELECT C.課號 FROM 課程檔 AS C
WHERE 課名='資料庫系統') 子查詢

第二種作法
範例
利用子查詢來找出選修「課號為C005」的學生學號與姓名
解答
SELECT A.學號,姓名
FROM 學生檔 AS A 主查詢
WHERE A.學號 =
(SELECT 學號 FROM 選課檔 AS B
WHERE A.學號 = B.學號 AND B.課號='C005') 子查詢

SQL巢狀EXISTS/NOT EXISTS        有點難懂請看進一步說明

更簡單的想法:
1.外層是:學生檔(Student)
2.把內層當成學生檔(Student)X選課檔(Course)(做卡式積/Cross Join)
3.內層紀錄去和課程檔(CourseTaken)去做比對(存在/不存在)
4.外層的紀錄再和內層做比對(存在/不存在)
如上圖所示:
橘色:內層(Student表×Course表)中不存在於CourseTaken表的紀錄
意義:每個學生沒有修的課
綠色:外層(Student表)中不存在於橘色的紀錄
意義:沒有課沒修的學生,即為解答!
經過以上方式及可求得巢狀EXISTS/NOT EXISTS的答案。

資料庫系統理論(七)

卡式積(Cartesian Product)

注意!CROSS JOIN 會有問題

改善的方法

作法
1.透過 SELECT 指令 WHERE 部分的等式,
及對等合併(Equi-Join)。

From A,B
Where (A.c=B.c)

2.透過 SELECT 指令 FROM 部分的 INNER JOIN。
即自然合併(Natural Join);又稱為內部合併
(Inner Join)。

From A INNER JOIN B
ON A.c=B.c
範例
1.第一種做法(Equi-Join最常用)

Select 學號,姓名,課程表,課號,課程名稱,學分數
From 學生表,課程表
Where 學生表.課號=課程表.課號

2.第二種做法:INNER JOIN

SELECT 學號,姓名,課程表,課號,課程名稱,學分數
FROM 學生表 INNER JOIN 課程表
ON 學生表.課表=課程表.課表
範例
SELECT A.學號,姓名,課號,成績
(加入 投影使用者 輸出的欄位名稱)

FROM 學生資料表 AS A, 選課資料表 AS B

WHERE A.學號=B.學號
(加入 內部合併 Join)

And B.成績>=70
(加入 限制條件 成績大於或等於70分者)

GROUP BY A.學號,姓名
(使用群組化及聚合函數)

HAVING AVG(成績)>=90
(在聚合函數後,再進行篩選條件)

ORDER BY AVG(成績) ASC
(在聚合函數結果,再來進行排序-由低到高)

左外部合併

右外部合併

資料庫系統理論(六)

資料操作語言(Data Manipulation Language  DML
DML四種基本指令
1.INSERT(新增)
2.UPDATE(修改)
3.DELETE(刪除)
4.SELECT(查詢)

INSERT(新增紀錄)指令

定義:只新增一筆紀錄到新的資料表內。
格式:INSERT INTO 資料表名稱<欄位串列>
VALUES(<欄位值串列>|<SELECT指令>)
範例一
INSERT INTO 學生表 VALUES('S001','一心','111111','前鎮區','男');

範例二
INSERT INTO 學生表(學號,姓名,地址) VALUES ('S002','二聖','苓雅區');

UPDATE  (修改紀錄) 指令

定義:指修改一個資料表中某些值組(紀錄)之屬性值。
格式:UPDATE 資料表名稱
SET{<欄位名稱1>=<欄位值>,....,<欄位名稱N>=<欄位值N>}
[WHERE <條件子句>]
範例
UPDATE 學生表 SET 電話='222222' WHERE 電話 IS NULL
And 學號 ='S002' ;

DELETE FROM 資料表名稱

定義:把合乎條件的值組(紀錄),從資料表中刪除
格式:DELETE FROM 資料表名稱
[WHERE <條件式>]
範例: 請將「學生表OLD」中的「十全」學生記錄刪除。
DELETE FROM '學生表OLD'
WHERE 姓名='十全' ;

SELECT 指令簡介


使用「聚合函數」

COUNT 紀錄筆數
SELECT COUNT(*) AS 全班人數 FROM 學生表;
SELECT COUNT(成績) AS 有成績總筆數 FROM 學生表;

AVG 平均數
SELECT AVG(成績) AS 資料庫平均成績 FROM 選課表
WHERE 課號 ='C005';

SUM 總和
SELECT SUM(成績) AS 資料庫總成績 FROM 選課表
WHERE 課號 ='C005';

MAX 最大值
MIN 最小值

SQL的執行順序

資料庫系統理論(五)

SQL提供三種語言
1.資料定義語言(Data Definition Language)DDL。
2.資料操作語言(Data Manipulation Language)DML。
3.資料控制語言(Data Control Language)DCL。

Create Database 基本語法  (建立)

語法:  Create Database[IF NOT EXIXTS]
範例: Create Database 選課系統料庫

Alter Database 基本語法  (修改)

語法: Alter Database 資料庫名稱
[CHARACTER SET 字元集名稱]
[COLLATE Collation 名稱]
範例: Alter Database 選課系統料庫
CHARACTER SET utf8

DROP Database[IF EXISTS]資料庫名稱  (刪除)

語法:  DROP Database 資料庫名稱
範例: DROP Database 選課系統料庫

CREATE TABLE  (建立資料表)

ALTER TABLE (修改資料表)

DROP TABLE (刪除資料表)

格式:  DROP TABLE 資料表名稱
範例: DROP TABLE 學生表

資料庫系統理論(四)

關聯式資料庫

定義
由兩個或兩個以上的資料表組合而成,而資料表之間是透過相同的欄位值(即「外鍵」參考「主鍵」)來連結,以這種方式來存放資料的資料庫,在電腦術語中,稱為「關聯式資料庫(Relation Database)」。
作法
將各種資料依照性質的不同(如:學籍資料、選課資料、課程資料、學習歷程資料等....),分別存放在幾個不同的表格中,表格與表格之間的關係,則是以公同的欄位值(如:「學號」欄位....)相互連結。
目的:
1.節省重複輸入的時間與儲存空間。
2.確保異動資料(新增、修改、刪除)時的一致性及完整性。
優點
1.節省記憶體空間:相同的資料紀錄不需要再重複輸入。
2.提高行政效率:因為資料不須再重複輸入,固可以節省行政人員的輸入時間。
3.達到資料的一致性:因為資料不須再重複輸入,固可以減少多次輸入產生人為的錯誤。

差集(Difference)
定義
是指關聯表R「差集」關聯表S之後的結果,則為關聯表R減掉RS兩關聯表共同的值組。
關聯式代數: R-S
範例:
若A={1,2,3,4},B={3,4,5,6},則A-B=?
A-B = {1,2}


合併(Join)
定義
是指將兩關聯表R與S依合併條件合併成一個新的關聯表R3,假設P為合併條件,以R[X]pS表示此合併運算。
作法
從兩關聯表的「卡式積」中選取屬性滿足一定條件的值組。
關聯式代數:R[X]pS
合併(Join)有三種型態
1.自然合併(Natural Join);又稱為內部合併(Inner Join)。
2.θ-合併(Theta Join)
3.對等合併(Equi-Join):是θ-合併的特例。

自然合併(Natural Join)
定義:自然合併(Natural Join)又稱為內部合併(Inner Join),它必須在左右兩邊的關聯表中找到對應值才行。而外部合併(Outer Join)則無此規定。一般的結合(Join)都屬於此種方法。

θ-合併(Theta Join)
定義:以「等於」以外的條件為基礎來合併兩個關聯的運算。
語法:(A X B) WHERE A.X θ B.Y
其中,A、B為無關聯屬性的關聯,A具有屬性X,而B具有屬性Y。
注意:相同名稱的欄位會同時出現在運算結果的表格中。亦即重複欄位,會出現兩次。

外部合併(Outer Join)
定義:當在進行合併(Join)時,不管紀錄是否符合條件,都會被列出其中一個資料表的所有紀錄時,則稱為「外部合併」。因此,其合併結果中會保留一個關聯(Left Outer-Join)或保留第二個關聯(Right Outer-Join),或保留兩個關聯(Full Outer-Join)中的所有值組。

作法:進行合併(Join)時,如果不符合條件的紀錄就會被預設為NULL值。即左右兩邊的關聯表,不一定要有對應值組。

使用時機:應用在異質性分散式資料庫上的整合運算,其好處是不會遺漏資訊。

電腦書的截圖
Step1.用Gaze抓圖:點右邊小圈圈->選圖片的小Icon->點選分享->藍芽
Step2.電腦接受圖:進入藍芽設定->接收檔案
Step3.上傳圖片時要選擇完整大小、50%

資料庫系統理論(三)

重要觀念

1.資料庫(DB):是由一群相關資料的集合體。
2.資料庫管理系統(DBMS):管理這些資料庫檔案的軟體(如:Access)。
3.資料庫系統(DBS)=資料庫(DB)+資料庫管理系統(DBMS)。

資料庫管理系統的功能

1.資料的定義(Data Define)
2.資料的操作(Data Manipulation)
3.重複性的控制(Redundancy Control)
4.表示資料之間的複雜關係(Multi-Relationship)
5.實施完整性限制(Integrity Constraint)
6.提供「備份」與「回復」的能力(Backup and Restore)
一、資料的定義(Data Define)
是指提供DBA建立「欄位名稱」、「資料類型」、及相關的「限制條件」。
二、資料的操作(Data Manipulation)
是指提供使用者方便的存取資料。因此,它提供了四個功能,分別為:
1.新增(INSERT)
2.修改(UPDATE)
3.刪除(DELETE)
4.查詢(SELECT)
三、重複性的控制(Redundancy Control)
主要是為了達成「資料的一致性」及「節省儲存空間」。
四、表示資料之間的複雜關係(Multi-Relationship)
是指DBMS必須要有能力來表示資料之間的複雜關係,基本上,有三種不同的關係,分別為:
1.一對一
2.一對多
3.多對多
五、實施完整性限制(Integrity Constraint)
是指用來規範關聯表中的資料在經過新增、修改即刪除之後,將錯誤或不合法的資料值存入「資料庫」中。
六、提供「備份」與「回復」的能力(Backup and Restore)
是指讓使用者能方便的「備份」或轉移資料庫內的資料,以防在系統毀損時,還能將資料「還原」回去,減少損失。

資料庫系統理論(二)

結構化程式設計

定義:是指將一個「大系統」分解成許多具有「獨立功能」的「小模組」。

優點:
1.程式容易閱讀。
2.減少程式維護的成本。
3.減少程式邏輯的錯誤。
4.提高程式的生產力。
5.降低程式的複雜性及測試時間。
缺點:
1.程式比較多,故比較佔記憶體空間。
2.程式比較多,固執行速度比較慢。

結構化程式必須遵守的原則

1.每一個結構只能有一個入口及出口。
2.少用goto的指令
3.採用「由上而下」的觀念設計程式。

前測試迴圈

定義:先判斷條件式,再執行迴圈。
作法:「執行前」先檢查是否符合條件式,若符合,則執行迴圈;若不符合,則跳出迴圈。
語法:
while (條件式)
{
敘述區塊;
}
實例:
想到公園跑步。
假設我們想到公園跑步,則在我們出門時,一定會先判斷「是否有颳風下雨」,如果是的話,就會「待在家中....」繼續等待,直到沒有颳風下雨為止。


後測試迴圈

定義:先執行迴圈,再判斷條件式
作法:「判斷前」會先執行一次之後,再執行條件式判斷,不符合則跳出迴圈,但至少會執行一次迴圈。
語法:
do
{
敘述區塊;
}
while (條件式);
實例:
假設我們已經在公園跑步了一段時間,如果「沒有遇到颳風下雨」,則繼續「跑步....」。直到「颳風下雨」才停止跑步。

break語法的迴圈情況


contine語法的迴圈情況

資料庫系統理論(一)

Chapter2 資料型態與變數宣告及運算

 變數
*整數型態
十六進位制,以0x開頭
*布林型態
條件成立會顯示(1),條件不成立會顯示(空字串)
注意~在PHP程式語言中,(=)的真正意義是(指定運算子),並非數學中的(等於)。
*變數命名原則
$i_int 變數宣告整數
$f_float 變數宣告整浮點型態
$s_string 變數宣告為字串型態
$b_bool 變數宣告為布林型態

*字串常數
常數的優點
1.減少程式錯誤的機會。
2.讓程式更易於閱讀。
3.使程式較容易修正。

*運算子的分類
1.指定運算子 (例如 = )
2.算術運算子 (例如 +、-、*、/ )
3.關係運算子 (又稱比較運算子 例如 >、<、= ...)
4.邏輯運算子 (例如 AND、OR、NOT ...)
撰寫程式時,若遇到數學上的符號 = 時,都會有疑問,那就是:何時才是真正的等號;何時才能當作指定運算子來使用。基本上,在PHP中等的等號(=)大部分都是(指定運算子)來使用

關係運算子
運算子功能條件式執行結果
== (等於)判斷A與B是否相等$A=$BFlase
!=或 <>(不等於)判斷A是否不等於B$A!=$BTrue
< (小於)判斷A是否小於B$A<$BTrue
<=(小於等於)判斷A是否小於等於B$A<=$BTrue
>(大於)判斷A是否大於B$A>$B Flase
>=(大於等於)判斷A是否大於等於B$A>=$BFlase

邏輯運算子
運算子順序意義運算式運算結果為True的條件
!(邏輯 Not)1Not AA必為假
&&(邏輯 And)2A  and BA、B必須為真
||(邏輯 Or)3A Or B A、B中至少一個為真

複合指定運算式
運算子功能簡化的表示法相當於執行結果
(設I的初始值為3)
指定符號$I=2;$I=2;$I=2;
+=相加後再指定給變數$I+=2;$I=$I+2;$I=5;
-=相減後再指定給變數$I-=2;$I=$I-2;$I=1;
*=相乘後再指定給變數$I*=2;$I=$I*2;$I=6;
/=相除後再指定給變數$I/=2;$I=$I/2;$I=1.5;

後面有個小孩抱著嗎?