MySQL單表查詢進(jìn)階教程(最全面!)
前言
查詢是數(shù)據(jù)操作至關(guān)重要的一部分,比如說(shuō)在所有商品中查找出價(jià)格在規(guī)定范圍內(nèi)的所有商品,要想把數(shù)據(jù)庫(kù)中的數(shù)據(jù)在客戶端中展示給用戶,一般都進(jìn)行了查詢的操作。
在實(shí)際開(kāi)發(fā)中,我們要根據(jù)不同的需求,并且考慮查詢的效率來(lái)決定怎樣進(jìn)行查詢,學(xué)習(xí)查詢前,可以先看看查詢的完整語(yǔ)法:
SELECT
字段列表
FROM
表名列表
WHERE
條件列表
GROUP BY
分組字段
HAVING
分組后條件
ORDER BY
排序字段
LIMIT
分頁(yè)限定
根據(jù)查詢的完整語(yǔ)法中的關(guān)鍵字,我們分別來(lái)學(xué)習(xí)基礎(chǔ)查詢,條件查詢,排序查詢,分組查詢和分頁(yè)查詢。
我們使用以下的案例學(xué)習(xí)單表查詢:
-- 刪除stu表 drop table if exists stu; -- 創(chuàng)建stu表 CREATE TABLE stu ( id int, -- 編號(hào) name varchar(10), -- 姓名 age int, -- 年齡 gender varchar(5), -- 性別 math double(5,2), -- 數(shù)學(xué)成績(jī) english double(5,2) -- 英語(yǔ)成績(jī) ); -- 添加數(shù)據(jù) INSERT INTO stu(id,name,age,gender,math,english) VALUES (1,'小張',23,'男',66,78), (2,'小李',20,'女',98,87), (3,'小陳',55,'男',56,77), (4,'小樊',20,'女',76,65), (5,'小馬',20,'男',86,NULL), (6,'小趙',57,'男',99,99);
在Navicat中選中SQL執(zhí)行:
1. 基礎(chǔ)查詢
1.1 基礎(chǔ)查詢語(yǔ)法
查詢多個(gè)字段:
select 字段列表 from 表名;
查詢?nèi)孔侄危?/p>
select * from 表名;
去除重復(fù)記錄:
select distinct 字段列表 from 表名;
起別名操作:
select 字段名 別名 from 表名;
1.2 基礎(chǔ)查詢練習(xí)
我們使用前言中的案例進(jìn)行基礎(chǔ)查詢練習(xí):
查詢多個(gè)字段的練習(xí):
select name,math from stu;
起別名操作練習(xí):
select name,english 英語(yǔ)成績(jī) from stu;
2. 條件查詢
2.1 條件查詢語(yǔ)法
一般語(yǔ)法:
select 字段列表 from 表名 where 條件列表;
條件查詢一般配合運(yùn)行符進(jìn)行,下面是常見(jiàn)的幾個(gè)運(yùn)算符:
運(yùn)算符 | 功能描述 |
---|---|
> < = ! | 大于 小于 等于 不等于 |
between…and… | 在這個(gè)范圍之內(nèi) |
in(…) | 多選一 |
is null / is not null | 是null / 不是null |
and 或 && | 并且 |
or 或 || | 或者 |
2.2 條件查詢練習(xí)
我們使用前言中的案例進(jìn)行條件查詢練習(xí):
查詢年齡大于20的學(xué)生信息:
select * from stu where age>20;
查詢年齡等于18歲 或者 年齡等于20歲 或者 年齡等于21歲的學(xué)生信息:
select * from stu where age in(18,20,21);
模糊查詢使用like關(guān)鍵字,可以使用通配符進(jìn)行占位:
- _ : 代表單個(gè)任意字符
- % : 代表任意個(gè)數(shù)字符
查詢姓名中含有張的學(xué)生信息:
select * from stu where name like '%張%';
3. 排序查詢
3.1 排序查詢語(yǔ)法
select 字段列表 from 表名 order by 排序字段名1 [排序方式]...;
注:排序方式又兩種:分別是升序ASC和降序DESC,默認(rèn)情況下是升序ASC。
3.2 排序查詢練習(xí)
我們使用前言中的案例進(jìn)行排序查詢練習(xí):
4. 聚合函數(shù)
4.1 聚合函數(shù)語(yǔ)法
什么是聚合函數(shù)呢?在進(jìn)行查詢操作時(shí),我們往往需要對(duì)一整列進(jìn)行運(yùn)算,例如我們可以計(jì)算一整列成績(jī)數(shù)據(jù)的平均值,我們就要使用聚合函數(shù)。下面是常見(jiàn)的聚合函數(shù):
函數(shù)名 | 功能 |
---|---|
count(列名) | 統(tǒng)計(jì)數(shù)量(一般選用不為null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
一般語(yǔ)法:
select 聚合函數(shù) from 表名;
注:NULL值不參與聚合函數(shù)運(yùn)算。
4.2 聚合函數(shù)練習(xí)
我們使用前言中的案例進(jìn)行聚合函數(shù)的練習(xí):
統(tǒng)計(jì)該表中一共有幾個(gè)學(xué)生:
select count(id) from stu;
上面我們使用某一字段進(jìn)行運(yùn)算,這樣做可能面臨的問(wèn)題是某一個(gè)值可能是NULL,所以我們一般使用 *
進(jìn)行運(yùn)算,因?yàn)橐恍兄胁豢赡芩械淖侄味际荖ULL。
select count(*) from stu;
查詢數(shù)學(xué)成績(jī)的平均分:
select avg(math) from stu;
5. 分組查詢
5.1 分組查詢語(yǔ)法
select 字段列表 from 表名 [where 分組前的條件限定] group by 分組字段名 [having 分組后的條件過(guò)濾]
注:分組之后,查詢的字段為聚合函數(shù)和分組字段,查詢其他字段無(wú)任何意義。
5.2 分組查詢練習(xí)
我們使用前言中的案例進(jìn)行分組查詢練習(xí):
查詢男同學(xué)和女同學(xué)各自的數(shù)學(xué)平均分,以及各自人數(shù),要求:分?jǐn)?shù)低于70分的不參與分組:
select gender, avg(math),count(*) from stu where math > 70 group by gender;
查詢男同學(xué)和女同學(xué)各自的數(shù)學(xué)平均分,以及各自人數(shù),要求:分?jǐn)?shù)低于70分的不參與分組,分組之后人數(shù)大于2個(gè)的:
select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;
注:where 和 having
執(zhí)行時(shí)機(jī)不一樣:where 是分組之前進(jìn)行限定,不滿足where條件,則不參與分組,而having是分組之后對(duì)結(jié)果進(jìn)行過(guò)濾。所以,where 不能對(duì)聚合函數(shù)進(jìn)行判斷,having 可以。
6. 分頁(yè)查詢
6.1 分頁(yè)查詢語(yǔ)法
在大家的印象中,網(wǎng)頁(yè)在展示大量的數(shù)據(jù)時(shí),往往不是把數(shù)據(jù)一下全部展示出來(lái),也是用分頁(yè)展示的形式,其實(shí)就是對(duì)數(shù)據(jù)進(jìn)行分頁(yè)查詢的操作,即每次只查詢一頁(yè)的數(shù)據(jù)展示到頁(yè)面上。
select 字段列表 from 表名 limit 查詢起始索引,查詢條目數(shù);
在 limit
關(guān)鍵字中,查詢起始索引這個(gè)參數(shù)是從0開(kāi)始的。
6.2 分頁(yè)查詢練習(xí)
我們使用前言中的案例進(jìn)行分頁(yè)查詢練習(xí):
從0開(kāi)始查詢,查詢3條數(shù)據(jù):
select * from stu limit 0,3;
起始索引 = (當(dāng)前頁(yè)碼 - 1) * 每頁(yè)顯示的條數(shù)
7. 總結(jié)
結(jié)合經(jīng)典案例的練習(xí),我們已經(jīng)完成了單表查詢所有的基礎(chǔ)和練習(xí)訓(xùn)練,查詢作為對(duì)數(shù)據(jù)操作最重要的一部分,一定要不斷地練習(xí)才能熟練的進(jìn)行操作。
到此這篇關(guān)于MySQL單表查詢進(jìn)階的文章就介紹到這了,更多相關(guān)MySQL單表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決mysql與navicat建立連接出現(xiàn)1251錯(cuò)誤
在本篇文章里小編給大家整理了一篇關(guān)于mysql與navicat建立連接出現(xiàn)1251錯(cuò)誤怎么解決的技術(shù)文章,需要的朋友們參考下。2019-08-08Mysql解決數(shù)據(jù)庫(kù)N+1查詢問(wèn)題
在本篇文章里小編給大家分享了關(guān)于Mysql解決數(shù)據(jù)庫(kù)N+1查詢問(wèn)題的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。2019-07-07Mysql 5.7.18安裝方法及啟動(dòng)MySQL服務(wù)的過(guò)程詳解
這篇文章主要介紹了Mysql 5.7.18安裝方法及啟動(dòng)MySQL服務(wù)的過(guò)程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05sql語(yǔ)句escape查詢數(shù)據(jù)中含通配字符[ %用法詳解
這篇文章主要為大家介紹了sql語(yǔ)句escape查詢數(shù)據(jù)中含通配字符[ %用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08mysql中g(shù)roup by與having合用注意事項(xiàng)分享
在mysql中g(shù)roup by分組查詢我們經(jīng)常會(huì)用到,并且還同時(shí)會(huì)與having合用,下面我介紹group by用法與having合用注意事項(xiàng),希望此教程對(duì)各位朋友有所幫助2013-10-10MySQL 多個(gè)%等模糊查詢功能實(shí)現(xiàn)
這篇文章主要介紹了MySQL 多個(gè)%等模糊查詢功能實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07MySQL中關(guān)于null值的一個(gè)小問(wèn)題
這篇文章主要介紹了MySQL中關(guān)于null值的一個(gè)小問(wèn)題,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-03-03