MySQL中常見關(guān)鍵字的用法總結(jié)
GROUP BY用法
在MySQL中,GROUP BY語句用于將結(jié)果集按照一個或多個列進行分組。它常與聚合函數(shù)(如SUM、COUNT、AVG等)一起使用,對分組后的數(shù)據(jù)進行匯總計算。
GROUP BY語句具體怎么用呢,接下來詳細說明:
基本語法:
SELECT 列1, 列2, ..., 聚合函數(shù)
FROM 表名
GROUP BY 列1, 列2, ...
在GROUP BY子句中列出了要分組的列。查詢結(jié)果將根據(jù)這些列的值進行分組。
聚合函數(shù)是什么,怎么用?
可以在SELECT語句中使用各種聚合函數(shù)來計算分組后的結(jié)果,例如SUM、COUNT、AVG、MAX、MIN等。在GROUP BY語句中,聚合函數(shù)通常用于計算每個分組的值。
- 過濾分組: 我們可以在GROUP BY語句之前使用HAVING子句進行分組后的結(jié)果過濾。HAVING子句類似于WHERE子句,但它用于過濾分組后的數(shù)據(jù)。
- 排序分組: 可以在GROUP BY語句之后使用ORDER BY子句對分組后的結(jié)果進行排序。我們可以根據(jù)列名指定排序順序以及使用ASC(升序)或DESC(降序)關(guān)鍵字。
- 多列分組: GROUP BY語句可以根據(jù)一個或多個列進行分組。列出的列將成為分組的依據(jù),組合形成唯一的分組鍵。例如:
SELECT 列1, 列2, ..., 聚合函數(shù)
FROM 表名
GROUP BY 列1, 列2, ...
在使用GROUP BY時,我們需要注意的是:
SELECT語句中的列必須是GROUP BY子句中列出的列或聚合函數(shù)。
如果列中包含非聚合列且未在GROUP BY子句中列出,MySQL會根據(jù)該列進行隱式分組,但結(jié)果可能不符合預(yù)期。
GROUP BY子句中可以使用列的別名,而SELECT子句中不能使用。
我們使用一個小例子,演示如何使用GROUP BY語句:
SELECT department, COUNT(*) as total_employees, AVG(salary) as avg_salary FROM employees GROUP BY department HAVING avg_salary > 5000 ORDER BY total_employees DESC;
以上小栗子中,我們按照部門分組員工信息,計算每個部門的員工總數(shù)和平均薪資,并過濾出平均薪資超過5000的部門,并按照員工總數(shù)降序排序。
ORDER BY用法
MySQL中,ORDER BY子句用于對查詢結(jié)果進行排序。它可以按照一個或多個列進行升序(ASC)或降序(DESC)排序。
下面講解一下ORDER BY子句的詳細用法說明:
首先介紹下其基本語法:
SELECT 列1, 列2, ...
FROM 表名
ORDER BY 列1 [ASC|DESC], 列2 [ASC|DESC]
在ORDER BY子句中,我們可以使用一個或多個列作為排序依據(jù),并為每個列指定排序順序,ASC為升序(默認),DESC為降序。
單列排序: 如果只需要按照單個列進行排序,可以直接指定列名并選擇排序順序。
舉個栗子:
SELECT 列1, 列2, ...
FROM 表名
ORDER BY 列1 DESC;
上面是,根據(jù)列1的值進行降序排序。
多列排序: 如果需要按照多個列進行排序,可以在ORDER BY子句中指定多個列,并為每個列選擇排序順序。
例如:
SELECT 列1, 列2, ...
FROM 表名
ORDER BY 列1 DESC, 列2 ASC;
上面是,首先根據(jù)列1的值進行降序排序,如果出現(xiàn)相同的值,則根據(jù)列2的值進行升序排序。
排序NULL值: 可以使用NULLS FIRST或NULLS LAST關(guān)鍵字指定空值在排序中的位置。NULLS FIRST表示空值排在前面,NULLS LAST表示空值排在后面。
例如:
SELECT 列1, 列2, ...
FROM 表名
ORDER BY 列1 NULLS LAST;
上面上,空值將排在列1的排序結(jié)果的最后。
我們在使用ORDER BY關(guān)鍵字時需要注意,在ORDER BY子句中可以使用列的別名,但不能使用SELECT子句中的表達式或聚合函數(shù)。
通過一個栗子,為大家演示如何使用ORDER BY子句:
SELECT name, age, salary FROM employees ORDER BY salary DESC, age ASC;
上面上,我們按照薪資降序排序,并且對于相同薪資的員工,按照年齡升序排序。
因此,ORDER BY子句在MySQL中用于對查詢結(jié)果進行排序。我們可以指定一個或多個列,并選擇排序順序。
LIMIT關(guān)鍵字用法
MySQL中,LIMIT關(guān)鍵字用于限制查詢結(jié)果的返回行數(shù)。它可以幫助我們分頁顯示結(jié)果,或者僅返回某個范圍內(nèi)的行。
下面是LIMIT關(guān)鍵字的詳細用法說明:
首先還是先介紹基本語法:
SELECT 列1, 列2, ...
FROM 表名
LIMIT 行數(shù);
LIMIT子句會限制查詢結(jié)果返回的行數(shù)。我們可以指定要返回的行數(shù),例如10表示返回前10行。
分頁查詢: 在實際應(yīng)用中,常常需要進行分頁查詢,只返回指定頁碼的結(jié)果。在LIMIT子句中,可以指定兩個參數(shù),第一個參數(shù)為起始位置(偏移量),第二個參數(shù)為返回的行數(shù)。
舉個栗子:
SELECT 列1, 列2, ...
FROM 表名
LIMIT 偏移量, 行數(shù);
偏移量表示從查詢結(jié)果的哪一行開始返回結(jié)果,行數(shù)表示返回的行數(shù)。
偏移量的計算公式為:(頁碼 - 1) * 每頁行數(shù)
例如,如果每頁顯示10行數(shù)據(jù),要查詢第3頁的數(shù)據(jù),則偏移量為 (3-1)*10 = 20,表示從結(jié)果的第21行開始返回。
可選的簡化寫法: LIMIT子句還有一種簡化寫法,只指定要返回的行數(shù),而不指定偏移量。
舉個栗子:
SELECT 列1, 列2, ...
FROM 表名
LIMIT 行數(shù) OFFSET 偏移量;
這種寫法和第一種情況是等價的。
限制查詢結(jié)果: LIMIT子句也可以用于限制查詢結(jié)果的返回范圍。比如,我們可以指定返回前10條記錄中的第5到第8行。
舉個栗子:
SELECT 列1, 列2, ...
FROM 表名
LIMIT 4, 8;
上面小栗子,返回結(jié)果將從第5行開始,返回8行數(shù)據(jù)。
因此我們需要注意的是,在使用LIMIT子句時,偏移量和行數(shù)都應(yīng)該是非負整數(shù)。
到此這篇關(guān)于MySQL中常見關(guān)鍵字的用法總結(jié)的文章就介紹到這了,更多相關(guān)MySQL關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL的事務(wù)的基本要素和事務(wù)隔離級別詳解
這篇文章主要介紹了MySQL的事務(wù)的基本要素和事務(wù)隔離級別,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04一次Mysql使用IN大數(shù)據(jù)量的優(yōu)化記錄
這篇文章主要給大家介紹了關(guān)于Mysql使用IN大數(shù)據(jù)量的優(yōu)化的實戰(zhàn)記錄,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09mysql could not be resolved: Name or service not known
今天查看mysql日志的時候發(fā)現(xiàn)[Warning] IP address '10.0.0.220' could not be resolved: Name or service not known,原來是mysql DNS反解:skip-name-resolve的原因,屏蔽一下就可以了2015-08-08