---
# System prepended metadata

title: 3. 使用你的MySQL資料庫

---

# 3. 使用你的MySQL資料庫
{%hackmd QnyEFBdERZebn4iQDXNPnA %}
## 本章重點：學習MySQL如何插入、刪除、更新、查詢資料(CRUD)
## 01 SQL是什麼？
- Structured Query Language
- 結構化查詢語言
## 02 將資料插入資料庫
- INSERT INTO table [columns ...] VALUE (values ...) 
    ```sql=
    INSERT INTO Customers VALUESl
    (NULL, 'Julie Smith', '25 Oak Street', 'Airport West');
    ```
## 03 取出資料
- SELECT columns FROM tables;
    ```sql=
    SELECT * 
    FROM Order_Items;
    ```
### 搭配WHERE，取出特定條件
- WHERE   
   ```sql=
    SELECT *
    FROM Orders
    WHERE CustomerID = 3;
    ```
- WHERE 子句中實用的比較運算子
    ![](https://i.imgur.com/J0h1o9T.jpg)

### 從多個資料表取出資料
- 簡單雙表連結
    ```sql=
    SELECT Orders.OrderID, Orders.Amount, Orders.Date
    FROM Customers, Orders
    WHERE Customers.Name = 'Julie Smith' and Customer.CustomerID = Orders.CustomerID;
    
    --Customer.CustomerID = Orders.CustomerID是一個連結條件
    -- 使用句點來釐清特定欄位來自哪張表格
    ```
- 連結超過兩個資料表
    - 使用連結條件連結每一對資料表
    - 每對資料表都需要使用一個連結條件來連結，因此其連結數量會比想要連結的資料表總數**少一**
- 尋找不匹配的資料列(e.g.從未下過訂單的客戶)
    - 左連結（LEFT JOIN...ON）
    - 右連結（RIGHT JOIN ...ON）
- 使用其他的資料表名稱：別名
    - 關鍵字：AS
- 連結摘要 
    ![](https://i.imgur.com/N4IaHea.jpg)
- 顯示的順序？
    - ORDER BY
        - DESC(逆向排列)
- 分組與總匯
    - 作用在Column
        - AVG()
        - COUNT()
        - MIN()
        - MAX()
        - STD()
            - 標準差
        - STDDEV()
            - 同STD()
        - SUM()
    - 注意：若使用GROUP BY。唯一會出現在SELECT子句的東西是總匯函式與GROUP BY的欄位名稱。若想使用GROUP BY的欄位，就必須把它列在SELECT子句裡。
    ```sql=
    SELECT CustomerID, AVG(Amount)
    FROM Orders
    GROUP BY CustomerID
    HAVING AVG(Amount) > 50;
    ```
- 使用HAVING來測試總匯的結果
    - 與WHERE的差異。總匯只能用HAVING
- 使用LIMIT回傳限定數量的列
    - LIMIT第一個參數 => 初始的資料列
    - LIMIT第一個參數 => 資料個數
        - e.g. LIMIT 2, 3 （從輸出的第2列開始，回傳3列）
- 使用子查詢指令
## 04 更新資料庫內的紀錄
- Update    
    ```sql=
    UPDATE tablename SET columns
    ```
## 05 建立資料表後修改他
- 更改資料表的結構
    ```sql= 
    ALTER TABLE tablename
    ```
## 06 卸除 v.s 刪除
- 卸除
    - 刪除資料(data)
    - 刪除資料表(schema)
- 刪除
    - 刪除資料本身 
## 07 刪除資料庫的紀錄
- 刪除資料庫的資料列
    ```sql= 
    DELETE FROM table
    ```
## 08 卸除資料表
- 移除資料表
    ```sql=
    DROP TABLE table;
    ```
## 09 卸除整個資料庫
- 要非常小心地使用這個函式    
    ```sql=
    DROP DATABASE database;
    ```