WeHelp
MySQL 是一套穩定、高效能的資料庫管理系統,是全球網頁開發與應用程式最常搭配的核心工具之一。
  1. MySQL 下載安裝
  2. 啟動、連線測試
  3. Database 管理
  4. SQL 資料表管理
  5. SQL 資料管理
  6. SQL 資料取得、篩選
  7. 欄位的資料型態
  8. 資料交易簡介、操作
  9. 使用者管理
  10. Python 程式連線
  11. Node.js 程式連線
  12. PHP 程式連線
SQL 資料取得、篩選
在 MySQL 中,主要使用 `SELECT` 指令取得資料,搭配 `WHERE` 篩選符合條件的資料。 ## 1. 取得資料 ### 取得所有欄位 ```sql SELECT * FROM users; ``` ### 取得指定欄位 ```sql SELECT id, name, email FROM users; ``` 建議只查詢需要的欄位,不要在正式程式中一律使用 `SELECT *`。 ### 使用別名 ```sql SELECT name AS 使用者名稱, email AS 電子郵件 FROM users; ``` --- ## 2. 使用 `WHERE` 篩選資料 ### 等於 ```sql SELECT * FROM users WHERE status = 'active'; ``` ### 數值比較 ```sql SELECT * FROM products WHERE price > 1000; ``` 常見比較運算子: | 運算子 | 意義 | |---|---| | `=` | 等於 | | `<>` 或 `!=` | 不等於 | | `>` | 大於 | | `<` | 小於 | | `>=` | 大於或等於 | | `<=` | 小於或等於 | --- ## 3. 多個條件 ### `AND`:同時符合 ```sql SELECT * FROM products WHERE price >= 100 AND stock > 0; ``` ### `OR`:符合其中一個 ```sql SELECT * FROM users WHERE city = '台北' OR city = '新北'; ``` ### 使用括號控制邏輯 ```sql SELECT * FROM users WHERE (city = '台北' OR city = '新北') AND status = 'active'; ``` --- ## 4. 使用 `IN` 當同一欄位有多個可能值時,可以使用 `IN`: ```sql SELECT * FROM users WHERE city IN ('台北', '新北', '桃園'); ``` 等同於: ```sql WHERE city = '台北' OR city = '新北' OR city = '桃園' ``` --- ## 5. 使用 `BETWEEN` 查詢某個範圍: ```sql SELECT * FROM products WHERE price BETWEEN 100 AND 500; ``` 日期範圍範例: ```sql SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'; ``` 注意:`BETWEEN` 包含起點與終點。 --- ## 6. 使用 `LIKE` 模糊搜尋 ### 找出名稱以「王」開頭的資料 ```sql SELECT * FROM users WHERE name LIKE '王%'; ``` ### 找出名稱包含「明」的資料 ```sql SELECT * FROM users WHERE name LIKE '%明%'; ``` ### 常用萬用字元 | 符號 | 意義 | |---|---| | `%` | 任意長度的字串 | | `_` | 任意一個字元 | 例如: ```sql SELECT * FROM users WHERE name LIKE '_明'; ``` 代表兩個字元,且第二個字元是「明」。 --- ## 7. 判斷 `NULL` 不能使用: ```sql WHERE email = NULL ``` 應使用 `IS NULL` 或 `IS NOT NULL`: ```sql SELECT * FROM users WHERE phone IS NULL; ``` ```sql SELECT * FROM users WHERE phone IS NOT NULL; ``` --- ## 8. 排序資料:`ORDER BY` ### 由小到大或由舊到新 ```sql SELECT * FROM products ORDER BY price ASC; ``` ### 由大到小或由新到舊 ```sql SELECT * FROM products ORDER BY price DESC; ``` 也可以依多個欄位排序: ```sql SELECT * FROM products ORDER BY category ASC, price DESC; ``` --- ## 9. 限制筆數:`LIMIT` 取得前 10 筆: ```sql SELECT * FROM users LIMIT 10; ``` 分頁查詢: ```sql SELECT * FROM users ORDER BY id LIMIT 20 OFFSET 40; ``` 表示跳過 40 筆後,取得 20 筆資料。 也可以寫成: ```sql LIMIT 40, 20; ``` --- ## 10. 去除重複資料:`DISTINCT` ```sql SELECT DISTINCT city FROM users; ``` 只會列出不重複的城市。 --- ## 11. 統計資料 ### 計算筆數 ```sql SELECT COUNT(*) AS total FROM users; ``` ### 計算平均值、最大值、最小值 ```sql SELECT AVG(price) AS average_price, MAX(price) AS highest_price, MIN(price) AS lowest_price FROM products; ``` ### 分組統計:`GROUP BY` ```sql SELECT city, COUNT(*) AS user_count FROM users GROUP BY city; ``` ### 篩選分組結果:`HAVING` ```sql SELECT city, COUNT(*) AS user_count FROM users GROUP BY city HAVING COUNT(*) >= 10; ``` `WHERE` 是分組前篩選,`HAVING` 是分組後篩選。 --- ## 12. 連接多個資料表:`JOIN` 假設: - `orders.user_id` 對應 `users.id` ```sql SELECT orders.id AS order_id, users.name, orders.amount FROM orders JOIN users ON orders.user_id = users.id; ``` 常見的 `JOIN`: ```sql -- 只取得兩邊都有對應資料的紀錄 INNER JOIN -- 即使右表沒有對應資料,也保留左表資料 LEFT JOIN -- 即使左表沒有對應資料,也保留右表資料 RIGHT JOIN ``` 例如查詢所有使用者,即使他們沒有訂單: ```sql SELECT users.id, users.name, orders.id AS order_id FROM users LEFT JOIN orders ON orders.user_id = users.id; ``` --- ## 13. 綜合範例 查詢目前啟用、位於台北、名稱包含「陳」的使用者,依註冊日期新到舊排列,最多顯示 20 筆: ```sql SELECT id, name, email, created_at FROM users WHERE status = 'active' AND city = '台北' AND name LIKE '%陳%' ORDER BY created_at DESC LIMIT 20; ``` 一般的查詢結構順序如下: ```sql SELECT 欄位 FROM 資料表 JOIN 其他資料表 ON 連接條件 WHERE 篩選條件 GROUP BY 分組欄位 HAVING 分組篩選條件 ORDER BY 排序欄位 LIMIT 筆數; ``` 在應用程式中,使用者輸入的條件應透過「參數化查詢」傳入,不要直接串接 SQL 字串,以避免 SQL Injection。
相關學習地圖、教學課程
Python 後端工程、資料庫
從 0 開始,成為後端工程師的學習路徑。