---
# System prepended metadata

title: Untitled

---

<!-- 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 &lt;欄位串列&gt; VALUES (&lt;欄位值串列&gt; | &lt;SELECT 指令&gt;)<br>例：<br>USE test_db;<br>INSERT INTO 學生表 SELECT * FROM 學生表_OLD;<br>將學生表_OLD所查詢的紀錄新增至學生表<br><br>修改紀錄：<br>UPDATE Table_Name SET {&lt;欄位名稱1&gt;=&lt;欄位值1&gt;, ...,  &lt;欄位名稱n&gt;=&lt;欄位值n&gt;} [WHERE &lt;條件子句&gt;]<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 &lt;條件式&gt;];<br>例：<br>USE test_db;<br>DELETE FROM `學生表_OLD` WHERE 姓名='十全';<br>將學生表_OLD中的十全學生紀錄刪掉<br><br>查詢紀錄：<br>SELECT [DISTINCT] &lt;欄位串列&gt; FROM (資料表名稱 {&lt;別名&gt;}|JOIN 資料表名稱) [WHERE &lt;條件式&gt;]<br>[GROUP BY &lt;群組欄位&gt;]<br>[HAVING &lt;群組條件&gt;]<br>[ORDER BY &lt;欄位&gt; [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>&lt;&gt; → 不等於<br>&lt; → 小於<br>&lt;= → 小於等於<br>&gt; → 大於<br>&gt;= → 大於等於<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：範圍條件   等同於：最小值&gt;= AND &lt;=最大值                          WHERE 成績 BETWEEN 60 AND 80;<br><br>算數運算子：<br>+ ： 加<br>- ： 減<br>* ： 乘<br>/ ： 除<br>% ： 取餘數<br>例：WHERE 成績*1.2&lt;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(成績) &gt;= 70;<br>在選課表中計算所修之課目的平均成績，大於70者顯示出來</p>
<!-- /wp:paragraph -->