lesson38:MySQL數據庫核心操作詳解:從基礎查詢到高級應用

目錄

引言

一、條件查詢:精準篩選數據

1.1 基本語法

1.2 比較運算符

1.3 邏輯運算符

1.4 特殊條件查詢

1.4.1 模糊查詢(LIKE)

1.4.2 IN和NOT IN

1.4.3 BETWEEN AND

1.4.4 IS NULL和IS NOT NULL

二、聚合函數:數據統計與分析

2.1 常用聚合函數

2.2 COUNT()的使用

2.3 SUM()和AVG()

2.4 MAX()和MIN()

2.5 聚合函數與DISTINCT

三、分組查詢:GROUP BY與HAVING

3.1 GROUP BY基礎

3.2 HAVING子句

3.3 GROUP BY與多個列

四、排序:ORDER BY

4.1 基本排序

4.2 多列排序

4.3 排序與聚合函數

五、分頁查詢:LIMIT

5.1 基本語法

5.2 實際應用

5.3 分頁公式

六、去重:DISTINCT

6.1 基本用法

6.2 多列去重

6.3 DISTINCT與聚合函數

七、綜合應用:多操作組合

7.1 示例1:復雜條件查詢

7.2 示例2:分組統計與排序

7.3 示例3:分頁查詢熱門城市

八、最佳實踐與性能優化

8.1 索引優化

8.2 查詢優化

8.3 分組和聚合優化

8.4 分頁優化

九、常見問題與解決方案

9.1 NULL值處理

9.2 數據類型不匹配

9.3 分組與排序的順序

十、總結

附錄:常用查詢示例


引言

MySQL作為一款開源的關系型數據庫管理系統,憑借其高效、穩定、易用的特性,成為Web開發領域中最受歡迎的數據庫之一。無論是小型網站還是大型企業應用,MySQL都扮演著至關重要的角色。本文將詳細介紹MySQL中條件查詢、聚合函數、分頁、排序、分組和去重等核心操作,幫助讀者從基礎到進階,全面掌握MySQL的查詢技巧。

一、條件查詢:精準篩選數據

條件查詢是MySQL中最常用的操作之一,通過WHERE子句可以實現對數據的精準篩選。

1.1 基本語法

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 條件表達式;

1.2 比較運算符

運算符描述示例
=等于WHERE age = 18
<>不等于WHERE age <> 18
>大于WHERE salary > 5000
<小于WHERE score < 60
>=大于等于WHERE quantity >= 100
<=小于等于WHERE price <= 99.99

1.3 邏輯運算符

  • AND:同時滿足多個條件

    SELECT * FROM students WHERE age > 18 AND gender = '男';
  • OR:滿足任意一個條件

    SELECT * FROM products WHERE price < 50 OR category = '電子產品';
  • NOT:取反

    SELECT * FROM orders WHERE NOT status = '已取消';

1.4 特殊條件查詢

1.4.1 模糊查詢(LIKE)
  • %:匹配任意字符(包括零個)
  • _:匹配單個字符
-- 查詢姓張的學生
SELECT * FROM students WHERE name LIKE '張%';-- 查詢第二個字是"小"的學生
SELECT * FROM students WHERE name LIKE '_小%';
1.4.2 IN和NOT IN
-- 查詢id為1、3、5的學生
SELECT * FROM students WHERE id IN (1, 3, 5);-- 查詢不在北京、上海的學生
SELECT * FROM students WHERE city NOT IN ('北京', '上海');
1.4.3 BETWEEN AND
-- 查詢成績在80到90之間的學生
SELECT * FROM students WHERE score BETWEEN 80 AND 90;
1.4.4 IS NULL和IS NOT NULL
-- 查詢沒有填寫郵箱的學生
SELECT * FROM students WHERE email IS NULL;-- 查詢填寫了電話的學生
SELECT * FROM students WHERE phone IS NOT NULL;

二、聚合函數:數據統計與分析

聚合函數用于對數據進行統計和計算,返回單個結果值。

2.1 常用聚合函數

函數描述
COUNT()統計記錄數
SUM()求和
AVG()平均值
MAX()最大值
MIN()最小值

2.2 COUNT()的使用

-- 統計學生總數
SELECT COUNT(*) AS student_count FROM students;-- 統計有郵箱的學生數
SELECT COUNT(email) AS email_count FROM students;

2.3 SUM()和AVG()

-- 計算所有學生的總分
SELECT SUM(score) AS total_score FROM students;-- 計算平均分
SELECT AVG(score) AS avg_score FROM students;

2.4 MAX()和MIN()

-- 查詢最高和最低分
SELECT MAX(score) AS max_score, MIN(score) AS min_score FROM students;

2.5 聚合函數與DISTINCT

-- 統計不同城市的數量
SELECT COUNT(DISTINCT city) AS city_count FROM students;

三、分組查詢:GROUP BY與HAVING

3.1 GROUP BY基礎

GROUP BY用于將數據按照指定列進行分組,通常與聚合函數一起使用。

-- 按性別分組統計學生數量
SELECT gender, COUNT(*) AS count FROM students GROUP BY gender;-- 按城市分組計算平均分
SELECT city, AVG(score) AS avg_score FROM students GROUP BY city;

3.2 HAVING子句

HAVING用于過濾分組后的結果,類似于WHERE,但WHERE用于分組前過濾,HAVING用于分組后過濾。

-- 找出平均分大于85的城市
SELECT city, AVG(score) AS avg_score 
FROM students 
GROUP BY city 
HAVING avg_score > 85;-- 找出學生數量大于10人的城市
SELECT city, COUNT(*) AS count 
FROM students 
GROUP BY city 
HAVING count > 10;

3.3 GROUP BY與多個列

-- 按城市和性別分組統計
SELECT city, gender, COUNT(*) AS count 
FROM students 
GROUP BY city, gender;

四、排序:ORDER BY

4.1 基本排序

-- 按分數升序排列
SELECT * FROM students ORDER BY score ASC;-- 按分數降序排列
SELECT * FROM students ORDER BY score DESC;

4.2 多列排序

-- 先按城市升序,再按分數降序
SELECT * FROM students ORDER BY city ASC, score DESC;

4.3 排序與聚合函數

-- 按城市分組計算平均分并排序
SELECT city, AVG(score) AS avg_score 
FROM students 
GROUP BY city 
ORDER BY avg_score DESC;

五、分頁查詢:LIMIT

在處理大量數據時,分頁查詢非常重要,可以提高查詢效率和用戶體驗。

5.1 基本語法

SELECT * FROM 表名 LIMIT [offset,] rows;
  • offset:起始位置(可選,默認為0)
  • rows:返回行數

5.2 實際應用

-- 獲取前10條數據
SELECT * FROM students LIMIT 10;-- 獲取第11-20條數據
SELECT * FROM students LIMIT 10, 10;-- 按分數降序,獲取前5名學生
SELECT * FROM students ORDER BY score DESC LIMIT 5;

5.3 分頁公式

對于第n頁,每頁顯示m條數據:

SELECT * FROM students LIMIT (n-1)*m, m;
-- 第3頁,每頁10條
SELECT * FROM students LIMIT 20, 10;

六、去重:DISTINCT

DISTINCT用于返回唯一不同的值。

6.1 基本用法

-- 查詢所有不同的城市
SELECT DISTINCT city FROM students;

6.2 多列去重

-- 查詢不同城市和性別的組合
SELECT DISTINCT city, gender FROM students;

6.3 DISTINCT與聚合函數

-- 統計不同城市的數量
SELECT COUNT(DISTINCT city) AS city_count FROM students;

七、綜合應用:多操作組合

在實際應用中,通常需要將多個操作組合使用。

7.1 示例1:復雜條件查詢

-- 查詢北京或上海的女生,分數在80-90之間,按分數降序排列
SELECT * FROM students 
WHERE (city = '北京' OR city = '上海') 
AND gender = '女' 
AND score BETWEEN 80 AND 90 
ORDER BY score DESC;

7.2 示例2:分組統計與排序

-- 按城市分組,統計每個城市的男生人數和平均分,只顯示平均分大于80的,按平均分降序排列
SELECT city, 
COUNT(*) AS male_count, 
AVG(score) AS avg_score 
FROM students 
WHERE gender = '男' 
GROUP BY city 
HAVING avg_score > 80 
ORDER BY avg_score DESC;

7.3 示例3:分頁查詢熱門城市

-- 查詢學生數量最多的前5個城市,按數量降序排列
SELECT city, COUNT(*) AS count 
FROM students 
GROUP BY city 
ORDER BY count DESC 
LIMIT 5;

八、最佳實踐與性能優化

8.1 索引優化

  • 為WHERE、JOIN、ORDER BY等子句中的列創建索引
  • 避免在索引列上使用函數或表達式
  • 合理設計復合索引

8.2 查詢優化

  • 只查詢需要的列,避免使用SELECT *
  • 使用EXPLAIN分析查詢執行計劃
  • 避免在WHERE子句中使用!=、<>、NOT IN等操作符
  • 合理使用連接查詢代替子查詢

8.3 分組和聚合優化

  • 盡量縮小分組前的數據量
  • 避免在HAVING中使用復雜條件,可先通過WHERE過濾

8.4 分頁優化

  • 對于大數據量分頁,使用"延遲關聯"或"書簽"技術
  • 避免使用LIMIT offset過大的值

九、常見問題與解決方案

9.1 NULL值處理

  • NULL與任何值比較都返回NULL
  • 使用IS NULL/IS NOT NULL判斷NULL值
  • 聚合函數通常忽略NULL值

9.2 數據類型不匹配

  • 確保比較和計算的數據類型一致
  • 使用CAST()或CONVERT()進行類型轉換

9.3 分組與排序的順序

  • GROUP BY子句在WHERE之后,ORDER BY之前
  • 聚合函數不能直接用于WHERE子句

十、總結

本文詳細介紹了MySQL中的條件查詢、聚合函數、分組、排序、分頁和去重等核心操作。這些操作是MySQL查詢的基礎,也是進行數據分析和業務開發的必備技能。通過靈活組合這些操作,可以實現復雜的查詢需求,高效地處理和分析數據。

在實際應用中,除了掌握基本語法外,還需要關注查詢性能優化,合理設計索引,編寫高效的SQL語句。同時,要注意處理特殊情況如NULL值、數據類型轉換等,確保查詢結果的準確性。

希望本文能幫助讀者全面理解MySQL的查詢操作,為后續的數據庫開發和優化打下堅實基礎。在實際使用中,建議多練習、多總結,不斷提升SQL編寫能力。

附錄:常用查詢示例

  1. 查詢每個城市的男生和女生數量及平均分
SELECT 
city,
gender,
COUNT(*) AS count,
AVG(score) AS avg_score
FROM students
GROUP BY city, gender
ORDER BY city ASC, gender ASC;
  1. 查詢成績排名前10%的學生
SELECT * FROM students
WHERE score >= (SELECT AVG(score) FROM students)
ORDER BY score DESC
LIMIT (SELECT COUNT(*) * 0.1 FROM students);
  1. 查詢連續三個月沒有訂單的用戶
SELECT user_id, username
FROM users
WHERE user_id NOT IN (
SELECT DISTINCT user_id
FROM orders
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
);

通過不斷實踐這些查詢技巧,結合具體業務場景進行靈活運用,相信你一定能成為MySQL查詢的高手。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93160.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據分析】調控網絡分析:調節因子在腫瘤樣本中的表達相關性與生存效應分析

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 數據準備與模擬 相關性分析與邊表生成 網絡可視化 結果展示與討論 加載R包 模擬數據 Spearman 相關 -> 邊表 畫圖 所有代碼 總結 系統信息 介紹 在生物醫學研究中,N?-甲基腺…

Flask中ORM的使用

Flask中ORM的使用 本文介紹Flask中ORM框架flask_sqlalchemy的基本使用&#xff0c;包含模型定義(簡單模型&#xff0c;一對一&#xff0c;一對多&#xff0c;多對多等)&#xff0c;由于實際開發中很少使用物理外鍵&#xff0c;所有本文所有模型都不使用物理外鍵&#xff0c;而關…

FPGA即插即用Verilog驅動系列——高速12位ADC

實現功能&#xff1a;單通道ADC驅動&#xff0c;速率由驅動的時鐘決定12位數據并行&#xff0c;可輕松修改為其他位寬&#xff0c;適應不同的ADC模塊將ADC輸入的unsigned數據轉換為signed&#xff0c;便于后續FIR&#xff0c;MULTI操作匹配AXI4-STREAM協議&#xff0c;有tvalid…

DeepSeek 部署中的常見問題及解決方案:從環境配置到性能優化的全流程指南

一、引言隨著大模型技術的發展&#xff0c;以 DeepSeek 為代表的開源中文大模型&#xff0c;逐漸成為企業與開發者探索私有化部署、垂直微調、模型服務化的重要選擇。然而&#xff0c;模型部署的過程并非 “一鍵啟動” 那么簡單。從環境依賴、資源限制&#xff0c;到推理性能和…

【機器人-開發工具】ROS 2 (4)Jetson Nano 系統Ubuntu22.04安裝ROS 2 Humble版本

文章目錄1. 系統環境準備1.1. Jetpack簡介1.2. 下載Jetpack安裝系統2. 安裝ROS2 Humble2.1. ROS2 簡介2.2. ROS2 Humble對比Foxy版本2.3. 安裝2.3.1. 更新系統2.3.2. 添加 ROS 2 GPG 密鑰2.3.3. 添加 ROS 2 倉庫源2.3.4. 更新軟件包索引2.3.5. 安裝 ROS 2 Humble 桌面版&#x…

2025年Java大廠面試場景題全解析:高頻考點與實戰攻略

一、2025年Java面試新趨勢與技術棧變化2025年的Java技術生態呈現出明顯的云原生與AI集成趨勢&#xff0c;各大互聯網公司在面試中更加注重候選人對新技術棧的掌握程度和實戰應用能力。1.1 技術棧升級趨勢分析根據最新統計數據&#xff0c;2025年Java面試的技術考察點分布如下&a…

TCP客戶端Linux網絡編程設計詳解

一、TCP 客戶端設計流程TCP客戶端模式的程序設計流程主要分為&#xff1a;套接字初始化( socket()函數)&#xff0c;連接目標網絡服務器 (connect()函數)&#xff0c;向服務器端寫入數據&#xff08;write()函數&#xff09;1、socket() 函數#include <sys/types.h> …

webpack》》

Webpark 介紹 官網 Webpack的功能 在現代前端開發中,我們會使用模塊化、Sass、TypeScript、圖片、字體等資源。但瀏覽器并不天然支持這些格式,因此我們需要工具將它們打包、轉換成瀏覽器能識別的文件格式。Webpack 就是這樣一個強大的前端構建工具。 Webpack 是一個現代 J…

軟件測評中HTTP 安全頭的配置與測試規范

服務器若缺乏必要的安全頭配置&#xff0c;其安全防護能力將大幅降低。X-Content-Type-Options 作為基礎安全頭&#xff0c;需設置 nosniff 參數&#xff0c;以阻止瀏覽器對 MIME 類型進行自主猜測&#xff0c;避免 text/css 等資源被誤當作腳本執行&#xff0c;從源頭切斷此類…

5G專網項目外場常見業務測試指南(六)-PingInfoView

5G項目必然涉及到終端用戶的使用&#xff0c;終端使用情況測試最常用的手段就是長時間7*24小時長ping&#xff0c;對于一個有著幾百用戶的5G專網&#xff0c;我們常用的ping工具-PingInfoView。 PingInfoView是一款輕量級工具&#xff0c;用于同時對多個IP地址或主機名執行持續…

C#WPF實戰出真汁02--搭建項目三層架構

1、什么是三層架構 三層架構是一種軟件設計模式&#xff0c;將應用程序劃分為表示層&#xff08;UI&#xff09;、業務邏輯層&#xff08;BLL&#xff09;和數據訪問層&#xff08;DAL&#xff09;&#xff0c;以實現高內聚、低耦合的開發目標。 三層架構的核心組成? ?表示層…

什么是費曼學習法?

什么是費曼學習法&#xff1f;一、費曼學習法的核心邏輯 費曼學習法&#xff08;Feynman Technique&#xff09;由諾貝爾物理學獎得主理查德費曼提出&#xff0c;核心思想是通過“以教促學”的方式&#xff0c;用輸出倒逼輸入&#xff0c;徹底理解知識。其本質是&#xff1a;當…

CVPR 2025 | 北大團隊SLAM3R:單目RGB長視頻實時重建,精度效率雙殺!

北京大學陳寶權團隊聯合香港大學等推出的實時三維重建系統SLAM3R&#xff0c;首次實現從單目RGB長視頻中實時且高質量重建場景稠密點云。該系統通過前饋神經網絡無縫集成局部3D重建與全局坐標配準&#xff0c;提供端到端解決方案&#xff0c;使用消費級顯卡&#xff08;如4090D…

現代化水庫運行管理矩陣建設的要點

2023年8月24日&#xff0c;水利部發布的水利部關于加快構建現代化水庫運行管理矩陣的指導意見中指出&#xff0c;在全面推進水庫工程標準化管理的基礎上&#xff0c;強化數字賦能&#xff0c;加快構建以推進全覆蓋、全要素、全天候、全周期“四全”管理&#xff0c;完善體制、機…

【工具】用于視頻遮蓋行人及車牌的工具,基于YOLO

最近錄制數據時&#xff0c;為了保護隱私&#xff0c;我做了一個小工具&#xff1a;video-privacy-blur 在采集街景、測試視頻時&#xff0c;經常會拍到人臉和車牌&#xff0c;這些信息在分享或存儲前必須做匿名化處理。手動后期太耗時&#xff0c;于是我基于 Ultralytics YOLO…

EtherCAT概念介紹

一、EtherCAT 簡介?EtherCAT&#xff08;Ethernet Control Automation Technology&#xff09;是一種工業以太網現場總線&#xff0c;它將計算機網絡中的以太網技術應用于工業自動化領域&#xff0c;構成工業控制以太網&#xff08;工業以太網、工業以太網現場總線&#xff09…

【LeetCode】4. 尋找兩個正序數組的中位數

文章目錄4. 尋找兩個正序數組的中位數題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路算法分析問題本質分析二分查找分割算法詳解分割策略可視化分割點計算過程邊界情況處理算法流程圖各種解法對比時間復雜度分析空間復雜度分析關鍵優化點實際應用場景測…

HarmonyOS 開發實戰:搞定應用名字與圖標更換,全流程可運行示例

好的&#xff0c;我幫你把這篇《HarmonyOS 開發實戰&#xff1a;快速更改應用名字與圖標的終極指南》擴展到約 4000 字&#xff0c;重點會放在代碼示例和代碼解釋部分&#xff0c;并且保留你要的口語化、易讀風格。 我會在原文的基礎上增加&#xff1a; 更完整的目錄結構演示&a…

Keep-Alive 的 “愛情故事”:HTTP 如何從 “短命” 變 “長情”?

&#x1f680; 揭秘HTTP Keep-Alive&#xff1a;前端面試不再“短”路&#xff01; 引言&#xff1a;HTTP連接的“愛恨情仇” 各位前端的小伙伴們&#xff0c;在面試中&#xff0c;HTTP協議絕對是繞不開的話題。而其中一個看似簡單卻又暗藏玄機的知識點&#xff0c;就是HTTP的“…

僅需8W,無人機巡檢系統落地 AI 低空智慧城市!可源碼交付

一、項目介紹無人機管控系統是融合無人機技術、傳感器技術、物聯網及人工智能的智能化檢測方案。依托先進無人機技術與前沿 AI 算法&#xff0c;該系統可替代傳統人工巡檢模式&#xff0c;針對高危、復雜或大面積區域實現高效、精準監測&#xff0c;為城市基礎設施檢查、安防監…