(新手友好)MySQL學習筆記(6):分組查詢,正則表達式

目錄

分組查詢

創建分組

過濾分組

分組查詢練習

正則表達式

匹配單個實例

匹配多個實例

正則表達式練習

練習答案

分組查詢練習答案

正則表達式練習答案


分組查詢

創建分組

????????group by 子句根據一個多個字段結果進行分組分組的字段上可以使用countsumavg等聚合函數但是聚合函數不能出現在group by的后邊這點where一樣。

select 字段1[,字段2,function(字段1),function(字段2),....]
from 表名
group by 字段;

?下面給兩個例子區分wheregroup by適用場景

#統計部門ID為20的員工數
select count(*) from emp where deptno=20
#統計每個部門的人數
select deptno,count(*)
from emp
group by deptno;
注意:
  • 如果分組列中具有NULL值,則NULL值將作為一個分組返回,如果列中有多行NULL值,它們將作為一組。
  • group by 子句必須出現在where子句后邊,order by子句之前,意思就是分組前過濾出符合where 條件的數據,再將這部分數據按照group by條件進行分組

過濾分組

having 子句having 非常類似where唯一差別where過濾having 過濾分組having 必須group by一起使用

havingwhere區別where分組過濾having分組過濾但是聚合函數count()可以在having使用

舉兩個例子

#統計部門中員工超過5人的部門的員工數
select deptno,count(*)
from emp 
group by deptno
having count(*) > 5;#統計部門中員工月薪超過1000的員工超過兩人的部門的員工數
select deptno,count(*)
from emp
where sal > 1000
group by deptno
having count(*) > 2;

分組查詢練習

練習答案仍在最后

1. 查詢 公司 有哪 幾種 崗位 以及 每個崗位 人數

2.計算每個崗位的最高薪水并且到高進行排序

3.計算每個部門平均薪水

4.計算不同部門不同崗位最高薪水

5.找出每個工作崗位最高薪水manager之外

6.找出每個工作崗位平均薪水顯示平均薪水大于2000

正則表達式

????????regexp操作符regexp操作符后邊跟的就是正則表達式正則表達式作用匹配文本將一個模式正則表達式)一個文本串進行比較

like與regexp區別:

????????like匹配整個如果匹配文本列值中出現(沒有配合其他通配符)立刻將找不到regexp列值進行匹配如果匹配文本列值中出現regexp將會找到相應行將被返回

下面舉個例子幫助理解

#不加通配符時like僅僅會找到名字為s的員工
select * from emp where ename like "s";
#加通配符后like會找到名字包含s的員工
select * from emp where ename like "%s%";
#regexp則會直接找到名字里包含s的員工
select * from emp where ename regexp "s";

匹配單個實例

  • |表示匹配其中之一使用 | 從功能類似or
  • [ ]匹配字段之一[ ]另一種形式or語句例如[123][1|2|3]縮寫
  • [ - ]匹配范圍使用 - 來定義一個范圍例如[1-3],[a-z]
  • \\轉義字符多數正則表達式使用單個反斜杠作為轉義字符MySQL要求兩個反斜杠(MySQL自己解釋一個,正則表表達式庫解釋另一個)

下面有幾個例子幫助理解

#查詢字段中是否包含a或b
select "acddp" regexp "[ab]";
#查詢字段中是否包含1-5的任意一個數字
select "89445687" regexp "[1-5]";
#查詢字段中是否包含"[1-5]"字段
select "_ajegdbas" regexp "\\[1-5]";
  • 匹配字符類存在找出你自己經常使用數字所有字母字符或者所有數字字母字符匹配為了更方便工作可以使用預定義字符集稱為字符類稍作了解工作上用得到印象找得到就好可以做筆記

說明

[[:alnum:]]

任意字母數字(同[a-zA-Z0-9])

[[:alpha:]]

任意字符(同[a-zA-Z])

[[:blank:]]

空格制表(同[\\t])

[[:cntrl:]]

ASCII控制字符(ASCII 0 到31 和127)

[[:digit:]]

任意數字(同 [0-9])

[[:graph:]]

[:print:] 相同不包括空格

[[:lower:]]

任意小寫字母(同[a-z])

[[:print:]]

任意可打印字符

[[:punct:]]

既不在[[:alnum:]]也不[[:cntrl:]]任意字符

[[:space:]]

包括空格在內任意空白字符(同[\\f\\n\\r\\t\\v])

[[:upper:]]

任意大寫字母(同[A-Z])

[[:xdigit:]]

任意十六進制數字(同[a-fA-F0-9])

匹配多個實例

  • 常用元字符

元字符

說明

.

匹配任意字符

^

匹配字符串的開始^在[]表示否定

$

匹配字符串結束

幾個例子幫助大家理解

#查詢字符串中是否包含任意字符+'a'的子字符串
select 'baan' regexp '.a';#'ba'就屬于任意字符+'a'的子字符串
#查詢字符串開頭是否包括'bn'子字符串
select 'baan' regexp '^bn';
#查詢字符串結尾是否包括'bn'子字符串
select 'baan' regexp 'bn$';
  • 重復元字符(修飾前一個字符)

元字符

說明

*

任意匹配

+

一個多個匹配(等于{1,})

?

01(等于{0,1})

{n}

指定匹配

{n,}

不少于只等數目匹配

{n,m}

匹配數目范圍(m不超過255)

幾個例子幫助理解

#查詢字符串中是否出現'bn','ban','baan','baaan'等子字符串
select 'baaaaan' regexp 'ba*n';#'*'僅僅修飾'a'字符
#查詢字符串中是否出現'ban','baan','baaan'等'a'不少于1個的子字符串
select 'baaaan' regexp 'ba{1,}n';#同樣的'{1,}'僅修飾'a'字符

正則表達式練習

利用正則表達式進行查詢結果寫出來(字串存在為1或不存在為0),答案同樣放在最后

select 'baan' regexp '^ba*n';
select 'bn' regexp '^ba*n';
select 'bn' regexp '^ba+n';
select 'bn' regexp '^ba?n';
select 'baan' regexp '^ba?n';select 'pin' regexp 'pi|apa';
select 'pin' regexp '^(pi|apa)$';
select 'apa' regexp '^(pi|apa)$';
select 'pin' regexp '^(p|qin)$';
select 'pin' regexp '^([pq]in)$';select 'fofo' regexp '^fo';
select 'fo\no' regexp '^fo\no$';
select 'fo\no' regexp '^fp\\no';
select 'fo\eo' regexp '^fo\\eo$';
select 'fo\|o' regexp '^fo\\|o$';
select 'fofo' regexp '^fo';

練習答案

分組查詢練習答案

#查詢該公司有哪幾種崗位以及每個崗位的人數
select job,count(*)
from emp
group by job;
#計算每個崗位的最高薪水,并且由低到高進行排序
select job,max(sal)
from emp
group by job
order by max(sal) desc;
#計算每個部門平均薪水
select deptno,avg(sal)
from emp 
group by deptno;
#計算不同部門不同崗位的最高薪水
select deptno,job,max(sal)
from emp 
group by deptno,job;
#找出每個工作崗位的最高薪水,除manager之外
select job,max(sal)
from emp 
where job not like "manager"
group by job;
#找出每個工作崗位的平均薪水,顯示平均薪水大于2000的
select job,avg(sal)
from emp 
group by job
having avg(sal) > 2000;

正則表達式練習答案

select 'baan' regexp '^ba*n';#1
select 'bn' regexp '^ba*n';#1
select 'bn' regexp '^ba+n';#0
select 'bn' regexp '^ba?n';#1
select 'baan' regexp '^ba?n';#0select 'pin' regexp 'pi|apa';#1
select 'pin' regexp '^(pi|apa)$';#0
select 'apa' regexp '^(pi|apa)$';#1
select 'pin' regexp '^(p|qin)$';#0
select 'pin' regexp '^([pq]in)$';#1select 'fofo' regexp '^fo';#1
select 'fo\no' regexp '^fo\no$';#1
select 'fo\no' regexp '^fp\\no';#0
select 'fo\eo' regexp '^fo\\eo$';#1
select 'fo\|o' regexp '^fo\\|o$';#1
select 'fofo' regexp '^fo';#1

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

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

相關文章

Android 之 kotlin 語言學習筆記四(Android KTX)

一、Android KTX 簡介 Android KTX 是包含在 Android Jetpack 及其他 Android 庫中的一組 Kotlin 擴展程序。KTX 擴展程序可以為 Jetpack、Android 平臺及其他 API 提供簡潔的慣用 Kotlin 代碼。為此,這些擴展程序利用了多種 Kotlin 語言功能,其中包括&…

云原生思維重塑數字化基座:從理念到實踐的深度剖析

📝個人主頁🌹:慌ZHANG-CSDN博客 🌹🌹期待您的關注 🌹🌹 一、引言:云原生為何成為數字化的“基礎設施語言”? 隨著5G、人工智能、物聯網等技術逐步進入規模化落地階段&am…

【C/C++】STL實現版本為什么比手寫版本高?

文章目錄 為什么標準庫版本效率更高?1 具體介紹1.1 **內聯優化(Inlining)和模板展開**1.2 **分支預測友好(Branch Prediction)**1.3 **迭代器解耦 靜態分發**1.4 **代碼緊湊,編譯器優化空間大**1.5 **高質…

35.成功解決編寫關于“江協科技”編寫技巧第二期標志位積累的問題

江科大學長又發布了第二期的編寫技巧! 大家可以看看:https://space.bilibili.com/383400717 最后面給了一個未完成的任務: 這里我已經把這個問題給解決了! 總代碼放在資源里面,key.c放在文章最后面!同時感…

STM32什么是寄存器

提示:文章 文章目錄 前言一、背景二、2.12.2 三、3.1 總結 前言 前期疑問: 1、什么是寄存器? 答:在4GB的地址空間中,512MB的block2上,每4個字節組成32位,這個32位為一個單元,控制&a…

【Pinia】Pinia和Vuex對比

Pinia 是 Vue 官方團隊成員專門開發的一個全新狀態管理庫,并且 Vue 的官方狀態管理庫已經更改為了 Pinia。 在 Vuex 官方倉庫中也介紹說可以把 Pinia 當成是不同名稱的 Vuex 5,這也意味不會再出 5 版本了。 優點 1. 更加輕量級,壓縮后提交只…

通過 Ansible 在 Windows 2022 上安裝 IIS Web 服務器

拓撲結構 這是一個用于通過 Ansible 部署 IIS Web 服務器的實驗室拓撲。 前提條件: 在被管理的節點上安裝WinRm 準備一張自簽名的證書 開放防火墻入站tcp 5985 5986端口 準備自簽名證書 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…

Oracle雙平面適用場景討論會議

4月28日,我在杭州組織召開了Oracle雙平面會議討論沙龍。在國產化數據庫浪潮的今天,Oracle數據庫作為國產數據庫的應急庫,在國產數據庫發生故障或者性能下降時,如何更好的使用Oracle。會議主題如下: 1、背景與痛點速覽&…

10.Linux進程信號

1. 理解信號 信號VS信號量 老婆:老婆餅-》沒有任何關系!信號:鬧鐘,上課鈴聲,臉色...人-》進程;信號中斷人正在做的事,是一種事件的異步通知機制; 我們自習一會,等張三回…

求解插值多項式及其余項表達式

例 求滿足 P ( x j ) f ( x j ) P(x_j) f(x_j) P(xj?)f(xj?) ( j 0 , 1 , 2 j0,1,2 j0,1,2) 及 P ′ ( x 1 ) f ′ ( x 1 ) P(x_1) f(x_1) P′(x1?)f′(x1?) 的插值多項式及其余項表達式。 解: 由給定條件,可確定次數不超過3的插值多項式。…

C++刷題:日期模擬(1)

(注:本文所展示代碼均為本人所寫,不一定為最優) 我們首先用純邏輯和手動計算來拆解日期模擬題,再來代碼實現,看看這些問題的底層思路怎么玩明白~ 一、基礎日期計算:直接算“過幾天是…

深入剖析Nginx:從入門到高并發架構實戰

深入剖析Nginx:從入門到高并發架構實戰 摘要:本文全面解析Nginx的核心功能、架構原理及實戰配置,涵蓋負載均衡、反向代理、動靜分離等高級應用場景,助你構建高性能Web服務架構。 一、Nginx是什么?為什么它如此重要&…

Qt客戶端技巧 -- 窗口美化 -- 圓角窗口

不解析&#xff0c;直接給代碼例子 利用窗口重繪事件處理函數paintEvent main.cpp #include <QtCore/qglobal.h> #if QT_VERSION > 0x050000 #include <QtWidgets/QApplication> #else #include <QtGui/QApplication> #endif#include "roundedwin…

Three.js學習筆記-三要素

Three.js 學習筆記-三要素 一、Three.js 簡介 (一)前世今生 Three.js 是一款運行在瀏覽器中的 3D 引擎,由 Ricardo Cabello(Mr.doob)在 2010 年 4 月于 GitHub 首次發布 。其起源可追溯到本世紀初,代碼最初用 ActionScript 編寫,2009 年移植到 JavaScript。隨著 Web…

動力電池點焊機:驅動電池焊接高效與可靠的核心力量|比斯特自動化

在新能源汽車與儲能設備需求激增的背景下&#xff0c;動力電池的制造工藝直接影響產品性能與安全性。作為電芯與極耳連接的核心設備&#xff0c;點焊機如何平衡效率、精度與可靠性&#xff0c;成為電池企業關注的重點。 動力電池點焊機的核心功能是確保電芯與極耳的穩固連接。…

OpenCV CUDA模塊圖像處理------創建一個模板匹配(Template Matching)對象函數createTemplateMatching()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 創建一個用于在 GPU 上執行模板匹配的 TemplateMatching 對象。 該函數返回一個指向 TemplateMatching 的智能指針&#xff08;Ptr&#xff09;…

natapp 內網穿透失敗

連不上網絡錯誤調試排查詳解 - NATAPP-內網穿透 基于ngrok的國內高速內網映射工具 如何將DNS服務器修改為114.114.114.114_百度知道 連不上/錯誤信息等問題解決匯總 - NATAPP-內網穿透 基于ngrok的國內高速內網映射工具 nslookup auth.natapp.cnping auth.natapp.cn

游戲(game)

題目描述 小明最近迷上了一款游戲&#xff0c;并且很想成為這款游戲的高手&#xff0c;這款游戲需要用 資源來買裝備。他剛開始的資源價值為0,于是他每天都會做日常任務來獲得價值為1的資源。 這款游戲中有每日商店&#xff0c;小明已經提前知道了接下來n天會出現的裝備&#x…

C# 類和繼承(抽象類)

抽象類 抽象類是指設計為被繼承的類。抽象類只能被用作其他類的基類。 不能創建抽象類的實例。抽象類使用abstract修飾符聲明。 抽象類可以包含抽象成員或普通的非抽象成員。抽象類的成員可以是抽象成員和普通帶 實現的成員的任意組合。抽象類自己可以派生自另一個抽象類。例…

關于臟讀,幻讀,可重復讀的學習

mysql 可以查詢當前事務隔離級別 默認是RR repeatable-read 如果要測臟讀 要配成未提交讀 RU 讀到了未提交的數據。 3.演示不可重復讀 要改成提交讀 RC 這個是指事務還未結束&#xff0c;其他事務修改了值。導致我兩次讀的不一樣。 4.RR–可以解決不可重復讀 小總結&…