# 如何使用MySQL查詢語句
## 引言
MySQL作為最流行的開源關系型數據庫管理系統,被廣泛應用于Web開發、數據分析等領域。掌握MySQL查詢語句是數據庫操作的基礎,本文將系統介紹SELECT查詢、條件過濾、排序分組、多表連接等核心語法,幫助讀者從入門到熟練使用MySQL進行數據檢索。
---
## 一、基礎SELECT查詢
### 1.1 基本語法結構
```sql
SELECT 列名1, 列名2,...
FROM 表名
[WHERE 條件]
[ORDER BY 排序字段]
[LIMIT 行數];
-- 查詢employees表所有數據
SELECT * FROM employees;
-- 只查詢員工姓名和工資
SELECT first_name, salary FROM employees;
SELECT
first_name AS '名',
last_name AS '姓',
salary*12 AS '年薪'
FROM employees;
運算符 | 說明 | 示例 |
---|---|---|
= | 等于 | salary = 5000 |
> | 大于 | hire_date > ‘2020-01-01’ |
<> | 不等于 | department_id <> 10 |
BETWEEN | 范圍匹配 | salary BETWEEN 4000 AND 6000 |
-- 查詢工資超過10000的員工
SELECT * FROM employees
WHERE salary > 10000;
-- AND示例:查詢部門10且工資>5000的員工
SELECT * FROM employees
WHERE department_id = 10 AND salary > 5000;
-- OR示例:查詢部門10或20的員工
SELECT * FROM employees
WHERE department_id = 10 OR department_id = 20;
-- NOT示例:查詢不在部門10的員工
SELECT * FROM employees
WHERE NOT department_id = 10;
-- 查詢部門號為10,20,30的員工
SELECT * FROM employees
WHERE department_id IN (10, 20, 30);
-- %表示任意多個字符
SELECT * FROM employees
WHERE first_name LIKE 'J%'; -- 以J開頭的名字
-- _表示單個字符
SELECT * FROM employees
WHERE phone_number LIKE '515.___.____'; -- 匹配515開頭的電話
-- 按工資降序排序
SELECT * FROM employees
ORDER BY salary DESC;
-- 多列排序:先按部門升序,同部門按工資降序
SELECT * FROM employees
ORDER BY department_id ASC, salary DESC;
-- 查詢前5條記錄
SELECT * FROM employees
LIMIT 5;
-- 分頁查詢(每頁10條,第3頁)
SELECT * FROM employees
LIMIT 20, 10; -- 偏移量20,取10條
函數 | 說明 |
---|---|
COUNT() | 計數 |
SUM() | 求和 |
AVG() | 平均值 |
MAX() | 最大值 |
MIN() | 最小值 |
GROUP_CONCAT() | 連接字符串 |
-- 計算員工總數
SELECT COUNT(*) FROM employees;
-- 計算平均工資
SELECT AVG(salary) FROM employees;
-- 按部門統計平均工資
SELECT
department_id,
AVG(salary) AS avg_salary,
COUNT(*) AS emp_count
FROM employees
GROUP BY department_id;
-- 查詢平均工資>8000的部門
SELECT
department_id,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING avg_salary > 8000;
-- 查詢員工及其部門信息
SELECT
e.first_name,
e.salary,
d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
-- 查詢所有員工(包括沒有部門的員工)
SELECT
e.first_name,
d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id;
-- 查詢員工及其經理信息
SELECT
e1.first_name AS employee,
e2.first_name AS manager
FROM employees e1
LEFT JOIN employees e2
ON e1.manager_id = e2.employee_id;
-- 查詢工資高于平均工資的員工
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- 查詢各部門工資排名
SELECT
department_id,
first_name,
salary,
salary_rank
FROM (
SELECT
department_id,
first_name,
salary,
RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS salary_rank
FROM employees
) ranked_employees
WHERE salary_rank <= 3;
-- 查詢有下屬的員工
SELECT * FROM employees e1
WHERE EXISTS (
SELECT 1 FROM employees e2
WHERE e2.manager_id = e1.employee_id
);
-- 字符串拼接
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
-- 大小寫轉換
SELECT UPPER(first_name), LOWER(last_name) FROM employees;
-- 計算員工工齡
SELECT
first_name,
DATEDIFF(CURRENT_DATE(), hire_date)/365 AS years_employed
FROM employees;
-- CASE WHEN條件判斷
SELECT
first_name,
salary,
CASE
WHEN salary > 10000 THEN '高薪'
WHEN salary > 5000 THEN '中等'
ELSE '一般'
END AS salary_level
FROM employees;
-- 使用EXPLN分析查詢
EXPLN SELECT * FROM employees WHERE department_id = 10;
本文系統介紹了MySQL查詢語句的核心語法和使用技巧。實際應用中,需要根據業務需求靈活組合各種查詢方式。建議讀者通過實踐練習掌握這些技術,并持續學習窗口函數、CTE等高級特性以應對更復雜的數據處理場景。
注意:所有示例基于MySQL 8.0語法,部分函數在舊版本中可能不支持 “`
(全文約2700字,實際字數可能因格式略有差異)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。