取得、篩選、排序資料
以下用一個簡單的「員工資料表」示範 SQL 如何取得、篩選與排序資料。
## 1. 建立資料表
```sql
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
salary INT,
hire_date DATE
);
```
## 2. 新增範例資料
```sql
INSERT INTO employees
(employee_id, name, department, salary, hire_date)
VALUES
(1, '王小明', '資訊部', 55000, '2022-03-15'),
(2, '李小華', '人事部', 48000, '2021-07-01'),
(3, '陳美玲', '資訊部', 62000, '2020-11-20'),
(4, '林志偉', '業務部', 50000, '2023-01-10'),
(5, '張雅婷', '業務部', 58000, '2022-09-05');
```
資料表內容如下:
| employee_id | name | department | salary | hire_date |
|---:|---|---|---:|---|
| 1 | 王小明 | 資訊部 | 55000 | 2022-03-15 |
| 2 | 李小華 | 人事部 | 48000 | 2021-07-01 |
| 3 | 陳美玲 | 資訊部 | 62000 | 2020-11-20 |
| 4 | 林志偉 | 業務部 | 50000 | 2023-01-10 |
| 5 | 張雅婷 | 業務部 | 58000 | 2022-09-05 |
---
# 一、取得資料:`SELECT`
## 取得所有欄位
```sql
SELECT *
FROM employees;
```
`*` 代表選取所有欄位。
## 取得指定欄位
```sql
SELECT name, department, salary
FROM employees;
```
只顯示員工姓名、部門與薪資。
## 使用別名
```sql
SELECT
name AS 員工姓名,
salary AS 薪資
FROM employees;
```
`AS` 可以替欄位設定顯示名稱。
---
# 二、篩選資料:`WHERE`
## 篩選特定部門
```sql
SELECT *
FROM employees
WHERE department = '資訊部';
```
取得部門為「資訊部」的員工。
## 篩選薪資大於 50,000 的員工
```sql
SELECT name, salary
FROM employees
WHERE salary > 50000;
```
常用比較運算子:
| 運算子 | 意義 |
|---|---|
| `=` | 等於 |
| `<>` 或 `!=` | 不等於 |
| `>` | 大於 |
| `<` | 小於 |
| `>=` | 大於或等於 |
| `<=` | 小於或等於 |
## 使用 `AND` 同時符合多個條件
```sql
SELECT *
FROM employees
WHERE department = '業務部'
AND salary >= 55000;
```
找出部門為業務部,且薪資至少 55,000 的員工。
## 使用 `OR` 符合其中一個條件
```sql
SELECT *
FROM employees
WHERE department = '資訊部'
OR department = '業務部';
```
## 使用 `IN`
```sql
SELECT *
FROM employees
WHERE department IN ('資訊部', '業務部');
```
這與前面的 `OR` 條件類似,適合篩選多個固定值。
## 使用 `LIKE` 模糊搜尋
```sql
SELECT *
FROM employees
WHERE name LIKE '陳%';
```
`%` 代表任意長度的文字,因此會找出姓「陳」的員工。
---
# 三、排序資料:`ORDER BY`
## 依薪資由小到大排序
```sql
SELECT name, salary
FROM employees
ORDER BY salary ASC;
```
`ASC` 代表升冪排序,也是預設值。
## 依薪資由大到小排序
```sql
SELECT name, salary
FROM employees
ORDER BY salary DESC;
```
`DESC` 代表降冪排序。
## 先依部門,再依薪資排序
```sql
SELECT name, department, salary
FROM employees
ORDER BY department ASC, salary DESC;
```
排序規則為:
1. 部門按照字母或資料庫排序規則排列
2. 同一部門內,再依薪資由高到低排列
---
# 四、綜合使用
```sql
SELECT name, department, salary
FROM employees
WHERE salary >= 50000
ORDER BY salary DESC;
```
這段 SQL 的意思是:
1. 從 `employees` 資料表取得資料
2. 只保留薪資至少 50,000 的員工
3. 依薪資由高到低排序
基本 SQL 查詢結構通常如下:
```sql
SELECT 欄位
FROM 資料表
WHERE 篩選條件
ORDER BY 排序欄位 ASC 或 DESC;
```
相關學習地圖、教學課程
Python 資料工程
Python 後端工程、資料庫