溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用MySQL查詢語句

發布時間:2021-10-09 17:51:31 來源:億速云 閱讀:200 作者:iii 欄目:數據庫
# 如何使用MySQL查詢語句

## 引言

MySQL作為最流行的開源關系型數據庫管理系統,被廣泛應用于Web開發、數據分析等領域。掌握MySQL查詢語句是數據庫操作的基礎,本文將系統介紹SELECT查詢、條件過濾、排序分組、多表連接等核心語法,幫助讀者從入門到熟練使用MySQL進行數據檢索。

---

## 一、基礎SELECT查詢

### 1.1 基本語法結構
```sql
SELECT 列名1, 列名2,... 
FROM 表名
[WHERE 條件]
[ORDER BY 排序字段]
[LIMIT 行數];

1.2 查詢所有列

-- 查詢employees表所有數據
SELECT * FROM employees;

1.3 查詢特定列

-- 只查詢員工姓名和工資
SELECT first_name, salary FROM employees;

1.4 使用列別名

SELECT 
    first_name AS '名',
    last_name AS '姓',
    salary*12 AS '年薪'
FROM employees;

二、條件查詢(WHERE子句)

2.1 比較運算符

運算符 說明 示例
= 等于 salary = 5000
> 大于 hire_date > ‘2020-01-01’
<> 不等于 department_id <> 10
BETWEEN 范圍匹配 salary BETWEEN 4000 AND 6000
-- 查詢工資超過10000的員工
SELECT * FROM employees 
WHERE salary > 10000;

2.2 邏輯運算符

-- 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;

2.3 IN運算符

-- 查詢部門號為10,20,30的員工
SELECT * FROM employees
WHERE department_id IN (10, 20, 30);

2.4 LIKE模糊查詢

-- %表示任意多個字符
SELECT * FROM employees 
WHERE first_name LIKE 'J%';  -- 以J開頭的名字

-- _表示單個字符
SELECT * FROM employees
WHERE phone_number LIKE '515.___.____';  -- 匹配515開頭的電話

三、排序與分頁

3.1 ORDER BY排序

-- 按工資降序排序
SELECT * FROM employees
ORDER BY salary DESC;

-- 多列排序:先按部門升序,同部門按工資降序
SELECT * FROM employees
ORDER BY department_id ASC, salary DESC;

3.2 LIMIT分頁

-- 查詢前5條記錄
SELECT * FROM employees
LIMIT 5;

-- 分頁查詢(每頁10條,第3頁)
SELECT * FROM employees
LIMIT 20, 10;  -- 偏移量20,取10條

四、聚合函數與分組

4.1 常用聚合函數

函數 說明
COUNT() 計數
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
GROUP_CONCAT() 連接字符串
-- 計算員工總數
SELECT COUNT(*) FROM employees;

-- 計算平均工資
SELECT AVG(salary) FROM employees;

4.2 GROUP BY分組

-- 按部門統計平均工資
SELECT 
    department_id,
    AVG(salary) AS avg_salary,
    COUNT(*) AS emp_count
FROM employees
GROUP BY department_id;

4.3 HAVING過濾分組

-- 查詢平均工資>8000的部門
SELECT 
    department_id,
    AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING avg_salary > 8000;

五、多表連接查詢

5.1 內連接(INNER JOIN)

-- 查詢員工及其部門信息
SELECT 
    e.first_name,
    e.salary,
    d.department_name
FROM employees e
INNER JOIN departments d
    ON e.department_id = d.department_id;

5.2 左外連接(LEFT JOIN)

-- 查詢所有員工(包括沒有部門的員工)
SELECT 
    e.first_name,
    d.department_name
FROM employees e
LEFT JOIN departments d
    ON e.department_id = d.department_id;

5.3 自連接

-- 查詢員工及其經理信息
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;

六、子查詢

6.1 WHERE子句中的子查詢

-- 查詢工資高于平均工資的員工
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

6.2 FROM子句中的子查詢

-- 查詢各部門工資排名
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;

6.3 EXISTS子查詢

-- 查詢有下屬的員工
SELECT * FROM employees e1
WHERE EXISTS (
    SELECT 1 FROM employees e2
    WHERE e2.manager_id = e1.employee_id
);

七、常用函數

7.1 字符串函數

-- 字符串拼接
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

-- 大小寫轉換
SELECT UPPER(first_name), LOWER(last_name) FROM employees;

7.2 日期函數

-- 計算員工工齡
SELECT 
    first_name,
    DATEDIFF(CURRENT_DATE(), hire_date)/365 AS years_employed
FROM employees;

7.3 條件函數

-- CASE WHEN條件判斷
SELECT 
    first_name,
    salary,
    CASE 
        WHEN salary > 10000 THEN '高薪'
        WHEN salary > 5000 THEN '中等'
        ELSE '一般'
    END AS salary_level
FROM employees;

八、查詢優化建議

  1. 索引優化:為WHERE、JOIN、ORDER BY字段建立索引
  2. *避免SELECT **:只查詢需要的列
  3. LIMIT分頁:大數據量時使用分頁查詢
  4. EXPLN分析:使用EXPLN查看執行計劃
  5. 避免子查詢:復雜子查詢可改用JOIN實現
-- 使用EXPLN分析查詢
EXPLN SELECT * FROM employees WHERE department_id = 10;

結語

本文系統介紹了MySQL查詢語句的核心語法和使用技巧。實際應用中,需要根據業務需求靈活組合各種查詢方式。建議讀者通過實踐練習掌握這些技術,并持續學習窗口函數、CTE等高級特性以應對更復雜的數據處理場景。

注意:所有示例基于MySQL 8.0語法,部分函數在舊版本中可能不支持 “`

(全文約2700字,實際字數可能因格式略有差異)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女