課程作業要求與資源 >> SQL Cheat Sheet 下載 or visit here http://cse.unl.edu/~sscott/ShowFiles/SQL/CheatSheet/SQLCheatSheet.html 請在您自己的 e-Portfolio上建立一個新的文章分類, 分類的名稱為<<105-1 資料庫管理系統>>, 爾後您的作業必須 張貼在該分類之下。 每個學習單元請在前述的文章分類下以各 學習單元標題 建立一篇文章標題,如第一篇的 文章標題為 「 學習單元 1 : 資料庫的比較與第一步 」
(p.s. 本 教學 內容主要取材自溫瑞烘教授 教學網頁) 學習單元 1 :資料庫的比較與第一步 1. 請上網搜尋資料, 列表比較 (1) Access, (2) Oracle, (3) SQL Server, (4) MySQL, (5) PostgreSQL, (6) Informix, (7) DB2, (8) Xindice, (9) SQLite, (10) Google Fusion Tables
等資料庫, 比較面向至少包括 平台, 價格, 效能, 儲存方式, 語言支援等, 將結果貼到前述文章標題下 2. 請上網搜尋AppServ 或 XAMPP, 下載至D:/, 試行安裝,並執行MySQL, 將過程簡略紀錄於前述文章中 3. 請說明本教室中提供那些資料庫
學習單元 2 :設計一個簡單資料庫的工作 說明:
此單元目標如下:
1. 能說明Fields, Records, Tables
2. 指出資料庫的基本組成:Table, Query, Form, Report, Macro, Module
作業:
1. 資料庫中最重要的概念為:
2. 資料庫中的定義語言簡稱: ,用途為:
3. 資料庫中的查詢語言簡稱: ,用途為:
4. 資料庫中的控制語言簡稱: ,用途為:
5. 資料庫的通用查詢語言是:
6. (1) 新增資料表、(2) 定義資料欄位屬性、(3) 設定資料表索引、(4) 修改資料表
7. 利用資料表處理資料紀錄:(1) 新增及編修、(2) 瀏覽、(3) 排序、(4) 刪除
8. 說明資料表中的鍵:
(1) Primary Key :主鍵 ,用途為:
(2) Super Key : ,用途為:
(3) Candidate Key : ,用途為:
(4) Alternate Key : ,用途為:
(5) Foreign Key : ,用途為:
學習單元3:設計資料表
已經有兩個Table如下
CREATE TABLE stmd ( -- 學生基本資料表 depart_class char(6), -- 班級代碼 student_no char(9), -- 學號 student_name char(10), -- 姓名 birth_date date, -- 出生日期 primary key(student_no) ); 假設資料如下 164D11 9614D001 張1 1995-01-01 164D21 9614D002 張2 1995-02-01 164D31 9614D003 張3 1995-03-01 164D41 9614D004 張4 1995-04-01 164D31 9614D005 張5 1995-05-01 CREATE TABLE dept ( -- 班級代碼表 depart_class char(6), -- 班級代碼 depart_name char(20), --班級名稱 primary key(depart_class) ); 假設資料如下 164D11 日四技資管一甲 164D21 日四技資管二甲 164D31 日四技資管三甲 164D41 日四技資管四甲 利用欄位關聯取得資料 Select stmd.depart_class,dept.depart_class_name,stmd.student_no,stmd.student_name,stmd.birth_date from stmd,dept where stmd.depart_class=dept.depart_class; 結果 164D11 日四技資管一甲 9614D001 張1 1995-01-01 164D21 日四技資管二甲 9614D002 張2 1995-02-01 164D31 日四技資管三甲 9614D003 張3 1995-03-01 164D31 日四技資管三甲 9614D005 張5 1995-05-01 164D41 日四技資管四甲 9614D004 張4 1995-04-01 請再設計三個資料表,用來反應學生的選課資料,可能的三個資料表如下 科目代碼表 各班開課資料表 個人選課表 請將設計好的三個資料表寫在ePortfolio, 以作業為文章分類, 以設計資料表 (作業)為文章標題 期末上機考試將以此為架構並出題現場上機操作
學習單元4: SQL的SELECT敘述之一SELECT 1. -- 查詢目前時間 SELECT NOW(); 2. -- 查詢目前日期 SELECT CURRENT_DATE; 3. -- 查詢所有列(Row) SELECT * FROM stmd; 4. -- 查詢所有列(Row),僅列出5列 SELECT * FROM stmd LIMIT 5; 5. -- 查詢班級、學號 SELECT depart_class,student_no FROM stmd; 6. -- 查詢學號最大者 SELECT MAX(student_no) FROM stmd; 7. -- 查詢學號最小者 SELECT MIN(student_no) FROM stmd; 8. -- 查詢並由小到大排序 SELECT * FROM stmd ORDER BY student_no; 9. -- 查詢並由大到小排序 SELECT * FROM stmd ORDER BY student_no DESC; 10. -- 查詢加上條件 SELECT * FROM stmd WHERE student_no="10014D001"; 11. -- 查詢加上條件 SELECT * FROM stmd WHERE student_no>"10014D001"; 12. -- 查詢加上條件 SELECT * FROM stmd WHERE student_no<"10014D001"; 13. -- 查詢加上條件 SELECT * FROM stmd WHERE student_no>="10014D001"; 14. -- 查詢加上條件 SELECT * FROM stmd WHERE student_no<="10014D001"; 15. -- 查詢加上條件 SELECT * FROM stmd WHERE student_no<>"10014D001"; 16. -- 查詢加上條件 SELECT * FROM stmd WHERE student_no>="10014D001" AND student_no<="10014D010";
作業:利用所建的Table,在 HeidiSQL上操作前面16種SELECT 敘述,並加上下列
17. -- 查詢班級是 "164D21" 的所有紀錄 18. -- 查詢班級不是 "164D21" 的所有紀錄 19. -- 查詢班級是 "164D21" 的所有紀錄,按學號由小到大 20. -- 查詢班級不是 "164D21" 的所有紀錄按班級、學號由小到大 21. -- 查詢班級是 "164D21" 的所有紀錄,按學號由大到小 22. -- 查詢班級不是 "164D21" 的所有紀錄按班級、學號由大到小 23. -- 查詢學號是 "10014D001" 的所有紀錄 24. -- 查詢學號不是 "10014D001" 的所有紀錄按班級、學號由大到小 25. -- 查詢班級不是 "164D21" 的所有紀錄按班級、學號由小到大 26. -- 查詢班級是 "164D21" 的所有紀錄,按學號由大到小 27. -- 查詢班級不是 "164D21" 的所有紀錄按班級、學號由大到小 28. -- 查詢學號不是 "10014D001" 的所有紀錄,按學號、班級由小到大 29. -- 查詢學號不是 "10014D001" 的所有紀錄,按學號、班級由大到小 30. -- 查詢班級是"164D21",學號不是 "10014D001" 的所有紀錄,按學號、班級由小到大 31. -- 查詢學號界於 "10014D030" 到 "10014D060"的所有紀錄,按學號、班級由小到大 32. -- 查詢學號不界於 "10014D030" 到 "10014D060"的所有紀錄,按學號、班級由小到大
請注意,以上的每一個題目都必須有查詢結果,如果沒有結果,請更改stmd的內容, 將所建立的資料表內容、問題及執行結果發佈在ePortfolio上
學習單元5: MySQL 備份 回復 資料型態DROP DATABASE IF EXISTS mydb; -- 刪除資料庫 CREATE DATABASE mydb DEFAULT CHARACTER SET utf8; -- 建立資料庫 繁體中文 USE mydb; -- 使用資料庫
-- 由文字檔中建好大量資料後載入方法 1. 在命令模式下 LOAD DATA INFILE "C:/AppServ/www/stmd.txt" INTO TABLE stmd CHARACTER SET utf8 FIELDS TERMINATED BY ","; SELECT * FROM stmd; 2. 利用HeidiSQL 選擇資料表 stmd --> Tools --> Import CSV file --> Filename(選擇檔案) Encoding(選擇編碼utf8) Fields terminated by , Fields enclosed by Fields escape by Lines terminate by \r\n 按 Import! 鍵 -- 由資料表中匯出資料方法 SELECT * FROM stmd INTO OUTFILE "C:/AppServ/www/newstmd.txt"; -- 資料庫備份 (Backup) 1. 由HeidiSQL做資料庫備份 執行HeidiSQL、連接mydb、滑鼠只到mydb、按右鍵、Export database as SQL 選擇 Databases Drop Create Tables Drop Create Insert Output One big file Filename C:/AppServ/www/mydb.sql 2. 使用 mysqldump mysqldump --user=root --password=0000 mydb > "C:/AppServ/www/mydb.sql"
-- 資料庫回復 (Restore) 1. 先建立一個空的資料庫 mydb 2. 在命令模式下 mysql -u root -p mydb < "C:/AppServ/www/mydb.sql" 然後輸入密碼
MySQL 資料型態 INT、INT(10) -- 整數 FLOAT -- 小數 DATE -- 日期 YYYY-MM-DD TIME -- 時間 HH:MM:SS DATETIME -- 日期時間 YYYY-MM-DD HH:MM:SS CHAR(N) -- 固定長度字元 VARCHAR(N) -- 變動長度字元 TEXT -- 文字(65536) BLOB -- 二進位(儲存影像如照片)
作業: 照前述講義練習一遍之後,將stmd擴充,增加四個欄位 出生日期、行動電話、電子郵件,照片 以資管系為例建立資料,班級代碼 164D11(四技資管一甲)、164D12(四技資管一乙) 164D21(四技資管二甲)、164D22(四技資管二乙) 164D31(四技資管三甲)、164D32(四技資管三乙) 164D41(四技資管四甲)、164D42(四技資管四乙) 建立資料每班至少5筆,除照片欄外,每欄都必須 有資料
學習單元6:期末考模擬考題兼作業答案
已有兩個Table如下
CREATE TABLE stmd ( -- 學生基本資料表 depart_class char(6), -- 班級代碼 student_no char(9), -- 學號 student_name char(10), -- 姓名 birth_date date, -- 出生日期 primary key(student_no) );
假設資料如下
depart_class student_no student_name birth_date 164D11 9614D001 張1 1995-01-01 164D21 9614D002 張2 1995-02-01 164D31 9614D003 張3 1995-03-01 164D41 9614D004 張4 1995-04-01 164D31 9614D005 張5 1995-05-01
CREATE TABLE dept ( -- 班級代碼表 depart_class char(6), -- 班級代碼 depart_name char(20), -- 班級名稱 primary key(depart_class) );
假設資料如下
depart_class depart_name 164D11 日四技資管一甲 164D21 日四技資管二甲 164D31 日四技資管三甲 164D41 日四技資管四甲
CREATE TABLE csno ( -- 科目代碼表 code char(5), -- 科目代碼 name char(24), -- 科目名稱 primary key(code)
);
假設資料如下
code name 50001 國文 50002 英文 50003 物理 50004 微積分
CREATE TABLE dtime ( -- 各班開課資料表
depart_class char(6), -- 開課班級
code char(5), -- 科目代碼 primary key(depart_class,code)
);
假設資料如下
depart_class code 164D11 50001 164D11 50002 164D21 50003 164D21 50004
CREATE TABLE seld ( -- 個人選課資料表
student_no char(9), -- 學號
depart_class char(6), -- 開課班級
code char(5), -- 科目代碼 primary key(student_no,depart_class,code)
);
假設資料如下
student_no depart_class code 9614D001 164D11 50001 9614D001 164D11 50002 9614D001 164D21 50003 9614D001 164D21 50004 9614D002 164D21 50004 9614D003 164D11 50002 9614D003 164D21 50003 9614D004 164D21 50004 9614D004 164D11 50002 9614D004 164D21 50003
根據前面的資料表回答下列問題
一、查詢學生基本資料的所有記錄的SQL命令 (10%)
二、查詢stmd與dept使得輸出 班級代碼 班級名稱 學號 姓名 出生日期 並寫出結果(10%) (利用stmd.depart_class 與dept.depart_class作關聯)
三、查詢dtime與csno使得輸出 開課班級 班級名稱 科目代碼 科目名稱 並寫出結果(10%) (利用dtime.depart_class 與dept.depart_class作關聯) 及 (利用dtime.code 與csno.code作關聯)
四、查詢seld、dtime、csno、dept 使得輸出
學號 開課班級 班級名稱 科目代碼 科目名稱 並寫出結果(10%)
五、查詢seld、dtime、csno、dept 使得輸出
學號 開課班級 班級名稱 科目代碼 科目名稱 並寫出結果
條件為學號中有 4D者(10%)
六、寫一PHP程式完成下述功能 (50%)
班級名稱 :[ ] 下拉選單,第一個為空值或空白,第二個以後由dept取得資料
學 號 : [ ] Text 輸入框 姓 名:[ ] Text 輸入框
出生日期 :[ ] Text 輸入框
[新增] [查詢]
查詢欄位包括所有欄位 結果顯示 班級代碼 班級名稱 學號 姓名 出生日期
學習單元6: 讀懂 SQL Cheat Sheet, 並建立 test 資料庫後,練習SQL 指令請在 105/12/31 前撰寫作業, 並 post 到個人ePortfolio