<!-- wp:paragraph -->
<p>資料庫基本操作<br>定義:資料定義語言(Data Definition Language, DDL)<br>功能:用來定義資料庫、資料表(含欄位名稱、資料型態及設置完整性限制)<br><br>建立資料庫:<br>Create DataBase [IF NOT EXISTS] DataBase_Name<br>修改資料庫:<br>Alter DataBase DataBase_Name<br>[CHARACTER SET 字元及名稱]<br>[COLLATE Collation 名稱]<br>刪除資料庫:<br>Drop DataBase [IF EXISTS] DataBase_Name </p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>建立資料表:<br>Create Table Table_Name<br>( 欄位 {資料型態|定義域} [NULL|NOT NULL] [Default] [定義整合限制],<br> ......<br> Primary Key(欄位集合), ← 當主鍵,不可為空值<br> Foreign Key(oreign Key (欄位集合) Reference 基本表 (屬性集合), ← 當外鍵<br> Unique (欄位集合), ← 當候選鍵,用來定義某一欄位具唯一的索引值,可為空值<br> [ON DELETE],<br> [ON UPDATE]<br>)<br>符號說明:<br>{|} → 大括號內的項目為必要項,可以擇一<br>[] → 中括號內的項目是非必要項,依實際情況來選擇<br>NULL|NOT NULL → 可為空值|不可為空值<br>Default → 設置欄位預設值<br>ON UPDATE/ON DELETE → 當資料表的資料更新或刪除時,所關聯的資料表的紀錄也會一併被異動</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>修改資料表:<br>ALTER TABLE Table_Name<br>新增欄位:<br>ADD 欄位名稱 {資歷型態|定義域} [NULL|NOT NULL] [Default]<br>修改欄位:<br> Modify 欄位名稱 {資歷型態|定義域} [NULL|NOT NULL] [Default]<br>刪除欄位:<br> Drop 欄位名稱</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>建立資料表順序:父關聯表→子關聯表<br>刪除關聯資料表:子關聯表→父關聯表</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>定義:資料操作語言(Data Manipulation Language, DML)<br>功能:對資料表紀錄的新增、修改、刪除及查詢等功能</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>新增紀錄:<br>INSERT INTO Table_Name <欄位串列> VALUES (<欄位值串列> | <SELECT 指令>)<br>例:<br>USE test_db;<br>INSERT INTO 學生表 SELECT * FROM 學生表_OLD;<br>將學生表_OLD所查詢的紀錄新增至學生表<br><br>修改紀錄:<br>UPDATE Table_Name SET {<欄位名稱1>=<欄位值1>, ..., <欄位名稱n>=<欄位值n>} [WHERE <條件子句>]<br>例:<br>USE test_db;<br>UPDATE 學生表 SET 電話='222222' WHERE WHERE 電話 IS NULL AND 學號='S002'<br>將尚未填入電話號碼的S002學號設定為'222222'<br><br>刪除紀錄:<br>DELETE FROM Table_Name [WHERE <條件式>];<br>例:<br>USE test_db;<br>DELETE FROM `學生表_OLD` WHERE 姓名='十全';<br>將學生表_OLD中的十全學生紀錄刪掉<br><br>查詢紀錄:<br>SELECT [DISTINCT] <欄位串列> FROM (資料表名稱 {<別名>}|JOIN 資料表名稱) [WHERE <條件式>]<br>[GROUP BY <群組欄位>]<br>[HAVING <群組條件>]<br>[ORDER BY <欄位> [ASC|DESC]]<br>[LIMIT 限制顯示筆數]<br>ASC ← 由小至大<br>DESC ← 由大至小<br>例:<br>USE test_db;<br>SELECT * FROM 學生表 WHERE 性別='女';<br>找出學生表中,性別為女的學生紀錄<br><br>USE test_DB;<br>SELECT 課名 AS 課程名稱, 學分數 FROM 課程表;<br>將課名欄位設定別名為課程名稱(AS只是暫時性的變更列名,並不會把原本的名稱覆蓋過去)</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>定義:資料控制語言(Data Control Language, DCL)<br>功能:控制使用者對資料庫內容的存取權利</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>取得現有資料庫使用者帳號的權限:<br>GRANT 權限 ON Table_Name TO 使用者<br>權限可分為四種:INSERT, UPDATE, DELETE, SELECT<br>例:<br>GRANT SELECT, INSERT ON 學生表 TO USER1;<br>對USER1提供SELECT, INSERT對客戶資料表的使用者權限功能<br><br>GRANT SELECT TO 學生表 TO PUBLIC;<br>對所有使用者提供SELECT功能權限<br><br>取消資料庫使用者已取得的權限:<br>REVOKE 權限 ON 資料庫名稱 FROM 使用者<br>例:<br>REVOKE INSERT ON 學生表 FROM UER1;<br>移除USER1對學生表INSERT的權限</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>比較運算子;<br>= → 等於<br><> → 不等於<br>< → 小於<br><= → 小於等於<br>> → 大於<br>>= → 大於等於<br><br>邏輯比較運算子:<br>AND → 且<br>OR → 或<br>NOT → 反<br>IS NULL → 為空值 例:SELECT * FROM 選課表 WHERE 成績 IS NULL;<br><br>模糊條件與範圍:<br>LIKE:模糊相似條件 %:代表0個或1個以上的任意字元 _:代表單一個數的任意字元 例:WHERE 系所 LIKE '資管%';<br>IN:集合條件 只要符合其中一個條件,將被選取 例:WHERE 課號 IN ('C001', 'C002');<br>BETWEEN.....AND:範圍條件 等同於:最小值>= AND <=最大值 WHERE 成績 BETWEEN 60 AND 80;<br><br>算數運算子:<br>+ : 加<br>- : 減<br>* : 乘<br>/ : 除<br>% : 取餘數<br>例:WHERE 成績*1.2<70;</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>聚合函數:統計資料表中數值資料的最大值、最小值、平均值及合計值<br>COUNT(*) : 計算個數<br>例:SELECT COUNT(*) AS 全班人數 FROM 學生表 在學生表中查詢目前選修課程的全班人數<br>COUNT(欄位名稱):計算欄位名稱不具NULL質料的總數<br>例:SELECT COUNT(成績) AS 有成績總筆數 FROM 選課表;<br>在選課表中查詢有成績而不為空值的總筆數<br>AVG : 計算平均值<br>例:SELECT AVG(成績) AS 資料庫平均成績 FROM 選課表 WHERE 課號='C005';<br>在選課表中查詢有選修課號為'C005'的全班平均值<br>SUM : 計算總和<br>例:SELECT SUM(成績) AS 資料庫總成績 FROM 選課表 WHERE 課號='C005';<br>在選課表中查詢有選修課號為'C005'的全班總成績 <br>MAX : 計算最大值<br>例:SELECT MAX(成績) AS 資料庫最高分 FROM 選課表 WHERE 課號='C005';<br>在選課表中查詢有選修課號為'C005'的全班最高分<br>MIN : 計算最小值<br>例:SELECT MIN(成績) AS 資料庫最高分 FROM 選課表 WHERE 課號='C005';<br>在選課表中查詢有選修課號為'C005'的全班最低分</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>排序及排成績:<br>ORDER BY 成績 ASC:遞增排序,由小至大<br>例:SELECT 學號, 課號, 成績 FROM 選課表 ORDER BY 成績 ASC;<br>ORDER BY 成績 DESC:遞減排序,由大至小<br>例:SELECT 學號, 課號, 成績 FROM 選課表 ORDER BY 成績 DESC;<br><br>複雜排序:指定一個欄位以上來做排序,先以第一個欄位優先,再由第二個欄位進行排序,以此類推<br>例:SELECT * FROM 選課表 ORDER BY 學號, 成績;<br>先由學號進行排序,再由成績做排序<br><br>限制顯示筆數:<br>LIMIT:資料記錄在排序之後,取前N筆資料<br>例:SELECT * FROM 選課表 WHERE 課號='C005' ORDER BY 成績 DESC LIMIT 2<br>在選課表中查詢有選課號'C005'的同學成績前兩名的成績</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>群組化:<br>GROUP BY:將某些特定欄位的值相同紀錄全部組合起來,以進行群組化,接著可以在這個群組內求出各種統計分析<br>GROUP BY 欄位1, 欄位2, ..., 欄位N [HAVING 條件式]<br>1.GROUP BY 可單獨存在,將數個欄位組合起來,以做為每次動作的依據<br>2.[HAVING 條件式] 將數個欄位中以有條件的組合。不可單獨存在<br>3.WHERE 與 HAVING之差別<br> WHERE HAVING<br>執行順序 GROUP BY 之前 GROUP BY 之後<br>聚合函數 不能使用聚合函數 可以使用<br><br>SELECT 欄位1, 欄位2, 聚合函數運算 FROM 資料表 WHERE 過濾條件式 GROUP BY 欄位1, 欄位2;<br>例:SELECT 學號, COUNT(*) AS 選科目數 FROM 選課表 GROUP BY 學號;<br>在選課表中查詢每一位同學各選幾門科目<br><br>例:SELECT 學號, AVG(成績) AS 平均成績 FROM FROM 選課表 GROUP BY 學號 HAVING AVG(成績) >= 70;<br>在選課表中計算所修之課目的平均成績,大於70者顯示出來</p>
<!-- /wp:paragraph -->