Download presentation
Presentation is loading. Please wait.
1
第十五章 SQLite資料庫 課程名稱:程式設計 授課老師:李春雄 博士
授課老師:李春雄 博士 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」, 今天所要為各位介紹的是第一章「資料結構導論」
2
本章學習目標 讓讀者了解資料庫的基本概念及與資料庫管理 系統及資料庫系統的關係。 2. 讓讀者了解如何定義、操作SQLite資料庫管理
系統。 3. 讓讀者了解B4A程式與SQLite資料庫整合,進行 開發一套手機資料庫程式。 開始: 本章學習目標 有二項:
3
本章內容 15-1 資料庫基本概念 15-2 關聯式資料庫 15-3 結構化查詢語言(SQL) 15-4 資料庫管理系統(DBMS)
15-5 建置SQLite資料庫及資料表 15-6 SQLite資料庫的操作 15-7 SELECT指令 15-8 合併(Join) 15-9 專題製作(選課系統) 1-1 認識資料與資訊的關係: 其中,「資料」轉換成「資訊」必須要經過一連串處理過程,而這一連串的處理過程就是透過「程式」來處理。 1-2 何謂資料結構? 「資料結構」(Data Structures)主要是探討如何將資料更有組織地存放到電腦記憶體中,以提昇程式之執行效率的一 門學問。 1-3 何謂演算法?演算法就是「解決問題的方法」 1-4 程式設計概念: 步驟1. 分析所要解決的問題 步驟2. 設計解題的步驟 步驟3. 編寫程式 步驟4. 上機測試、偵測錯誤 步驟5. 編寫程 式說明書 1-5 結構化程式設計 利用「由上而下」的技巧,將程式分解成許多個獨立功能的模組。並且每一個模組都是由三種結構所組成。分別為循序結構、選擇結構及重複結構。 1-6 演算法的效率評估 指用來計算某些演算法所撰寫的程式,在經過編譯之後,實際執行所需要的時間。
4
15-1 資料庫基本概念 隨著資訊科技的進步,資料庫系統帶給我們極大的便利。 例如:
我們要借閱某一本書,想知道該本書是否正放在某一圖書館中,並且尚未被預約借出。此時,我們只要透過網路就可以立即查詢到這本書的相關訊息。而這種便利性最主要的幕後工程就是圖書館中有一部功能強大的資料庫。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
5
15-1.1 何謂資料庫(Database)? 【非正式定義】簡單來說,資料庫就是儲存資料的地方。
【正式定義】資料庫是由一群相關資料的集合體。 【常見的應用】 1.個人「行動通訊錄」 2.學生「選課系統」 3.學生「成績查詢系統」 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6
15-1.2 建立資料庫的目的 一、降低資料的重複性(Redundancy) 二、達成資料的一致性(Consistency)
三、達成資料的共享性(Data Sharing) 四、達成資料的獨立性(Data Independence) 五、達成資料的完整性(Integrity) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
7
一、降低資料的重複性(Redundancy)
【定義】是指「相同的資料」只須儲存一次。 【作法】透過資料「正規化」來減少資料的重複性。 【例如】 將「教務處」與「學務處」中,把相同的資料項,抽出來組成一個新的資料表(學籍資料表) 。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
8
二、達成資料的一致性(Consistency)
【定義】是指相同的資料在不同的單位中,必須要能夠同時被更新。 【作法】利用外鍵參考主鍵,來建立「關聯式資料庫」。 【例如】 學生的姓名由「李安」改為「李碩安」時,則「教務處」與「學務處」兩處的相關姓名全部都會被修改。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
9
三、達成資料的共享性(Data Sharing)
【定義】是指同一份資料在同一時間可以提供給多位使用者同時來存取。 【作法】建立「關聯式資料庫」。 【例如】 「學籍資料表」中的「姓名」資料,可以同時提供給「學務處」來查詢學生的操行成績及提供給「教務處」來查詢學生的學業成績。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
10
四、達成資料立性(Data Independence)
【定義】是指應用程式與資料之間無關或獨立。 【作法】利用「資料庫系統」,而不使用「檔案系統」。 【例如】 當A同學在成績處理系統「由高到低」排序分數之後,而B同學再進行「由低到高」排序時,資料庫中的資料是不受影響的。 依「學號」來排序 依「資料庫」來排序 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
11
五、達成資料的完整性(Integrity)
【定義】 是指用以確保資料的一致性與完整性,亦即避免使用者將錯誤或不合法的資料值存入資料庫中。。 【作法】利用資料庫中的三種「完整性規則」。 【例如】 學生的成績為101分時,這顯然是一種錯誤性的資料。我們可以利用資料完整性的「值域完整性規則」,來檢查使用者將錯誤及不合法的資料值存入資料庫中。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
12
資料庫與資料庫管理系統 【引言】 我們都知道,資料庫是儲存資料的地方,但是如果資料只是儲存到電腦的檔案中,其效用並不大。因此,我們還需要有一套能夠讓我們很方便地管理這些資料庫檔案的軟體,這軟體就是所謂的『資料庫管理系統』。 【定義】是指一套管理「資料庫」的軟體。 【特色】可以同時管理數個資料庫。 【資料庫、資料庫管理系統及資料庫系統三者的關係】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
13
【重要觀念】 1.資料庫(DB):是由一群相關資料的集合體。 2.資料庫管理系統(DBMS):管理這些資料庫檔案的軟體
(如:SQLite、SQL Server、MySQL、Access…)。 3.資料庫系統(DBS)=資料庫(DB)+資料庫管理系統(DBMS)。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
14
資料庫的階層 【定義】 資料庫的階層是有循序的關係,也就是由小到大的排列,其最小的單位是Bit(位元),而最大的單位則是DataBase(資料庫)。 【圖解】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
15
【實例】選課系統資料庫 【說明】 1.「資料庫(DataBase)」是由許多個「資料表」所組成的。
2.「資料表(Table)」則是由許多個「資料記錄」所組成的。 3.「資料記錄(Record)」是由好幾個「欄位」所組成。 4.「欄位(Field)」是由許多個「字元」組成的。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
16
表15-1 資料庫階層表 資料階層 階層描述 資料範例 位元(Bit) 數位資料最基本的組成單位 二進位數值 0或1 位元組(Byte)
由8個位元所組成 透過不同位元組合方式可代表數字、英文字母、符號等,又稱為字元 一個中文字元是由兩個位元組所組成 欄位(Field) 由數個字元所組成 一個資料欄位可能由中文字元、英文字元、數字或符號字元組合而成 學號 資料錄(Record) 描述一個實體(Entity)相關欄位的集合 數個欄位組合形成一筆記錄 個人學籍資料 資料表(Table) 由相同格式定義之紀錄所組成 全班學籍資料 資料庫(Database) 由多個相關資料表所組成 校務行政資料庫,包括:成績資料表、學籍資料表、選課資料表…等 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
17
資料庫的設計 【引言】 當我們想要「設計資料庫」時,首要工作就是先進行「資料庫的需求分析」亦即先與使用者進行需求訪談,藉著訪談的過程來了解使用者對資料庫的需求,以便讓系統設計者來設計企業所需要的資料庫。其完整的資料庫設計程序常見有四個階段。 【資料庫設計程序】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
18
一、蒐集系統需求 【定義】是指用來收集及分析使用者的各種需求。 【目的】了解使用者的需求。 【產出】情境描述
情境1:假設每一位「學生」可以選修多門「課程」。 情境2:每一門「課程」可以被多位「學生」來選修。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
19
二、「概念」資料模型 【定義】是指系統的資訊需求,利用圖形化來表達。 【目的】描述資料庫的資料結構與內容。
【方法】將「情境」轉換成「ER圖」 【產出】實體關係圖(ERD) 【注意】 它與資料庫管理系統無關,因此,資料庫的技術改變,「概念」資料模型不須要重新設計。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
20
三、「邏輯」資料模型 【定義】 是指利用某一種資料庫模型為基礎來描述資料庫結構。 (資料庫模型有:階層式、網路式、關聯式及物件導向式) 。
【目的】將「實體關聯圖(ERD)」轉換成「關聯式資料模型」。 【方法】將「ER圖」轉換成「關聯表格」 【產出】資料庫關聯表(Table) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
21
四、「實體」資料模型 【定義】是指應用某種資料庫管理系統(DBMS)來實際儲存資料。
(DBMS有:SQLite、Access、SQL Server、Oracle等) 。 【目的】描述儲存資料庫的實體規格,以及資料如何有效存取。 【方法】利用SQL語言中的DDL與DML結合程式語言來實作。 【實作畫面】利用Access、SQL Server及Oracle來建立關聯式資料庫 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
22
四、「實體」資料模型(續…) 【產出】真正的記錄。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
23
15-2 關聯式資料庫 【定義】 是指任二個表格之間,若有相同的資料欄位值,則這二個表格便可以相連,亦即透過「外鍵」參考「主鍵」來相互連結。
【目的】 1.節省重複輸入的時間與儲存空間。 2.確保異動資料(新增、修改、刪除)時的一致性及完整性。 【作法】 1.將各種資料依照性質的不同(如:學籍資料、選課資料,課程資料…‥) ,分別存放在幾個不同的表格中。 2.表格與表格之間的關係,則以共同的欄位值(例如:「學號」欄位…) 相互連結。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
24
【舉例】 假設學校行政系統中有一個尚未分割的「學籍資料表」,如下表所示:
由上表中,我們可以清楚看出多筆資料重複現象,如果有某一筆資料打錯, 將會導致資料不一致現象。 例如:在上表中的第5筆記錄的系主任,應該是「李碩安」卻打成「李安」。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
25
【解決方法】 1. 將原始的「學籍資料表」分割成數個不重複的資料表。 2. 再利用「關聯式資料庫」的方法來進行資料表的關聯,
亦即透過「外鍵」參考「主鍵」。 因此,我們可以將上表中的「學籍資料表」分割為「學生資料表」與「科系代碼表」,如何產生關聯式資料庫呢?它是透過兩個資料表的相同欄位值(即系碼)來進行連結。如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
26
關聯式資料庫【優點】 1.節省記憶體空間 相同的資料記錄不須要再重複輸入。 2.提高行政效率
因為資料不須再重複輸入,故可以節省行政人員的輸入時間。 3.達成資料的一致性 因為資料不須再重複輸入,故可以減少多次輸入產生人為的錯誤。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
27
15-3 結構化查詢語言(SQL) 【定義】 SQL的英文全名為:Structured Query Language,中文譯為
結構化查詢語言。它是一種與「資料庫」溝通的語言。 【唸法】一般而言,它有兩種不同的唸法 1.三個字母獨立唸出來 S-Q-L。 2.唸成 sequel ( 西擴) 。 【制定標準機構】 目前SQL語言已經被美國標準局(ANSI)與國際標準組織(ISO)制定為 SQL標準,因此,目前各家資料庫廠商都必須要符合此標準。 【目前使用的標準】ANSI SQL92 (1992年制定的版本)。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
28
SQL語言提供三種語言 1.第一種為資料定義語言(Data Definition Language; DDL)
2.第二種為資料操作語言(Data Manipulation Language; DML) 3.第三種為資料控制語言(Data Control Language; DCL) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
29
第一種為資料定義語言 【英文全名】Data Definition Language(DDL) 【功能】
用來「定義」資料庫(DataBase)、資料表(Tables)、檢視表(Views)、索引表(Indexes)及觸發程序(Triggers)的欄位名稱、欄位型態及相關限制條件。 【提供三種指令】 1.CREATE(建立) 2.ALTER(修改) 3. DROP(刪除) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
30
第二種為資料操作語言 【英文全名】Data Manipulation Language(DML) 【功能】
用來「操作」資料庫的新增資料、修改資料、刪除資料、查詢資料 等功能。 【提供四種指令】 1. INSERT(新增) 2. UPDATE(更新) 3. DELETE(刪除) 4. SELECT(查詢) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
31
第三種為資料控制語言 【英文全名】 Data Control Language(DCL)
【功能】用來「控制」使用者對「資料庫內容」的存取權利。 【提供二種指令】 GRANT(授權) REVOKE(移除權限) 因此,SQL語言透過DDL,DML及DCL來建立各種複雜的表格關聯, 成為一個查詢資料庫的標準語言。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
32
15-4 資料庫管理系統(DBMS) 目前市面上常見的資料庫管理系統,大部份都是以「關聯式資料庫」管理系統為主。常見有兩種:
一、商業資料庫系統: 1.SQL Server(企業使用):微軟公司(Microsoft)所開發。 2.Access(個人使用):微軟公司(Microsoft)所開發。 3.DB2:是由IBM公司所開發。 4.Oracle:是由甲骨文公司(Oracle Corporation)所開發。 5.Sybase:是由賽貝斯公司所開發。 6.Informix:是由Informix公司所開發。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
33
15-4 資料庫管理系統(DBMS) 本書介紹的重點。 二、免費資料庫系統: 1.MySQL
2.SQLite(屬於Android作業系統內建的資料庫管理系統) 本書介紹的重點。 3.MySQL MaxDB 4.PostgreSQL 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
34
15-4.1 SQLite檔案型資料庫 【定義】是指Android作業系統內建的資料庫管理系統,並且每一個資料庫就是一個檔案。 【特色】
程式整合。 3. 管理者不需要另架設一台「資料庫伺服器」來管理SQLite資料庫。 4. 管理SQLite資料庫時,只需要透過「FireFox(火狐)瀏覽器」中的「SQLite Manager」管理工具。 5. 支援交易處理的四大特色:單元性(Atomicity)、一致性(Consistency)、 隔離性(Isolation)及持久性(Durability)。 6. SQLite資料庫支援大部分ANSI SQL92的語法。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
35
SQLite資料庫【優、缺點】 【優點】 1. SQLite資料庫的可攜性高及備份方便。
2. 系統效能優異,其效能超越速度聞名的MySQL。 3. 可跨平台;目前主流的作業系統都支援。 例如:Windows, Linux, FreeBSD, OS/2 ...等 4. 眾多語言支援;常見的程式語言都已經支援了SQLite。 例如:BASIC,JAVA,Objective-C,C/C++,PHP...等 【缺點】 只提供SQL語言中的DDL(資料定義語言)及DML(資料操作語言), 但沒有提供DCL(資料控制語言)。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
36
SQLite資料庫管理工具 在了解關聯式資料庫、結構化查詢語言(SQL) 及SQLite資料庫基本概念之後,接下來,我們就必須要實際使用SQLite資料庫管理工具,來撰寫SQL語法來跟資料庫進行溝通。因此,我們必須要完成以下的前置工作: 1.下載及安裝SQLite資料庫管理工具 2.啟動與結束SQLite資料庫管理工具 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
37
下載及安裝SQLite資料庫管理工具 由於SQLite資料庫必須要透過「資料庫管理系統(DBMS)」工具來維護,因此,必須先下載及安裝FireFox瀏覽器,再到FireFox瀏覽器的「工具/附加元件」中,選擇安裝「SQLite Manager」管理工具。 【完整步驟】 步驟一:下載及安裝FireFox瀏覽器,網站: 步驟二:FireFox瀏覽器的「工具/附加元件」中,選擇安裝 「SQLite Manager」管理工具 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
38
步驟三:再按「立即重新啟動」 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
39
啟動與結束SQLite資料庫管理工具 在我們下載及安裝「SQLite Manager」管理工具之後,接下來,就可以開始啟動SQLite資料庫管理工具。 【完整步驟】 步驟一:執行FireFox瀏覽器上方功能表中的「工具/SQLite Manager」選項 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
40
步驟二:「SQLite Manager」管理介面
步驟三:結束SQLite資料庫管理工具(請執行「Database/Exit」選項) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
41
15-5 建置SQLite資料庫及資料表 【引言】 在SQL結構化查詢語言中,它提供的第一種語言,就是資料定義語言
(Data Definition Language; DDL)。 【功能】用來「定義」資料表(Tables)、檢視表(Views)、索引表(Indexes)及觸發程序(Triggers)的欄位名稱、欄位型態及相關限制條件。 【提供三種指令】 1.CREATE(建立) 2.ALTER(修改) 3. DROP(刪除) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
42
建立一個空白SQLite資料庫 在學會上一單元的操作步驟之後,接下來,就可以開始利用「SQLite資料庫管理工具」來建立一個簡易的「MyeSchoolDB」資料庫。 【完整步驟】 步驟一:執行FireFox瀏覽器上方功能表中的「工具/SQLite Manager」選項,並執行「SQLite Manager」管理工具中的「Database/New Database」來建立新資料庫。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
43
步驟三:「SQLite Manager」管理介面
步驟二:輸入新資料庫的檔案名稱為「MyeSchoolDB」,再按「確定」鈕 步驟三:「SQLite Manager」管理介面 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
44
步驟五:查看電腦指定「資料夾」中的「MyeSchoolDB」資料庫
步驟四:儲存到電腦指定「資料夾」中 步驟五:查看電腦指定「資料夾」中的「MyeSchoolDB」資料庫 【註】SQLite資料庫的副檔名為「.sqlite」,建議不要修改它。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
45
新增SQLite資料表 由於,資料表是真正儲存資料的地方,所以,我們必須要再學會如何新增需要的各種資料表到資料庫中。但是,資料庫設計的好壞將會直接影響到整個資料庫的存取效率及空間。因此,在建立資料表之前,必須要注意以下幾點原則: 1.有相關的欄位才能放到同一個資料表中。 2.資料表之間,除了「關聯欄位」之外,不要重複存放相同欄位的資料。 3.每一個欄位都必須要給予適當的資料類型。 例如:姓名是屬於文字類 型,成績則是整數類型。 4.每一個資料表中的欄位個數不宜過多,如果欄位個數過多並且有太多 的重複現象時,可以進行分割成多個資料表,而各個資料表再透過 「關聯欄位」來建立關聯。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
46
資料表分割的原則 一般而言,資料表分割的原則如下: (1)單一資料表中有過多的重複欄位值。 (2)某欄位值與該資料表的主鍵無關。 圖:
接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
47
【實作方法】 1.在「SQLite Manager」管理工具中,操作「圖形化介面(UI)」來建立資料表
2.在「SQLite Manager」管理工具中,撰寫「SQL指令」來建立資料表 一、利用SQLite「圖形化介面(UI)」來建立資料表 步驟一:請在「SQLite Manager」管理工具中,先利用滑鼠移到左邊的「Tables(0)」資料表選項上,再按右鍵並點選「Create Table」。如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
48
【實作方法】 步驟二:建立資料表名稱(Table Name)及欄位的相關設定。
假設現在我們將建立一個「科系代碼表_UI」,其所需要的欄位名稱及相關摘要說明如下表所示: 科系代碼表_UI 【註】「系碼」是由英文字與數字組成,其資料型態利用「CHAR」。 「系名」與「系主任」是由中文字組成,其資料型態利用「VARCHAR」。 欄位名稱 資料型態 允許Null 主鍵 系碼 CHAR 否 是 系名 VARCHAR 系主任 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
49
在規劃出「科系代碼表_UI」的需求欄位之後,接著就可以依序新增這些欄位,其步驟如下:
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 【說明】常見的相關設定說明如下: 1. 欄位名稱(Column Name) 2. 資料型態(Data Type) 3. 主鍵(Primary Key) 4. 自動編號(Autoinc,是Autoincrement的簡寫) 5. 允許空值(Allow Null) 6. 唯一性(Unique) 7. 預設值(Default Value)
50
【說明】如果確認沒有問題的話,再按「Yes」鈕。 步驟四:完成了資料表定義之後,如下圖所示:
步驟三:再「確認」畫面 【說明】如果確認沒有問題的話,再按「Yes」鈕。 步驟四:完成了資料表定義之後,如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
51
二、撰寫「SQL指令」來建立資料表 【建立新資料表的步驟】 (1)決定資料表名稱與相關欄位 (2)決定欄位的資料型態
(3)決定欄位的限制(指定值域) (4)決定那些欄位可以NULL(空值)與不可NULL的欄位 (5)找出必須具有唯一值的欄位(主鍵) (6)找出主鍵-外來鍵配對(兩個表格) (7)決定預設值(欄位值的初值設定) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
52
【SQLite資料庫中的CREATE相關指令】
【格式】 Create Table 資料表 (欄位 { 資料型態|定義域}[NULL|NOT NULL][預設值][定義整合限制] …… …… Primary Key(欄位集合) 當主鍵 Unique(欄位集合) 當候選鍵 Foreign Key(欄位集合) References 基本表(屬性集合) 當外鍵 [ON Delete 選項] [ON Update 選項] Check(檢查條件)) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
53
【符號說明】 { | }代表在大括號內的項目是必要項,但可以擇一。 [ ] 代表在中括號內的項目是非必要項,依實際情況來選擇。
Create Table 資料表 (欄位 { 資料型態|定義域}[NULL|NOT NULL][預設值][定義整合限制] …… …… Primary Key(欄位集合) 當主鍵 Unique(欄位集合) 當候選鍵 Foreign Key(欄位集合) References 基本表(屬性集合) 當外鍵 [ON Delete 選項] [ON Update 選項] Check(檢查條件)) 【符號說明】 { | }代表在大括號內的項目是必要項,但可以擇一。 [ ] 代表在中括號內的項目是非必要項,依實際情況來選擇。 【關鍵字說明】 (1)PRIMARY KEY 用來定義某一欄位為主鍵,不可為空值 (2)UNIQUE 用來定義某一欄位具有唯一的索引值,可以為空值 (3)NULL/NOT NULL 可以為空值/不可為空值 (4)FOREIGN KEY 用來定義某一欄位為外部鍵 (5)CHECK 用來額外的檢查條件 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
54
【實作】 請撰寫「SQL指令」中CREATE指令來建立「科系代碼表」,其科系表之欄位名稱及相關資料型態,如下表所示: 科系代碼表 欄位名稱
允許Null 主鍵 系碼 CHAR 否 是 系名 VARCHAR 系主任 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
55
【操作步驟】 步驟一:點選「Execute SQL」執行SQL的頁籤 步驟二:將下列的SQL指令,複製到SQL編輯區中。
CREATE TABLE 科系代碼表 ( 系碼 CHAR , 系名 VARCHAR, 系主任 VARCHAR, PRIMARY KEY(系碼) ) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
56
步驟三:查看「科系代碼表」的欄位名稱及相關資料型態
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
57
【實作】 請依照建立資料表的同樣步驟,利用圖形化介面(UI),再建立一個「學生資料表_UI」,如下圖所示: 學生資料表_UI 【註】
「學號」與「系碼」是由英文字與數字組成,其資料型態利用「CHAR」。 「姓名」是由中文字組成,其資料型態利用「VARCHAR」。 欄位名稱 資料型態 允許Null 主鍵 學碼 CHAR 否 是 姓名 VARCHAR 系碼 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
58
【參考步驟】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
59
【隨堂實作】 請撰寫「SQL指令」中CREATE指令再建立「學生資料表」, 其學生表之欄位名稱及相關資料型態,如下表所示: 學生資料表
允許Null 主鍵 學碼 CHAR 否 是 姓名 VARCHAR 系碼 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
60
【SQL指令】 CREATE TABLE 學生資料表 (學號 CHAR, 姓名 VARCHAR, 系碼 CHAR,
PRIMARY KEY(學號) ) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
61
【最後的執行結果】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
62
修改SQLite資料表 在建立一個資料表中的相關欄位之後,如果我們在規劃資料表的過程中,不夠完善,可能會想再插入、修改及刪除某些欄位,此時,「SQLite Manager」管理工具是允許我們進行維護。 【實作方法】 1.在「SQLite Manager」管理工具中,操作「圖形化介面(UI)」來修改資料表 2.在「SQLite Manager」管理工具中,撰寫「SQL指令」來修改資料表 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
63
一、利用SQLite「圖形化介面(UI)」來修改資料表
(一)新增欄位名稱 步驟一:再新增一個「系助」欄位名稱 先點選欲修改的「科系代碼表_UI」,再按「Structure」結構頁籤,並移到最下方輸入「系助」欄位名稱及資料型態,最後再按「Add Column」新增欄位鈕即可。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
64
【說明】如果確認沒有問題的話,再按「Yes」鈕。 步驟三:新增「系助」欄位成功。
步驟二:再「確認」畫面 【說明】如果確認沒有問題的話,再按「Yes」鈕。 步驟三:新增「系助」欄位成功。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
65
(二)修改欄位名稱 在前一個步驟中,我們已經新增「系助」欄位了,但是,如果想將「系助」欄位名稱修改為「系助教」欄位時,也可以再透過「SQLite Manager」管理工具來進行。其步驟如下: 步驟一:先點選欲修改的「科系代碼表_UI」,再按「Structure」結構頁籤,並移到下方選擇欲修改的「系助」欄位上方按「右鍵」鈕,選擇「Edit Column」。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
66
步驟二:在「Edit Column」視窗中,輸入新的欄位名稱,亦即在New Vaules欄中,輸入「系助教」,最後再按兩個對話方話的「Yes」鈕即可。如下圖所示:
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
67
步驟三:修改為「系助教」欄位成功。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
68
(三)刪除欄位 如果我們在規劃資料表的過程中,經常會發生”建立不必要的欄位”的情況,此時,我們可以將他們加以刪除。其說明如下:
步驟一:先點選欲修改的「科系代碼表_UI」,再按「Structure」結構頁籤,並移到下方選擇欲刪除的「系助教」欄位上方按「右鍵」鈕,選擇「Drop Column」。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
69
最後再按兩個對話方話的「Yes」鈕即可。
步驟二:確認「刪除」動作。 最後再按兩個對話方話的「Yes」鈕即可。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
70
步驟三:查看刪除後的畫面。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
71
二、撰寫「SQL指令」來修改資料表 【指令】ALTER TABLE(修改資料表) 【定義】
刪除欄位,並且增加定義、修改定義或刪除定義等。 【SQLite資料庫中的ALTER相關指令】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
72
【修改資料表名稱】語法 ALTER TABLE 原來資料表名稱 RENAME TO 新命名資料表名稱 圖:
接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
73
【實作1】 請撰寫「SQL指令」中ALTER指令來將「學生資料表_UI」修改成「新學生資料表_UI」 【操作步驟】
步驟一:點選「Execute SQL」執行SQL的頁籤 步驟二:將下列的SQL指令,複製到SQL編輯區中。 ALTER TABLE 學生資料表_UI RENAME TO 新學生資料表_UI 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
74
【資料表中新增欄位】語法 ALTER TABLE 資料表名稱 ADD 欄位名稱 資料型態 [相關定義] 圖:
接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
75
【實作2】 請撰寫「SQL指令」中ALTER指令來增加「新學生資料表_UI」的e-mail欄位。 【操作步驟】
步驟一:點選「Execute SQL」執行SQL的頁籤 步驟二:將下列的SQL指令,複製到SQL編輯區中。 ALTER TABLE 新學生資料表_UI ADD [ ] VARCHAR 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
76
步驟三:增加e-mail欄位成功 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
77
15-5.4 刪除SQLite資料表 【指令】DROP TABLE(刪除資料表) 【定義】DROP TABLE是用來刪除資料表結構。
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
78
【刪除資料表名稱】的語法 【實作】 請撰寫「SQL指令」中DROP指令來刪除「學生表」的結構。 【SQL指令】
DROP TABLE 資料表名稱 【實作】 請撰寫「SQL指令」中DROP指令來刪除「學生表」的結構。 【SQL指令】 DROP TABLE 學生表 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
79
15-6 SQLite資料庫的操作 【引言】 在SQL結構化查詢語言中,它提供的第二種為資料操作語言(Data Manipulation Language; DML)。 【功能】 用來「操作」資料表的新增資料、修改資料、刪除資料、查詢資料等功能。 【提供四種指令】 INSERT(新增) UPDATE(更新) DELETE(刪除) SELECT(查詢) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
80
新增記錄到資料表中 在我們前一個單元中,已經建立了兩個資料表,分別為「科系代碼表」及「學生資料表」,但是,它們尚未儲存任何的記錄資料,因此,在本單元中,筆者再為各位讀者介紹,如何將記錄新增到資料表中。 其常用的方法有兩種: 【實作方法】 1.在「SQLite Manager」管理工具中,操作「圖形化介面(UI)」來操作 資料表中的記錄 2.在「SQLite Manager」管理工具中,撰寫「SQL指令」來操作資料表 中的記錄 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
81
第一種方法: 利用「圖形化介面(UI)」來新增記錄到資料表中
【範例】 在「科系代碼表_UI」中,新增兩筆記錄,其記錄資料如下表所示: 系碼 系名 系主任 D001 資工系 李春雄 D002 資管系 李碩安 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
82
【操作步驟】 步驟一:開啟新增記錄的對話方塊「Add New Record」
先點選欲新增的「科系代碼表_UI」,再按「Browse & Search」頁籤,並移到下一列的「Add(A)」按鈕,此時,自動會彈出「Add New Record」新增記錄的對話方塊,並且新增第一筆記錄。如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
83
步驟二:相同的步驟,再新增第二筆記錄,新增完成之後,畫面如下所示:
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
84
【隨堂實作】 在「新學生資料表_UI」中,新增五筆記錄,其記錄資料如下表所示: 【新增後結果】 學號 姓名 系碼 e-mail S0001
一心 D001 S0002 二聖 S0003 三多 D002 S0004 四維 S0005 五福 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
85
第二種方法: 撰寫「SQL指令」來新增記錄到資料表中
【指令】INSERT(新增記錄)指令 【定義】指新增一筆記錄到新的資料表內。 【格式】 INSERT INTO 資料表名稱 <欄位串列> VALUES(<欄位值串列> | <SELECT指令>) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
86
【範例】 請撰寫「SQL指令」中INSERT指令新增兩筆記錄「科系代碼表」中,其科系表記錄,如下表所示: 系碼 系名 系主任 D001
資工系 李春雄 D002 資管系 李碩安 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
87
【SQL指令】 INSERT INTO 科系代碼表 VALUES ('D001', '資工系','李春雄'),
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
88
【執行結果】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
89
【隨堂實作】 請撰寫「SQL指令」中INSERT指令新增五筆記錄「學生資料表」中,其學生表記錄,如下表所示: 學號 姓名 系碼 S0001
一心 D001 S0002 二聖 S0003 三多 D002 S0004 四維 S0005 五福 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
90
【SQL指令】 INSERT INTO 學生資料表 VALUES ('S0001', '一心','D001'),
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
91
【執行結果】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
92
修改資料表中的記錄 在我們前一個單元中,已經新增多筆記錄到「科系代碼表」及「學生資料表」中了,但是,如果有錯誤時,也可以再「修改」動作來進行。因此,在本單元中,筆者再為各位讀者介紹,如何修改資料表中的記錄。其常用的方法有兩種: 【實作方法】 1.在「SQLite Manager」管理工具中,操作「圖形化介面(UI)」來操作資料表中的記錄 2.在「SQLite Manager」管理工具中,撰寫「SQL指令」來操作資料表中的記錄 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
93
第一種方法: 利用「圖形化介面(UI)」來修改資料表中的記錄
【範例】 假設「科系代碼表_UI」中,資管系主任的姓名想改為「李安」時,則可以透過以下的步驟來進行。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
94
【操作步驟】 步驟一:修改記錄 先點選欲修改的「科系代碼表_UI」,再按「Browse & Search」頁籤,並移到想要修改的記錄上,「左鍵連按兩下」或「按右鍵」,此時,自動會彈出該筆記錄「修改記錄」對話方塊,再進行修改即可。如下圖所示:(1)左鍵連按兩下 (2)按右鍵 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
95
步驟二: 修改動作的指令 步驟三: 執行結果 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
96
第二種方法: 撰寫「SQL指令」來修改資料表中的記錄
【指令】UPDATE(修改記錄)指令 【定義】指修改一個資料表中某些值組(記錄)之屬性值。 【格式】 UPDATE 資料表名稱 SET {<欄位名稱1>=<欄位值1>,…, <欄位名稱n>=<欄位值n>} [WHERE <條件子句>] 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
97
【範例】 請撰寫「SQL指令」中UPDATE指令修改「科系代碼表」中,資管系主任的姓名改為「李安」。 【SQL指令】
SET 系主任='李安' WHERE 系名='資管系' 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
98
刪除資料表中的記錄 在我們前二個單元中,已經新增多筆記錄到「科系代碼表」及「學生資料表」中了,但是,如果在「學生資料表」中,某一位同學退學時,則可以透過「刪除」動作來進行。因此,在本單元中,筆者再為各位讀者介紹,如何刪除資料表中的記錄。其常用的方法有兩種: 【實作方法】 1.在「SQLite Manager」管理工具中,操作「圖形化介面(UI)」來操作 資料表中的記錄 2.在「SQLite Manager」管理工具中,撰寫「SQL指令」來操作資料表 中的記錄 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
99
第一種方法: 利用「圖形化介面(UI)」來刪除資料表中的記錄
【範例】 假設「新學生資料表_UI」中,「五福」同學已經退學了,則可以透過以下的步驟來進行刪除這筆記錄。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
100
【操作步驟】 步驟一:刪除記錄 先點選欲修改的「新學生資料表_UI」,再按「Browse & Search」頁籤,並移到想要修改的記錄上,按「右鍵」,此時,再選擇「Delete」鈕即可。如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
101
步驟二: 刪除動作的指令 步驟三: 執行結果 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
102
第二種方法: 撰寫「SQL指令」來刪除資料表中的記錄
【指令】DELETE(刪除記錄)指令 【定義】把合乎條件的值組(記錄),從資料表中刪除。 【格式】 DELETE FROM 資料表名稱 [WHERE <條件式>] 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
103
【範例】 請撰寫「SQL指令」中DELETE指令刪除「學生資料表」中,「五福」同學的相關記錄。 【SQL指令】
DELETE FROM 學生資料表 WHERE 姓名='五福' 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 【註】由SELECT(查詢指令)比較複雜,所以,單獨在下一個章節介紹。
104
15-7 SELECT指令 在SQL語言所提供三種語言(DDL,DML,DCL)中,其中第二種為資料操作語言(Data Manipulation Language; DML),主要是提供給使用者對資料庫進行異動(新增、修改、刪除)操作及「查詢」操作等功能。 而在異動操作方面比較單純,已經在前一單元中詳細介紹了,但在「查詢」操作方面是屬於比較複雜且變化較大的作業,因此,筆者特別將資料庫的查詢單元,利用本單元介紹。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
105
【SQL的基本語法】 SELECT [* | DISTINCT | Top n] <欄位串列>[INTO 新資料表]
FROM (資料表名稱{<別名>} | JOIN資料表名稱) [WHERE <條件式>] [GROUP BY <群組欄位> ] [HAVING <群組條件>] [ORDER BY <欄位> [ASC | DESC]] 【說明】 1. Select後面要接所要列出的欄位名稱。 2. [* / Distinct|Topn]中括號的部份可以省略。 (1) ”*” 表示列印出所有的欄位(欄位1,欄位2,……,欄位n) (2) Distinct代表從資料表中選擇不重複的資料。 它是利用先排序來檢查是否有重複,因此,已經內含order by的功能。 所以,如果使用Distinct時,就不須要再撰寫order by。 (3) Top n指在資料表中取出名次排序在前的n筆記錄。 (4)INTO 新資料表:是指將SELECT查詢結果存入另一個新資料表中。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
106
【SQL的基本語法】<續…>
SELECT [* | DISTINCT | Top n] <欄位串列>[INTO 新資料表] FROM (資料表名稱{<別名>} | JOIN資料表名稱) [WHERE <條件式>] [GROUP BY <群組欄位> ] [HAVING <群組條件>] [ORDER BY <欄位> [ASC | DESC]] 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。 4.Where後面要接條件式(它包括了各種運算子)
107
【SQL的基本語法】<續…>
SELECT [* | DISTINCT | Top n] <欄位串列>[INTO 新資料表] FROM (資料表名稱{<別名>} | JOIN資料表名稱) [WHERE <條件式>] [GROUP BY <群組欄位> ] [HAVING <群組條件>] [ORDER BY <欄位> [ASC | DESC]] 【說明】 5. Group By欄位1,欄位2,…,欄位n [Having 條件式] (1)Group By 可單獨存在,它是將數個欄位組合起來,以做為每次動作的依據。 (2) [Having 條件式]是將數個欄位中加以有條件的組合。它不可以單獨存在。
108
【SQL的基本語法】<續…>
SELECT [* | DISTINCT | Top n] <欄位串列>[INTO 新資料表] FROM (資料表名稱{<別名>} | JOIN資料表名稱) [WHERE <條件式>] [GROUP BY <群組欄位> ] [HAVING <群組條件>] [ORDER BY <欄位> [ASC | DESC]] 【說明】 6. Order By 欄位1,欄位2,…,欄位n [Asc|Desc] 它是依照某一個欄位來進行排序。 例如:(1) ORDER BY 成績 Asc 可以省略(由小至大) (2) ORDER BY成績 Desc 不可以省略(由大至小)
109
【建立選課系統資料庫】 在本單元中,為了方便實作SQL指令的查詢,除了前面單元已經建置了「學生資料表」與「科系代碼表」之外,還必須要再建置「課程資料表」及「選課資料表」完成之後,如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
110
建立「課程資料表」與「選課資料表」 CREATE TABLE 課程資料表 ( 課號 CHAR , 課名 VARCHAR,
學分數 INTEGER, PRIMARY KEY(課號) ) CREATE TABLE 選課資料表 學號 CHAR , 課號 CHAR, 成績 INTEGER, PRIMARY KEY(學號,課號) INSERT INTO 課程資料表 VALUES ('C001', '資料結構','4'), ('C002', '資訊管理','4'), ('C003', '系統分析','3'), ('C004', '統計學','4'), ('C005', '資料庫系統','3') INSERT INTO 選課資料表 VALUES ('S0001', 'C001','56'), ('S0001', 'C005','73'), ('S0002', 'C002','92'), ('S0002', 'C005','63'), ('S0003', 'C004','92'), ('S0003', 'C005','70'), ('S0004', 'C003','75'), ('S0004', 'C004','88'), ('S0004', 'C005','68') 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
111
15-7.1 使用Select子句 【定義】 Select是指在資料表中,選擇全部或部份欄位顯示出來,這就是所謂的「投影運算」。 【格式】
From 資料表名稱 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
112
查詢全部欄位 【定義】 是指利用SQL語法來查詢資料表中的資料時,可以依照使用者的權限及需求來查詢所要看的資料。如果沒有指定欄位的話,我們可以直接利用星號「*」代表所有的欄位名稱。 【優點】不需輸入全部的欄位名稱。 【缺點】 1.無法隱藏私人資料。 2.無法自行調整欄位順序。 3.無法個別指定欄位的別名。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
113
[實例] 在「學生資料表」中顯示「所有學生基本資料」 【解答】 【查詢結果】 SQL指令1 SELECT * FROM 學生資料表 圖:
接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
114
查詢指定欄位(垂直篩選) 【定義】 由於上一種方法,只能直接選擇全部的欄位資料,無法顧及隱藏私人資料及自行調整欄位順序的問題,因此,我們利用指定欄位來查詢資料。 【優點】 1.顧及私人資料。 2.可自行調整欄位順序。 3.可以個別指定欄位的別名。 【缺點】 如果確定要顯示所有欄位,則必須花較多時間輸入。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
115
[實例] 在「學生資料表」中查詢所有學生的「姓名及系碼」 【解答】 【查詢結果】 說明:在「學生資料表」中將「姓名」及「系碼」投射出來。
欄位與欄位名稱之間,必須要以逗號「,」隔開 SQL指令 SELECT 姓名, 系碼 FROM 學生資料表 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
116
15-7.1.3 使用「別名」來顯示 【定義】 使用AS運算子之後,可以使用不同名稱顯示原本的欄位名稱。
使用「別名」來顯示 【定義】 使用AS運算子之後,可以使用不同名稱顯示原本的欄位名稱。 【表示式】原本的欄位名稱 AS 別名 《AS可省略不寫,只寫「別名」》 【舉例】系碼 AS 科系代碼 或寫成 系碼 科系代碼 【注意】 AS只是暫時性地變更列名,並不是真的會把原本的名稱覆蓋過去。 【適用時機】1.欲「合併」的資料表較多並且名稱較長時。 2.一個資料表扮演多種不同角色(自我合併)。 3.暫時性地取代某個欄位名稱(系名 AS 科系代碼) 【替代欄位名稱字串】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 替代字元 功能 語法 AS 設定別名 Select 系碼 AS 系所班別 + 結合兩個欄位字串 SELECT 學號+姓名 AS 資料
117
[實例1] 在「學生資料表」中將所有學生的「系碼」設定別名為「科系代碼」」之後,再顯示「姓名、科系代碼」 【解答】 【查詢結果】 SQL指令
SELECT 姓名, 系碼 AS 科系代碼 FROM 學生資料表 利用AS來設定欄位的別名 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
118
使用「模糊條件與範圍」 【定義】 在Where條件式中除了可以設定「比較運算子」與「邏輯運算子」之外,還可以設定「模糊或範圍條件」來查詢。 【例如】奇摩的搜尋網站,使用者只要輸入某些關鍵字,就可以即時查詢出相關的資料。 表15-2 模糊或範圍運算子表 運算子 功能 條件式 1. Like 模糊相似條件 Where 系所 LIKE '資管%' 2. IN 集合條件 Where 課程代號 IN('C001','C002') 3. Between……And 範圍條件 Where 成績 Between 60 And 80 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
119
15-7.2.1 Like模糊相似條件 【定義】 LIKE運算子利用萬用字元(%及 _ )來比較相同的內容值。
(1)萬用字元(%)百分比符號代表零個或一個以上的任意字元; (2)萬用字元( _ )底線符號代表單一個數的任意字元。 【注意事項】Like模糊相似條件的萬用字元之比較 撰寫SQL 語法環境 Access SQLite SQL Server 比對一個字元 「?」 「_」 比對多個字元 「*」 「%」 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
120
【以SQLite的環境為例】 1.Select * 意義:「*」 代表在資料表中的所有欄位 2. WHERE 姓名 Like '李%'
意義:查詢姓名開頭為 '李' 的所有學生資料 3. WHERE 姓名 Like '%李' 意義:查詢姓名結尾為 '李' 的所有學生資料 4. WHERE 姓名 Like '%李%' 意義:查詢姓名含有為 '李' 的所有學生資料 5. WHERE 姓名 Like '李__' 意義:查詢姓名中姓 '李'且3個字的學生資料 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
121
【實例】 在「科系代碼表」中查詢系名開頭「資」的科系資料。 【解答】 【查詢結果】 SQL指令 SELECT * FROM 科系代碼表
WHERE 系名 Like '資%' 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
122
15-7.2.2 IN集合條件 【查詢結果】 【定義】IN為集合運算子,只要符合集合之其中一個元素,將會被選取。
【使用時機】篩選的對象是兩個或兩個以上。 【實例 1】 在「選課資料表」中查詢學生任選一個「課號為C004 或 課號為C005」的學生的「學號、課號及成績」 【解答 】 【查詢結果】 SQL指令 SELECT 學號, 課號, 成績 FROM 選課資料表 WHERE 課號 In ('C004','C005') 使用IN時可以在括號中設定好幾個值 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 註:以上的WHERE 課號 In ('C004','C005')亦可寫成如下: WHERE 課號='C004' OR 課號='C005'
123
15-7.2.3 Between/And範圍條件 【定義】
Between/And是用來指定一個範圍,表示資料值必須在最小值(含)與最大值(含)之間的範圍資料。註:等同於「≧最小值 And 最大值≦」 【實例】 在「選課資料表」中查詢成績70到90 之間的學生的「學號、 課號及成績」 【解答 】 【查詢結果】 SQL指令 SELECT 學號, 課號, 成績 FROM 選課資料表 WHERE 成績 Between 70 And 90 成績>=70 And成績<=90 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 等同於
124
15-7.3 使用「聚合函數」 【定義】 在SQL中提供聚合函數來讓使用者統計資料表中數值資料的最大值、最小值、平均值及合計值等等。
表15-3 聚合函數表 聚合函數 說明 Count(*) 計算個數函數 Count(欄位名稱) 計算該欄位名稱之不具NULL值列的總數 Avg 計算平均函數 Sum 計算總合函數 Max 計算最大值函數 Min 計算最小值函數 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
125
15-7.3.1 記錄筆數(Count) 【定義】COUNT函數是用來計算橫列記錄的筆數。
【實例 】 在「學生資料表」中查詢目前選修課程的全班人數 【解答 】 【查詢結果】 SQL指令 SELECT Count(*) AS 全班人數 FROM 學生資料表 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
126
15-7.3.2 平均數(AVG) 【定義】AVG函數用來傳回一組記錄在某欄位內容值中的平均值。
【實例】在「選課資料表」中查詢有選修「課號為C005」的全班 平均成績 【解答】 【查詢結果】 SQL指令 SELECT AVG(成績) AS 資料庫平均成績 FROM 選課資料表 WHERE 課號='C005' 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
127
15-7.3.3 總和(Sum) 【定義】SUM函數是用來傳回一組記錄在某欄位內容值的總和。 SQL指令
【實例】在「選課資料表」中查詢有選修「課號為C005」的全班總成績 【解答 】 【查詢結果】 SQL指令 SELECT SUM(成績) AS 資料庫總成績 FROM 選課資料表 WHERE 課號='C005' 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
128
15-7.3.4 最大值(Max) 【定義】MAX函數用來傳回一組記錄在某欄位內容值中的最大值。
【實例】在「選課資料表」中查詢有選修「課號為C005」的全班成績最高分 【解答 】 【查詢結果】 SQL指令 SELECT MAX(成績) AS 資料庫最高分 FROM 選課資料表 WHERE 課號='C005' 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
129
15-7.3.5 最小值(Min) 【定義】MIN函數用來傳回一組記錄在某欄位內容值中的最小值。
【實例】在「選課資料表」中查詢有選修「課號為C005」的全班成績最低分 【解答】 【查詢結果】 SQL指令 SELECT MIN(成績) AS 資料庫最低分 FROM 選課資料表 WHERE 課號='C005' 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
130
使用「排序及排名次」 【定義】 雖然撰寫SQL指令來查詢所須的資料非常容易,但如果顯示的結果筆數非常龐大而沒有按照某一順序及規則來顯示,可能會顯得非常混亂。還好SQL指令還有提供排序的功能。 表15-4 排序及排名次函數表 [註]ASC:Ascending(遞增) DESC:Descending(遞減) 排序及排名次指令 說明 ORDER BY成績 Asc Asc 可以省略(由小至大) ORDER BY成績 Desc Desc 不可以省略(由大至小) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
131
15-7.4.1 Asc遞增排序 【定義】資料記錄的排序方式是由小至大排列。 【實例】在「選課資料表」中查詢全班成績由低到高分排序 【解答】
【查詢結果】 SQL指令 SELECT 學號, 課號, 成績 FROM 選課資料表 ORDER BY 成績 Asc 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
132
15-7.4.2 Desc遞減排序 【定義】資料記錄的排序方式是由大至小排列。 【實例】在「選課資料表」中查詢的全班成績由高到低分排序
【解答】 【查詢結果】 SQL指令 SELECT 學號, 課號, 成績 FROM 選課資料表 ORDER BY 成績 DESC 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
133
比較複雜的排序 【定義】 指定一個欄位以上來做排序時,則先以第一個欄位優先排序,當資料相同時,則再進行第二個欄位進行排序,依此類堆。 【實例】在「選課資料表」中查詢結果按照學號昇冪排列之後,再依成績昇冪排列。 【查詢結果】 【解答 】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 SQL指令 SELECT 學號, 課號, 成績 FROM 選課資料表 ORDER BY 學號,成績 欄位名稱之間必須要以「,(逗點)來做區隔」
134
使用「群組化」 【定義】 利用SQL語言,我們可以將某些特定欄位的值相同的記錄全部組合起來,以進行群組化,接著就可以在這個群組內求出各種統計分析。 【語法】 Group By 欄位1,欄位2,…,欄位n [Having 條件式] (1)Group By 可單獨存在,它是將數個欄位組合起來,以做為每次 動作的依據。 (2) [Having 條件式]是將數個欄位中以有條件的組合。它不可以單獨存在。 (3) WHERE子句與HAVING子句之差別 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 WHERE子句 HAVING子句 執行順序 GROUP BY之前 GROUP BY之後 聚合函數 不能使用聚合函數 可以使用
135
(4) SQL的執行順序 SQL的執行順序 ① FROM 指定所需表格,如兩個表格以上(含) 先卡氏積,再JOIN ↓ ② ON
↓ ② ON 資料表JOIN的條件 ③ [Inner | Left | Right] Join 資料表 ④ WHERE 找出符合指定條件的所有列,一般不含聚合函數 ⑤ GROUP BY 根據指定欄位來分群 ⑥ HAVING 找出符合指定條件的所有群組,都是利用聚合函數 SELECT 指定欄位並輸出結果 DISTINCT 列出不重複的記錄 ORDER BY 排序 TOP N 列出前N筆記錄 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
136
15-7.5.1 Group By 欄位 【定義】 Group By 可單獨存在,它是將數個欄位組合起來,以做為每次動作的依據。 【語法】
說明:在Select的非聚合函數內容一定要出現在Group By中, 因為先群組化才能Select。 Select 欄位1,欄位2,聚合函數運算 From 資料表 Where 過濾條件 Group By 欄位1,欄位2 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
137
[實例1] 在「選課資料表」中,查詢每一位同學各選幾門科目。 【解答】 【註】在Select所篩選的非聚合函數。
例如:學號,一定會在 Group By後出現。 【查詢結果】 SQL指令 SELECT 學號, Count(*) AS 選科目數 FROM 選課資料表 GROUP BY 學號 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
138
[實例2] SQL指令 在「選課資料表」中計算每一位同學所修之科目的平均成績 【解答】 【查詢結果】
SELECT 學號, AVG(成績) AS 平均成績 FROM 選課資料表 GROUP BY 學號 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
139
[實例3] 在「選課資料表」中,將每個課程的選修人數印出來,印出之結果並按課程代號由大到小排序 【解答】 【查詢結果】 SQL指令
SELECT 課號, Count(*) AS 選課學生人數 FROM 選課資料表 GROUP BY 課號 ORDER BY 課號 DESC 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
140
[實例4] 在「選課資料表」中,將每個課程的選修人數及該科最高分數印出來,印出之結果並按課號由小到大排序 【解答】 【查詢結果】 SQL指令
SELECT 課號, Count(*) AS 選課學生人數, MAX(成績) AS 最高分成績 FROM 選課資料表 GROUP BY 課號 ORDER BY 課號 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
141
[實例5] 在「選課資料表」中,將每個課程的選修人數及該科平均分數印出來,印出之結果並按課號由小到大排序 【解答】 【查詢結果】 SQL指令
SELECT 課號, Count(*) AS 選課學生人數, AVG(成績) AS 平均成績 FROM 選課資料表 GROUP BY 課號 ORDER BY 課號 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
142
15-7.5.2 Having 條件式 【定義】 Having 條件式是將數個欄位中以有條件的組合。它不可以單獨存在。
【實例1 】在「選課資料表」中,計算所修之科目的平均成績,大於等 於70者顯示出來。 【解答】 【查詢結果】 SQL指令 SELECT 學號, AVG(成績) AS 平均成績 FROM 選課資料表 GROUP BY 學號 HAVING AVG(成績)>=70 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
143
[實例2] 在「選課資料表」中,將選修課程在二科及二科以上的學生學號資料列出來。 【解答】 【查詢結果】
SQL指令 SELECT 學號, Count(*) AS 選修數目 FROM 選課資料表 GROUP BY 學號 HAVING COUNT(*)>=2 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
144
Where子句與 HAVING子句之差異
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
145
15-8 合併(Join) 【定義】 合併(Join)又稱為「條件式合併(Condition Join)」,也就是說,將「卡氏積」展開後的結果,在兩個資料表之間加上「限制條件」,亦即在兩個資料表之間找到「對應值組」才行。 【兩種作法】 1.透過SELECT指令WHERE部分的等式,即對等合併(Equi-Join) 。 2.透過SELECT指令FROM部分的INNER JOIN。即自然合併(Natural Join);又稱為內部合併(Inner Join) From A ,B Where (A.c=B.c) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 From A INNER JOIN B ON A.c=B.c
146
【實例】 假設有兩個資料表,分別是「學生表」與「課程表」,現在欲將這兩個資料表進行「內部合併」,因此,我們必須要透過相同的欄位值來進行關聯,亦即「學生表」的「課號」對應到「課程表」的「課號」,如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
147
1.分析 從上圖中,我們就可以將此條關聯線條寫成: 學生表.課號=課程表.課號
因此,我們將這兩個資料表進行「卡氏積」運算,其結果如下圖所示,接下來,從展開後的記錄中,找尋那幾筆記錄具有符合「學生表.課號=課程表.課號」的條件,亦即「學生表」的「課號」等於「課程表」的「課號」。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
148
2.撰寫SQL程式碼 (1)第一種做法:(Equi-Join最常用) (2)第二種做法:INNER JOIN 【執行結果】
Select 學號,姓名,課程表.課號,課程名稱,學分數 From 學生表,課程表 Where 學生表.課號=課程表.課號 SELECT 學號,姓名,課程表.課號,課程名稱,學分數 FROM 學生表 INNER JOIN 課程表 ON 學生表.課號=課程表.課號 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
149
3.綜合分析: 當我們欲查詢的欄位名稱是來源於兩個或兩個以上的資料表時, 如下表所示: 圖:
接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
150
3.綜合分析: (續…) 步驟一:辨識「目標屬性」及「相關表格」 學生資料表(學號,姓名,系碼) ? ? 選課資料表(學號,課號,成績) ?
? ? 選課資料表(學號,課號,成績) ? 目標屬性:學號, 姓名, 平均成績 相關表格:學生資料表, 選課資料表 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
151
3.綜合分析: (續…) 步驟二:將相關表格進行「卡氏積」 【執行結果】 總共產生36筆記錄及6個欄位 SELECT *
FROM 學生資料表 AS A, 選課資料表 AS B 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
152
3.綜合分析: (續…) 步驟三:進行「合併(Join);本題以「內部合併」為例」, 亦即在Where 中加入「相關表格」的關聯性
【執行結果】產生9筆記錄 SELECT * FROM 學生資料表 AS A, 選課資料表 AS B WHERE A.學號=B.學號 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
153
3.綜合分析: (續…) 步驟四:加入限制條件(成績大於或等於70分者) 【執行結果】產生6筆記錄 SELECT *
FROM 學生資料表 AS A, 選課資料表 AS B WHERE A.學號=B.學號 And B.成績>=70 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
154
3.綜合分析: (續…) 步驟五:投影使用者欲「輸出的欄位名稱」 【執行結果】 SELECT A.學號, 姓名, 課號, 成績
FROM 學生資料表 AS A, 選課資料表 AS B WHERE A.學號=B.學號 And B.成績>=70 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
155
3.綜合分析: (續…) 步驟六:使用群組化及聚合函數 【執行結果】 SELECT A.學號, 姓名, AVG(成績) AS 平均成績
FROM 學生資料表 AS A, 選課資料表 AS B WHERE A.學號=B.學號 And B.成績>=70 GROUP BY A.學號, 姓名 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
156
3.綜合分析: (續…) 步驟七:使用「聚合函數」之後,再進行篩選條件 (各人平均成績大於或等於80分者) 【執行結果】
SELECT A.學號, 姓名, AVG(成績) AS 平均成績 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A.學號=B.學號 And B.成績>=70 GROUP BY A.學號, 姓名 HAVING AVG(成績)>=80 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
157
3.綜合分析: (續…) 步驟八:依照某一欄位或「聚合函數」結果,來進行「排序」 (由低分到高分)。 【執行結果】
SELECT A.學號, 姓名, AVG(成績) AS 平均成績 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A.學號=B.學號 And B.成績>=70 GROUP BY A.學號, 姓名 HAVING AVG(成績)>=80 ORDER BY AVG(成績) ASC; 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
158
4.結論: 「學生資料表」與「選課資料表」在經過「卡氏積」之後,會展開成各種組合,並產生龐大記錄,但大部份都是不太合理的配對組合。
所以,我們就必須要再透過「內部合併(Inner Join)」來取出符合「限制條件」的記錄。因此,我們從上面的結果,可以清楚得知「內部合併」的結果就是「卡氏積」的子集合。如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
159
15-9 B4A與SQLite資料庫整合 【引言】 在前面的單元中,我們已經學會如何利用「SQLite Manager」管理工具來建立資料庫、資料表以及撰寫各種SQL指令了。接下來,我們就可以真正利用B4A程式來連接剛才建立的「MyeSchoolDB.sqlite」資料庫了。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
160
【實作1】 請各位同學,利用B4A程式來開發一套「課程資料管理系統」,以便讓各位同學記錄您在本學期修課歷程資料。
【參考解答】ch15-9A/課程管理系統(教學版).b4a 步驟一:請先利用B4A程式設計兩個版面配置檔(.bal),分別為Main.bal及Course.bal。完成的畫面如下所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
161
步驟二:利用模擬器預覽畫面。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」
當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
162
步驟三:在B4A環境右邊之「Libs」頁籤中,勾選「SQL」函式庫。
圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
163
步驟四:匯入SQLite資料庫「MyeSchoolDB.sqlite」到【Files】標籤中。
【注意】B4A中的File.DirAssets是一種唯讀目錄,因此,無法讓B4A進行寫入。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
164
【解決方法】 在Main活動模組中的Activity_Create程序,將「MyeSchoolDB.sqlite」SQLite資料庫複製到「File.DirDefaultExternal」儲存置位。 【程式說明】 行號02:「File.DirDefaultExternal」外部記憶體儲存置位,它會儲存到你的手機 「SD卡」的根目錄/Android/data/<您專案的Package Name>/files/ ★設定「您專案的Package Name」的步驟: B4A上方選擇Project/Package Name/Leech.Myebook.ch15_9 行號02~03:判斷「SD卡」是否存在資料庫檔案,如果沒有,則 行號04~05:從Files頁籤中的資料庫檔案複製到「SD卡」中的「File.DirDefaultExternal」 外部記憶體儲存置位。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
165
步驟五:宣告SQL及Curson物件為全域性變數
【程式說明】 行號02:宣告SQLCmd 為SQL物件 行號03:宣告CursorDBPoint 為資料庫記錄指標 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
166
行號02:判斷SQLCmd 物件是否已經初始化(建立),如果沒有,則
步驟六:建立一個資料庫檔案 【程式說明】 行號02:判斷SQLCmd 物件是否已經初始化(建立),如果沒有,則 行號03~04:必須要利用SQLCmd物件的Initialize()初始化方法來建立, 其中Initialize()方法有三個參數: 第1個參數:為SQLite資料庫儲存位置。 第2個參數:為SQLite資料庫名稱 第3個參數:為是否要建立此資料庫,如果True代表要建立, False則不需建立。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
167
步驟七:新增「課程資料」記錄 【程式說明】 行號02:宣告SQL指令為strSQL字串變數
行號03~05:宣告CourNo(課程代號),CourName(課程名稱),CourCredits(學分數) 三個字串變數,並且表單中三個欄位內容指定給這三個變數。 行號06~08:利用SQL的DML語言之INSERT新增指令,將三個字串變數內容新增到 「課程資料表」,並暫時指定給strSQL字串變數。 行號09:SQLCmd 物件使用ExecNonQuery()方法來執行strSQL字串變數中的SQL指令。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
168
步驟八:修改「課程資料」記錄 【程式說明】 行號02:宣告SQL指令為strSQL字串變數
行號03:宣告CourNo(課程代號)為字串變數,並且表單中課號欄位內容指定給此變數。 行號04~07:利用SQL的DML語言之UPDATE修改指令,來修改符合條件的課程之欄位 內容,並暫時指定給strSQL字串變數。 行號08:SQLCmd 物件使用ExecNonQuery()方法來執行strSQL字串變數中的SQL指令。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
169
步驟九:刪除「課程資料」記錄 【程式說明】 行號02:宣告SQL指令為strSQL字串變數
行號03:宣告CourNo(課程代號)為字串變數,並且表單中課號欄位內容指定給此變數。 行號04~07:利用SQL的DML語言之 DELETE刪除指令,來刪除符合條件的課程記錄, 並暫時指定給strSQL字串變數。 行號08:SQLCmd 物件使用ExecNonQuery()方法來執行strSQL字串變數中的SQL指令。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
170
步驟十:查詢「課程資料」單筆記錄 【程式說明】 行號02:查詢「課程代號」的下拉式元件顯示 行號03:「課程代號」欄位元件隱藏
行號04:查詢「課程代號」的下拉式元件來清空 行號05~09:從目前「課程資料表」中,找出全部「課號」欄位值到「課程代號」的 下拉式元件中。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
171
【程式說明】 行號11:宣告SQL指令為SQL_Query字串變數
行號13:將下拉式選擇所選擇的「課號」指定給QueryCourNo字串變數 行號14~15:利用SQL的DML語言之 SELECT查詢指令,來查詢符合條件的課程記錄, 並暫時指定給strSQL字串變數。 行號16:呼叫顯示「課程資料表」之副程式(CallShow_CourseData) 行號17:查詢「課程代號」的下拉式元件隱藏 行號18:「課程代號」欄位元件顯示 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
172
【程式說明】 行號21:SQLCmd 物件使用ExecQuery()方法來執行strSQL字串變數中的SQL指令。
行號22:Position屬性是用來指定目前資料庫指標指向索引0的記錄(亦即第1筆) 行號23~25:顯示符合條件的課程記錄,利用GetString()方法來取得資料表中的欄位 之欄位值顯示到表單中的三個欄位中。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
173
步驟十一:顯示「課程資料」全部記錄(多筆清單)
【程式說明】 行號01~03:呼叫查詢「課程資料表」的功能按鈕,並且SQL指令之參數傳遞給QueryDBList副程式。 行號05:課程清單的ListView元件內容先清空。 行號06~08:設定課程清單ListView元件欄位名稱、清單內容及分隔水平線之字串變數初值設為空字串。 行號09:SQLCmd 物件使用ExecQuery()方法來執行strSQLite字串變數中的SQL指令。 行號10:設定課程清單ListView元件顯示時的「字體」大小為16dip。 行號11:設定課程清單ListView元件顯示時的「行距」大小為20dip。 行號12~16:取得欄位名稱及分隔水平線。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
174
【程式說明】 行號17~18:將「取得欄位名稱及分隔水平線」字串顯示在課程清單ListView元件中。 行號19:控制「記錄」的筆數。
行號20:記錄指標從第1筆開始(索引為0)。 行號21~25:控制「欄位」的個數,並顯示某一筆記錄的各欄位內容 行號26:顯示「每一筆記錄的內容」 行號27:在將「每一筆記錄的內容」顯示到課程清單ListView元件之後,清單內容的字串變數, 再設定為空字串。 行號29~30:顯示目前已經存在的課程記錄筆數。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
175
【深入分析1】「主鍵填入空值」資料 當各位同學在執行「ch15-9A/課程管理系統(教學版).b4a」程式時,你是否發現,在尚未輸入資料之前,如果不小心按下「新增」鈕時, 竟然可以執行,其實它是錯誤,因為 主鍵不可以為空值。如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
176
【解決方法】 新增「課程資料」前,先檢查表單中的「欄位值是否為空」 【執行畫面】「ch15-9B/課程管理系統(完整版).b4a」 圖:
接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
177
【深入分析2】「重複新增」資料 當各位同學在執行「ch15-9A/課程管理系統(教學版).b4a」程式時,你是否發現如果不小心「重複新增相同課程」資料時,會產生錯誤情況,如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
178
【解決方法】 新增「課程資料」前,先檢查「課程資料」是否有重複新增 【程式說明】 行號09:呼叫檢查「課程資料」是否有重複新增之副程式
行號10~11:檢查是否有重複新增,如果有的話,則顯示「您已經重複新增「課程資料」了!」 的訊息方塊。 行號12~15:如果沒有重複新增的話,執行SQL指令,以成功的新增記錄,並顯示新增成功狀態。 行號16:設定沒有重複新增「課程資料」的布林狀態為False。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
179
檢查「課程資料」是否有重複新增之副程式 【程式說明】 行號17~24:檢查「課程資料」是否有重複新增之副程式
行號21:檢查目前資料庫中的「課程資料表」是否已經存在一筆了 行號22:代表重複新增「課程資料」了! 【執行畫面】「ch15-9B/課程管理系統(完整版).b4a」 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
180
【綜合討論】 俗語說:「預防重於治療」,由此可見,預防維護的重要性。它主要是透過定期性的觀察檢視,與評估系統的運作狀況,提早發現系統可能潛在的問題,並加以防範。 【主要的精神】為了提高系統未來可維護性、可靠性、一致性及 完整性等能力。 【目的】修改系統以避免未來可能發生之錯誤。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
Similar presentations