MySQL的內置函數與復雜查詢

目錄

前言

一、聚合函數

1.1日期函數

1.2字符串函數

?1.3數學函數

1.4其它函數

二、關鍵字周邊

2.1關鍵字的生效順序

?2.2數據源

2.3可以使用聚合函數的關鍵字


前言

在前面幾篇文章中,講解了有關MySQL數據庫、數據庫表的創建、數據庫表的數據操作等等。本文我們主要講解MySQL中給我們內置好的,可以幫助我們完成一定功能的函數,以及一些復雜場景下的查詢操作。這里不建議沒有基礎的同學進行閱讀。


一、內置函數函數

1.1日期函數

日期函數
函數名稱描述
current_date()當前日期
current_time()當前時間
current_timestamp()當前時間戳
date(datetime)按照datetime格式返回時間
date_add(date, interval d_value_type)

在date的基礎上添加時間。

d_value_type可以是year、day、minute、second其中之一

date_sub(date, interval d_value_type)

在date的基礎上減去時間。

d_value_type可以是year、day、minute、second其中之一

datediff(date1,date2)兩個日期之差,單位是天
now()獲取當前時間
圖1? ? ? ? 日期函數使用實例

1.2字符串函數

字符串函數
函數說明
charset()返回字段的字符集
concat(str1,str,...)連接字符串
instr(stringA,stringB)在stringA中查找是否存在stringB,存在則返回其所在位置,不存在則返回0
ucase(string)轉換為大寫
lcase(string)轉換為小寫
left(string,length)從string首部其去除length個字符
length(string)返回string的長度
replace(str,search_str,replace_str)在str中使用replace_str替換search_str
strcmp(stringA,stringB)逐字符比較stringA與stringB的大小
substring(str,position,length)從str的position位置取出length個字符

ltrim(string)

rtrim(string)

trim(string)

去除string中的左空格、右空格、左右空格
圖2? ? ? ? 查看dept表中的deptno字段的字符集
圖3? ? ? ? 剩余其它函數演示

?1.3數學函數

數學函數
函數名稱說明
abs(number)對number進行絕對值運算
bin(decimal_number)十進制轉換為二進制
hex(decimal_number)十進制轉換為十六進制
conv(number,from_base,to_base)將number從from_base進制轉換為to_base進制
ceiling(number)向上取整
floor(number)向下取整
format(number,decimal_places)格式化,保留小數位
rand()返回[0,1)之間的隨機浮點數
mod(number,denominator)取模,求余
圖4? ? ? ? 數學函數驗證

1.4聚合函數

聚合函數
函數名稱說明
count()用來統計表中行的個數,使用count(*)可以統計所有行(包括值為null的列的行)的數量。
sum()用來統計數值列的總和,只能用于數值列。
avg()用來統計數值列的平均值,只能用于數值列。
max()用于獲取指定列的最大值。可以用于數值、日期、字符串等類型的列。
min()用于獲取指定列的最小值。與 MAX()類似,可以用于多種數據類型。
圖5? ? ? ? 聚合函數示例

1.5其它函數

其它函數
函數名稱說明
user()查看當前登錄用戶的用戶名
md5(str)對str生成一個32位的md5摘要
database()顯示當前正在使用的數據庫
ifnull(val1,val2)如果val1為null,返回val2,否則返回val1
圖6? ? ? ? 其他函數驗證

二、關鍵字周邊

2.1關鍵字的生效順序

  • FROM:該關鍵字表示我們將從哪一個數據的表中獲取數據,這也是最先生效的關鍵字。
  • WHERE:該關鍵字表示我們將按照一定的規則篩選表中的數據,將不滿足條件的數據篩選掉。
  • GROUP BY:該關鍵字會將where條件篩選后的數據按照一定的規則進行分組。
  • HAVING:該關鍵字會對分組后的數據按照一定的規則進行篩選,篩選掉不符合的數據。
  • SELECT:講過分組后篩選的數據就會被select挑選原則進行挑選,因為每一行數據可能有很多的字段并不是每一個字段都會被使用到。
  • ORDER BY:在選擇好對應的數據后,將符合條件的數據按照一定的規則進行排序。
  • LIMIT/OFFSET:LIMIT用于限制返回結果的行數,OFFSET表示從第幾行開始返回。這兩個子句通常是一次查詢最后執行的部分。
  • UNION:將多個包含相同列數的、SELECT的結果集進行去重后合并,UNION ALL與UNION類似,但是UNION ALL不會對進行去重操作。

?2.2數據源

? ? ? ? 我們的from對數據的獲取不僅可以從數據庫表中獲取,也可以從視圖和子查詢的結果中獲取。

? ? ? ? 實際上所謂的視圖你可以理解為是一個子查詢以視圖的形式進行了保存,這意味著如果某個查詢事務常常被執行,那么我們就可以創建一個視圖,然后從這個視圖里獲取數據而不是從數據庫中重新篩選獲取。需要說明的是——視圖不會掉電丟失。

圖7? ? ? ? from數據源獲取示例

2.3可以使用聚合函數的關鍵字

? ? ? ? 關于這個問題,我們首先要了解聚合函數存在的意義是什么,聚合中的“聚”字代表有很多的數據,“合”字代表要將這些數據整合為一個值用來表示這些數據的一個整體的指標。

????????例如,COUNT?函數用于統計行數,它會對表中的一組行進行計數,將這組行的數量聚合成一個數字;SUM?函數用于計算某一列數值的總和,是將該列的多個值聚合為一個總和值;AVG?函數計算平均值,是先將一組數值進行求和聚合,再除以數量得到一個平均值;MAX?和?MIN?函數則是從一組數據中找出最大值或最小值,也是一種聚合操作,將一組數據聚合成一個代表最大或最小的值。

? ? ? ? 所以在where和group by階段直接使用聚合函數是沒有意義的,因為在where階段我們往往是要確定篩選的條件,而不是使用聚合函數去得出一個能夠描述全表數據特征的一個值,對于group by來說也是如此,但是對于select和having階段就有所不同了,select關鍵字的意思很明顯就是想查看值,如果我們想查看一個表的特征值這顯然是合理的,having則是對經過分組后的數據添加約束條件,這就意味著如果我們此時使用聚合函數描述的是分組后的數據的特征值,顯然我們可以根據分組特征值篩去一些不合理的分組。

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

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

相關文章

見多識廣4:Buffer與Cache,神經網絡加速器的Buffer

目錄 前言傳統意義上的Buffer與Cache一言以蔽之定義與主要功能BufferCache 數據存儲策略二者對比 神經網絡加速器的bufferInput BufferWeight BufferOutput Buffer與傳統buffer的核心區別總結 前言 知識主要由Qwen和Kimi提供,我主要做筆記。 參考文獻: …

內存的位運算

示例:提取和設置標志位 假設我們有一個32位的整數,其中不同的位代表不同的標志。例如: 位0:是否開啟日志(0表示關閉,1表示開啟) 位1:是否啟用調試模式(0表示禁用&#…

linux -shell原理與運用

1---shell的工作方式和功能 shell的工作方式: shell本身也是一個應用程序,存儲在/bin 或者是/user/bin中 登錄的時候 會根據/etc/passwd文件載入shell默認執行 shell啟動后,就會顯示命令提示符,等待用戶輸入命令 命令的邏輯: 首先會判斷時內部命令還是外部命令,如果是內部…

js獲取uniapp獲取webview內容高度

js獲取uniapp獲取webview內容高度 在uni-app中&#xff0c;如果你想要獲取webview的內容高度&#xff0c;可以使用uni-app提供的bindload事件來監聽webview的加載&#xff0c;然后通過調用webview的invokeMethod方法來獲取內容的高度。 以下是一個示例代碼&#xff1a; <te…

Windows系統升級Nodejs版本

什么是nodejs Node.js 是一個免費、開源、跨平臺的 JavaScript 運行時環境, 它讓開發人員能夠創建服務器 Web 應用、命令行工具和腳本。 NodeJs官網 網址&#xff1a;Node.js — 在任何地方運行 JavaScript 可以通過網址下載安裝&#xff0c;通過官網可以看到現在最新版本為22…

Relay算子注冊(在pytorch.py端調用)

1. Relay算子注冊 (C層) (a) 算子屬性注冊 路徑: src/relay/op/nn/nn.cc RELAY_REGISTER_OP("hardswish").set_num_inputs(1).add_argument("data", "Tensor", "Input tensor.").set_support_level(3).add_type_rel("Identity…

【JavaEE】網絡原理之初識(1.0)

目錄 ?編輯 局域網與廣域網 IP地址和端口號 實現簡單的服務器客戶端交互 簡單理解socket TCP和UDP的差別&#xff08;初識&#xff09; socket面對udp DatagramSocket API DatagramSocket 構造方法 DatagramSocket 方法&#xff1a; DatagramPacket API Data…

Redis數據結構ZipList,QuickList,SkipList

目錄 1.ZipList 1.2.解析Entry&#xff1a; 1.3Encoding編碼 1.4.ZipList連鎖更新問題 2.QuickList SkipList跳表 RedisObject 五種數據類型 1.ZipList redis中的ZipList是一種緊湊的內存儲存結構&#xff0c;主要可以節省內存空間儲存小規模數據。是一種特殊的雙端鏈表…

laravel 12 監聽syslog消息,并將消息格式化后存入mongodb

在Laravel 12中實現監聽Syslog消息并格式化存儲到MongoDB&#xff0c;需結合日志通道配置、Syslog解析和MongoDB存儲操作。以下是具體實現方案&#xff1a; 一、環境配置 安裝MongoDB擴展包 執行以下命令安裝必要的依賴&#xff1a; composer require jenssegers/mongodb ^4.0確…

【STM32項目實戰】一文了解單片機的SPI驅動外設功能

前言&#xff1a;在前面我有文章介紹了關于單片機的SPI外設CUBEMX配置&#xff0c;但是要想使用好SPI這個外設我們還必須對其原理性的時序有一個詳細的了解&#xff0c;所以這篇文章就補充一下SPI比較偏向底層的時序性的邏輯。 1&#xff0c;SPI簡介 SPI是MCU最常見的對外通信…

【挖洞利器】GobyAwvs解放雙手

【滲透測試工具】解放雙手&Goby配合Awvs滲透測試利器\x0a通過Goby和Awvs 解放雙手https://mp.weixin.qq.com/s/SquRK8C5cRpWmfGbIOqxoQ

LangChain4j(15)——RAG高級之跳過檢索

之前的文章中&#xff0c;我們介紹了RAG的使用&#xff0c;但是&#xff0c;每次提問時&#xff0c;都會通過RAG進行檢索。有時&#xff0c;檢索是不必要執行的&#xff0c;比如&#xff0c;當用戶只是說“你好”時。于是&#xff0c;我們需要有條件的跳過檢索過程。 跳過決策…

【SDRS】面向多模態情感分析的情感感知解糾纏表征轉移

abstract 多模態情感分析(MSA)旨在利用多模態的互補信息對用戶生成的視頻進行情感理解。現有的方法主要集中在設計復雜的特征融合策略來整合單獨提取的多模態表示,忽略了與情感無關的信息的干擾。在本文中,我們提出將單模表征分解為情感特定特征和情感獨立特征,并將前者融…

Sui 上線兩周年,掀起增長「海嘯」

兩年前的 5 月 3 日&#xff0c;Sui 的主網正式發布&#xff0c;將在開發網和測試網上驗證過的下一代技術承諾變為現實。這一新興網絡旨在優化現有區塊鏈技術&#xff0c;結合高性能計算環境與安全性、可驗證性及韌性。 隨著 Sui 迎來兩周年&#xff0c;這股浪潮已成長為「海嘯…

深入理解 mapper-locations

mybatis-plus.mapper-locations: classpath*:/mapper/**/*.xml 是 MyBatis/MyBatis-Plus 在 Spring Boot 配置文件&#xff08;如 application.yml 或 application.properties&#xff09;中的一項關鍵配置&#xff0c;用于指定 MyBatis Mapper XML 文件的存放路徑。以下是詳細…

電容的作用

使用多個電容是從電容的實際等效模型去考慮的(也就是從SI&#xff0c;信號完整性方面&#xff09;。只考慮一個實際電容時&#xff0c;它的阻抗曲線是一個類似于倒三角形的形狀&#xff0c;只在諧振頻率點(與等效串聯電感形成)處的阻抗最小。因此相當于只在這一個頻率點處及附近…

移植的本質是什么

有斷時間我就在想&#xff0c;為什么freertos&#xff0c;lvgl等等的移植都是把庫文件放進來&#xff0c;直接點擊編譯&#xff0c;然后把bug都處理完成就移植成功了&#xff0c;為什么呢&#xff1f; 明明我一個函數都沒調用&#xff0c;為什么會有一堆錯誤&#xff0c;莫名其…

廣告場景下的檢索平臺技術

檢索方向概述 數據檢索領域技術選型大體分為SQL事務數據庫、NoSQL數據庫、分析型數據庫三個類型。 SQL數據庫的設計思路是采用關系模型組織數據&#xff0c;注重讀寫操作的一致性&#xff0c;注重數據的絕對安全。為了實現這一思路&#xff0c;SQL數據庫往往會犧牲部分性能&…

高頻PCB設計如何選擇PCB層數?

以四層板為例&#xff0c;可以第一層和第二層畫信號&#xff0c;作為信號層。 第三層可以走電源&#xff0c;然后第四層走GND 但是更可以第一層和第三層畫信號。第二層可以走電源&#xff0c;然后第四層走GND 用中間的電源層以及地層可以起到屏蔽的作用&#xff0c;有效降低寄…

[Linux_69] 數據鏈路層 | Mac幀格式 | 局域網轉發 | MTU MSS

目錄 0.引入 1.以太網幀格式 2.重談局域網轉發的原理(基于協議) 小結 3.認識MTU 3.1MTU對IP協議的影響 3.2MTU對UDP協議的影響 3.3MTU對于TCP協議的影響 0.引入 在去年的這篇文章中&#xff0c;我們有對網絡進行過一個概述[Linux#47][網絡] 網絡協議 | TCP/IP模型 | 以…