国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

這篇具有很好參考價值的文章主要介紹了【MySQL 數(shù)據(jù)查詢】:提高查詢的效率。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

?歡迎來到小K的MySQL專欄,本節(jié)將為大家?guī)?code>MySQL數(shù)據(jù)查詢的講解(基本、分組、排序、聚合、分頁、條件查詢)


一、基本查詢

MySQL數(shù)據(jù)庫使用SELECT語句來查詢數(shù)據(jù)

?1、查詢多個字段

以下為MySQL數(shù)據(jù)庫中查詢數(shù)據(jù)通用的SELECT語法:

SELECT 字段名,字段名... FROM 表名;
SELECT * FROM 表名; #查詢所有字段
  • 查詢語句中可以使用一個或者多個表,表之間使用逗號(,)分隔,并使用WHERE語句來設(shè)定查詢條件
  • SELECT命令可以讀取一條或者多條記錄
  • 你可以使用星號( * )來替代其它字段,SELECT語句會返回表的所有字段數(shù)據(jù)

?2、設(shè)置別名

SELECT 字段1 [AS 別名],字段2 [AS 別名]... FROM 表名;

?3、去除重復(fù)記錄

SELECT DISTINCT 字段列表 FROM 表名;

?4、四則運(yùn)算查詢

運(yùn)算符 描述
+ 加法
- 減法
* 乘法
/(DIV) 除法
%(MOD) 求余

?5、基本查詢練習(xí)

  1. 查詢指定字段 ename,job,sal的數(shù)據(jù)
SELECT ename,job,sal FROM emp;
  1. 查詢所有字段,建議不要寫 * ——不直觀 影響效率 遵循開發(fā)規(guī)范最好不要寫* 把所有字段寫出了,一目了然
SELECT * FROM emp;

SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp;
  1. 查詢所有員工的職位,并起別名
SELECT job AS '工作' FROM emp;
SELECT job '工作' FROM emp;   # as 可以省略
  1. 查詢員工的的職位有哪些(不要重復(fù))
SELECT DISTINCT job FROM emp;
  1. 查詢員工年薪 即 sal* 12
SELECT ename AS '姓名',sal AS '月薪',sal*12 AS '年薪' FROM emp;

?效果如下
【MySQL 數(shù)據(jù)查詢】:提高查詢的效率
【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

二、條件查詢

我們知道從 MySQL 表中使用 SELECT 語句來查詢數(shù)據(jù),如需有條件地從表中選取數(shù)據(jù),可將 WHERE 子句添加到 SELECT 語句中。

?語法

SELECT 字段名 FROM 表名 WHERE 條件;

?運(yùn)算符表

關(guān)系運(yùn)算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
邏輯運(yùn)算符 功能
AND 或 && 并且(多個條件同時成立)
OR 或 || 或者(多個條件任意成立一個)
NOT 或 ! 非,不是
其他 功能
BETWEEN…AND… 在某個范圍之間(含最小、最大值)
IN(…) 在in之后的列表中的值,多選一
LIKE 模糊匹配(_匹配單個字符,%匹配任意個字符)
IS [NOT] NULL 是 NULL

?條件查詢練習(xí)

  1. 查詢工資等于3000的員工
SELECT ename,sal FROM emp WHERE sal=3000;
  1. 查詢工資小于1000的員工
SELECT ename,sal FROM emp WHERE sal<1000;
  1. 查詢工資小于等于1000的員工
SELECT ename,sal FROM emp WHERE sal<=1000;
  1. 查詢沒有獎金的員工
SELECT * FROM emp WHERE comm is NULL;
  1. 查詢有獎金的員工
SELECT * FROM emp WHERE comm is NOT NULL;
  1. 查詢工資在1200到1800之間的員工(包含1200和1800)
SELECT *FROM emp WHERE sal>=1200 && sal<=1800;
SELECT *FROM emp WHERE sal BETWEEN 1200 AND 1800;
  1. 查詢職位為推銷員,且工資小于1500的員工
SELECT * FROM emp WHERE job='salesman'&& sal<1500;
  1. 查詢工資為800 或 3000 或 5000的員工
SELECT * FROM emp WHERE sal in(800,3000,5000);
  1. 查詢姓名為四個字的員工
SELECT * FROM emp WHERE ename LIKE '____';
  1. 查詢姓名最后一位是S的員工
SELECT * FROM emp WHERE ename LIKE '%s';

?效果如下

【MySQL 數(shù)據(jù)查詢】:提高查詢的效率
【MySQL 數(shù)據(jù)查詢】:提高查詢的效率
【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

三、聚合函數(shù)(統(tǒng)計函數(shù))

SQL允許對表中的數(shù)據(jù)進(jìn)行計算,將一列數(shù)據(jù)作為一個整體,進(jìn)行縱向計算

函數(shù)名 作用
MAX(column) 返回某列的最高值(沒有則返回NULL)
MIN(column) 返回某列的最低值(沒有則返回NULL)
COUNT(column) 返回某列的行數(shù)(不包括 NULL 值)
COUNT(*) 返回被選列行數(shù)(包括NULL)
SUM(column) 求和
AVG(column) 求平均值

其中COUNT函數(shù)可用于任何數(shù)據(jù)類型(因為它只是計數(shù)),而SUM、AVG函數(shù)只能對數(shù)值類型做計算,MAXMIN可用于數(shù)值、字符串或是日期時間數(shù)據(jù)類型

?聚合函數(shù)練習(xí)

  1. 統(tǒng)計該企業(yè)員工數(shù)量
SELECT COUNT(*) FROM emp;
SELECT COUNT(comm) FROM emp;
SELECT COUNT(mgr) FROM emp;
  1. 統(tǒng)計該企業(yè)員工的平均工資
SELECT AVG(sal) FROM emp;
  1. 查詢該企業(yè)員工的最高工資
SELECT MAX(sal) FROM emp;
  1. 查詢該企業(yè)員工的最低工資
SELECT MIN(sal) FROM emp;
  1. 計算所有銷售的工資之和
SELECT SUM(sal) as '銷售總工資' FROM emp WHERE job='salesman';

?效果如下

【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

四、分組查詢

需要聲明一點的是,雖然說統(tǒng)計函數(shù)一般是搭配分組查詢,但是單獨(dú)使用的情況一定是有的。例如:在做報表顯示的時候基本的分頁操作,一定要查詢出全部的數(shù)據(jù)

?那么什么是分組呢?

分組這個概念在生活中其實是很常見的,比如有以下需求:

  • 1.在一個班級之中,要求男女各一組進(jìn)行辯論賽
  • 2.在公司中,要求每個部門一組進(jìn)行拔河比賽

對于第一個需求,假設(shè)存在學(xué)生表,那么在學(xué)生表之中一定會存在一個性別字段,性別只可能是男或者女。
而在公司之中,如果要進(jìn)行部門分組,肯定需要一個部門列的內(nèi)容存在重復(fù)。

分組只對數(shù)據(jù)有重復(fù)的字段才有意義,我們可以查看emp表,找到可以分組的字段job 和 deptno。

?語法

SELECT 分組字段/聚合函數(shù) FROM 表名 [WHERE 條件] GROUP BY 分組字段 [HAVING 分組后條件];

?分組查詢練習(xí):

  1. 統(tǒng)計出每個工作崗位的人數(shù)
SELECT job,COUNT(*) '總?cè)藬?shù)' FROM emp GROUP BY job;
  1. 統(tǒng)計出每種職位的最低和最高工資
SELECT job,MAX(sal),MIN(sal) FROM emp GROUP BY job;

以上兩個查詢就實現(xiàn)了分組的基本操作,而且這些代碼都按照標(biāo)準(zhǔn)格式進(jìn)行了編寫??墒窃诜纸M之中,個人認(rèn)為最麻煩的地方就是在于分組操作的若干限制。

?注意事項:

  1. 如果一個查詢之中不存在GROUP BY子句,那么SELECT 子句之中只允許出現(xiàn)統(tǒng)計函數(shù),其它任何字段都不允許出現(xiàn)

    #錯誤的語句
    SELECT ename,COUNT(job) FROM emp;
    #正確的語句
    SELECT COUNT(job) FROM emp;
    
  2. 在統(tǒng)計查詢之中(存在GROUP BY子句),SELECT子句之中只允許出現(xiàn)分組字段(GROUP BY之后定義的字段和統(tǒng)計函數(shù)),其他的任何字段都不允許出現(xiàn)

    #錯誤的語句
    SELECT ename,COUNT(job) FROM emp GROUP BY job;
    #正確的語句
    SELECT job,COUNT(job) FROM emp GROUP BY job;
    

    在以后進(jìn)行分組操作的時候,本著一個原則:GROUP BY子句之中允許出現(xiàn)的字段才是SELECT子句中允許出現(xiàn)的字段。

?HAVING查詢練習(xí)

  1. 顯示不同職位薪資少于1500的人數(shù)
SELECT job,COUNT(*) FROM emp WHERE sal<1500 GROUP BY job HAVING COUNT(*)>3;
  1. 顯示非銷售人員(salesman)工作名稱以及從事同一工作的員工的月工資的總和,并且要滿足從事同一工作的員工的月工資合計大于等于5000。
SELECT job,SUM(sal) '月薪' FROM emp WHERE job!='salesman' GROUP BY job HAVING SUM(sal)>=5000;

?效果如下:
【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

?WHEREHAVING區(qū)別

  • WHERE是在分組之前使用(可以沒有GROUP BY),不允許使用統(tǒng)計函數(shù);
  • HAVING是在分組之后使用(必須結(jié)合GROUP BY),允許使用統(tǒng)計函數(shù)。

【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

五、排序查詢

?通過條件查詢語句可以查詢到符合用戶需求的數(shù)據(jù),但是查詢到的數(shù)據(jù)一般都是按照數(shù)據(jù)最初被添加到表中的順序來顯示。為了使查詢結(jié)果的順序滿足用戶的要求,MySQL 提供了 ORDER BY關(guān)鍵字來對查詢結(jié)果進(jìn)行排序。

在實際應(yīng)用中經(jīng)常需要對查詢結(jié)果進(jìn)行排序,比如,在網(wǎng)上購物時,可以將商品按照價格進(jìn)行排序;在醫(yī)院的掛號系統(tǒng)中,可以安裝掛號的先后順序進(jìn)行排序…

?語法:

SELECT 字段名 FROM 表名 ... ORDER BY 排序字段名[ASC|DESC],排序字段名[ASC|DESC];

?語法說明:

  • 排序字段名:表示需要排序的字段名稱,多個字段時用逗號隔開。
  • ASC|DESCASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC為默認(rèn)值。

?特點

  • ORDER BY子句一般放在查詢語句的最后面,LIMIT字句除外。
  • 當(dāng)排序的字段中存在空值時,ORDER BY會將該空值作為最小值來對待。
  • ORDER BY指定多個字段進(jìn)行排序時,MySQL會按照字段的順序從左到右依次進(jìn)行排序。
  • **注意:**在對多個字段進(jìn)行排序時,排序的第一個字段必須有相同的值,才會對第二個字段進(jìn)行排序。如果第一個字段數(shù)據(jù)中所有的值都是唯一的,MySQL將不再對第二個字段進(jìn)行排序。

?排序查詢練習(xí)

  1. 根據(jù)姓名對員工進(jìn)行排序(升序)
SELECT* FROM emp ORDER BY ename ASC;
  1. 查詢?nèi)肼殨r間大于1981年6月6日的員工信息,并按照入職時間升序排列
SELECT* FROM emp WHERE hiredate>'1981-6-6' ORDER BY hiredate DESC;
  1. 根據(jù)工作職位,進(jìn)行升序排列,職位相同的情況下,再根據(jù)入職時間降序排列
SELECT* FROM emp ORDER BY job ASC,hiredate DESC;
  1. 查詢工資不在1000到2000之間的員工的姓名和工資,工資按降序排列
SELECT * FROM emp WHERE sal<1000 || sal>2000 ORDER BY sal DESC;
  1. 按工作職位進(jìn)行分組,查看每個工作職位的人數(shù),工作職位按升序排列
SELECT job,COUNT(*) FROM emp GROUP BY job ORDER BY job ASC; 

?效果如下:
【MySQL 數(shù)據(jù)查詢】:提高查詢的效率
【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

五、分頁查詢

對于比較多的數(shù)據(jù),如果在一個頁面全部顯示,查看起來會眼花繚亂。如果能進(jìn)行分頁顯示,將更加快捷、清新的瀏覽!

?語法:

SELECT 字段名 FROM 表名 LIMIT 起始索引,查詢記錄數(shù);

?特點:

  • 起始索引從0開始,起始索引=(查詢頁碼-1) 每頁顯示記錄數(shù)*
  • 如果查詢的是第一頁數(shù)據(jù),起始索引可以省略,直接簡寫為LIMIT 10

?分頁查詢練習(xí):

  1. 查詢第一頁員工數(shù)據(jù),每頁展示10條記錄
SELECT * FROM emp LIMIT 0,10;
  1. 查詢工資大于1500的員工數(shù)據(jù),按工資升序排列,并分頁,每頁展示5條數(shù)據(jù)
SELECT* FROM emp WHERE sal>1500 ORDER BY sal ASC LIMIT 0,5;
SELECT* FROM emp WHERE sal>1500 ORDER BY sal ASC LIMIT 5,5;

?效果展示:

【MySQL 數(shù)據(jù)查詢】:提高查詢的效率

六、總結(jié)

?掌握基本的數(shù)據(jù)查詢更有利于我們管理數(shù)據(jù),處理數(shù)據(jù)之間的關(guān)系會更加得當(dāng)~?下節(jié)見?文章來源地址http://www.zghlxwxcb.cn/news/detail-483082.html

到了這里,關(guān)于【MySQL 數(shù)據(jù)查詢】:提高查詢的效率的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • es 在數(shù)據(jù)量很大的情況下(數(shù)十億級別)如何提高查詢效率?_es能存多少數(shù)據(jù)

    es 在數(shù)據(jù)量很大的情況下(數(shù)十億級別)如何提高查詢效率?_es能存多少數(shù)據(jù)

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長,但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新軟件測試全套學(xué)習(xí)資料》

    2024年04月26日
    瀏覽(36)
  • 互聯(lián)網(wǎng)大廠技術(shù)-elasticsearch(es)- 在數(shù)據(jù)量很大的情況下(數(shù)十億級別)提高查詢效率

    互聯(lián)網(wǎng)大廠技術(shù)-elasticsearch(es)- 在數(shù)據(jù)量很大的情況下(數(shù)十億級別)提高查詢效率

    互聯(lián)網(wǎng)大廠技術(shù)-elasticsearch(es)- 在數(shù)據(jù)量很大的情況下(數(shù)十億級別)提高查詢效率 目錄 一、問題分析 二、問題剖析 三、性能優(yōu)化的殺手锏(filesystem cache) 四、數(shù)據(jù)預(yù)熱 五、冷熱分離 六、document 模型設(shè)計 七、分頁性能優(yōu)化 八、解決方案 這個問題是肯定要問的,說白了,就

    2024年02月04日
    瀏覽(26)
  • MySQL---表數(shù)據(jù)高效率查詢(簡述)

    MySQL---表數(shù)據(jù)高效率查詢(簡述)

    前言 一、聚合查詢 ??聚合函數(shù) ??GROUP BY子句 ??HAVING 二、聯(lián)合查詢 ??內(nèi)連接 ??外連接 ??自連接 ??子查詢 ??合并查詢 ??博主介紹:博客名為tq02,已學(xué)C語言、JavaSE,目前學(xué)了MySQL和JavaWeb ??學(xué)習(xí)專欄:??C語言? ? ? ? ?JavaSE? ? ? ?MySQL基礎(chǔ) ??博主鏈接:tq02的博客

    2024年02月13日
    瀏覽(22)
  • MySQL數(shù)據(jù)庫索引優(yōu)化指南:提升查詢效率的利器

    MySQL數(shù)據(jù)庫索引優(yōu)化指南:提升查詢效率的利器

    本文將詳細(xì)探討MySQL數(shù)據(jù)庫索引的概念、作用以及不同類型的索引,包括主鍵索引、唯一索引和普通索引。通過實際案例分析,我們將深入理解索引的工作原理,并提供實用的優(yōu)化建議,幫助讀者提升數(shù)據(jù)庫性能。

    2024年02月09日
    瀏覽(124)
  • MySQL大數(shù)據(jù)表處理的三種方案,查詢效率嘎嘎高

    MySQL大數(shù)據(jù)表處理的三種方案,查詢效率嘎嘎高

    場景 當(dāng)我們業(yè)務(wù)數(shù)據(jù)庫表中的數(shù)據(jù)越來越多,如果你也和我遇到了以下類似場景,那讓我們一起來解決這個問題 數(shù)據(jù)的插入,查詢時長較長 后續(xù)業(yè)務(wù)需求的擴(kuò)展 在表中新增字段 影響較大 表中的數(shù)據(jù)并不是所有的都為有效數(shù)據(jù) 需求只查詢時間區(qū)間內(nèi)的 評估表數(shù)據(jù)體量 我們可

    2024年02月13日
    瀏覽(21)
  • 查詢效率至少提高4倍的MySQL技巧

    SQL語句中IN包含的值不應(yīng)過多 MySQL對于IN做了相應(yīng)的優(yōu)化,即將IN中的常量全部存儲在一個數(shù)組里面,而且這個數(shù)組是排好序的。但是如果數(shù)值較多,產(chǎn)生的消耗也是比較大的。再例如:select id from t where num in(1,2,3) 對于連續(xù)的數(shù)值,能用between就不要用in了;再或者使用連接來替

    2024年04月26日
    瀏覽(26)
  • openGauss學(xué)習(xí)筆記-198 openGauss 數(shù)據(jù)庫運(yùn)維-常見故障定位案例-分析查詢效率異常降低的問題

    openGauss學(xué)習(xí)筆記-198 openGauss 數(shù)據(jù)庫運(yùn)維-常見故障定位案例-分析查詢效率異常降低的問題

    198.1 分析查詢效率異常降低的問題 198.1.1 問題現(xiàn)象 通常在幾十毫秒內(nèi)完成的查詢,有時會突然需要幾秒的時間完成;而通常需要幾秒完成的查詢,有時需要半小時才能完成。 198.1.2 處理辦法 通過下列的操作步驟,分析查詢效率異常降低的原因。 使用analyze命令分析數(shù)據(jù)庫。

    2024年01月16日
    瀏覽(26)
  • Mysql數(shù)據(jù)庫(五) Mysql命令行客戶端:內(nèi)連接查詢、左連接查詢、右連接查詢、自連接查詢、子查詢

    Mysql數(shù)據(jù)庫(五) Mysql命令行客戶端:內(nèi)連接查詢、左連接查詢、右連接查詢、自連接查詢、子查詢

    目錄 一、 連接查詢 對多個表進(jìn)行查詢 1.0 數(shù)據(jù)準(zhǔn)備 1.1 連接查詢 1.2 內(nèi)連接?INNER JOIN 1.3 左連接?LEFT JOIN 1.4 右連接?RIGHT JOIN 1.5 FULL OUTER JOIN 1.6 自連接查詢 1.7 子查詢-嵌套在查詢中 在之前的文章當(dāng)中,我們在 base_1 當(dāng)中有了一個 stu 表,記錄的是學(xué)生的name age height等信息 第一步

    2024年02月13日
    瀏覽(24)
  • MySQL數(shù)據(jù)庫——MySQL WHERE:條件查詢數(shù)據(jù)

    在 MySQL 中,如果需要有條件的從數(shù)據(jù)表中查詢數(shù)據(jù),可以使用?WHERE?來指定查詢條件。 使用 WHERE 的語法格式如下: WHERE 查詢條件 查詢條件可以是: 帶比較運(yùn)算符和邏輯運(yùn)算符的查詢條件 帶 BETWEEN AND 的查詢條件 帶 IS NULL 的查詢條件 帶 IN

    2024年02月03日
    瀏覽(29)
  • MySQL數(shù)據(jù)查詢

    SELECT SELECT [ALL|DISTINCT] column1,column2,……#ALL表示保留所有,DISTINCT表示去掉目標(biāo)列值重復(fù)的元組 FROM table_name [WHERE condition] [GROUP BY 字段名 HAVING condition]#查詢結(jié)果按照字段進(jìn)行分組,該字段相等的為一組 [ORDER BY 字段名 [ASC|DESC]]#每個分組的查詢結(jié)果按字段排序,ASC升序,DESC降序

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包