MYSQL中的簡(jiǎn)單查詢
MYSQL簡(jiǎn)單查詢
完整語(yǔ)法:
select [distinct] , … [from [where ] [group by , … [having ] ] [order by asc| desc ] [limit [offset , ] rows ] ]
select 簡(jiǎn)單查詢
select 1 ; -- 往往用來(lái) 做 數(shù)據(jù)庫(kù)心跳檢測(cè) select user() ; -- 獲取 當(dāng)前登錄的用戶信息 select version() ; -- 獲取數(shù)據(jù)庫(kù)的版本號(hào) select now() ; -- 獲取 當(dāng)前系統(tǒng)時(shí)間 select last_insert_id() ; -- 獲取 最后插入的主鍵(必須是自增)
基于 表查詢
select <columnName> , .... from <tableName> ; select * from <tableName> ; -- 查詢 表中所有的字段 , 在生產(chǎn)環(huán)境中 不推薦使用 * 查詢所有字段
基于條件的查詢
select <columnName> , ... from <tableName> where <condition> ; select * from tb_user where name = 'admin' ; -- 查詢的時(shí)候 name的值 不區(qū)分大小寫(xiě) select * from tb_user where binary name = 'admin' ; -- 查詢的 name 值 區(qū)分大小寫(xiě)
基于分組的查詢
- count() : 用來(lái) 統(tǒng)計(jì) 個(gè)數(shù)
-- 查詢 學(xué)生表中 有多少個(gè) 學(xué)生 select count(*) from student ; -- 以行為單位 ,統(tǒng)計(jì)有多少個(gè)學(xué)生 select count(stuNo) from student ; -- 根據(jù)學(xué)號(hào) 來(lái)統(tǒng)計(jì) 有多少個(gè)學(xué)生 select count(1) from student ; -- 根據(jù)常量值 進(jìn)行統(tǒng)計(jì)、如果有值,個(gè)數(shù) + 1
從性能上 、 count(1 ) > count( * ), count(column) 只統(tǒng)計(jì)該列中 值不為 null 的 行數(shù)(null不參與統(tǒng)計(jì)) 。
如果 count(column) 中的 column 中的列 有索引,那么性能 會(huì) 比 count(1) 高 、 如果沒(méi)有索引,性能 比 count(*) 還低
- sum() : 求和
-- 查詢學(xué)生的總成績(jī) select sum(score) from student ; -- sum 函數(shù) 參數(shù) 只能傳入 字段名, 字段列中對(duì)應(yīng)的 null 不參與 求和
- avg() : 求平均值
-- 查詢學(xué)生 的平均成績(jī) select avg(score) from student ; -- sum 函數(shù) 參數(shù) 只能傳入 字段名, 字段列中對(duì)應(yīng)的 null 不參與 求平均值 select avg ( ifnull(score, 0) ) from student ; -- 字段列對(duì)應(yīng)的 null, 則 取 0 , 仍舊參與 求 平均值
- max() : 求最大值
-- 查詢 最高分 select max(score) from student ;
- min() : 求最小值
-- 查詢 最低分 select min(score) from student ; -- 空值不參與 求 最小值
group by 實(shí)現(xiàn) 分組查詢
-- 查詢 不同 性別的 學(xué)生人數(shù) select sex, count(1) from student group by sex ;
group by 分組 對(duì)查詢的 列 有 要求 , 要么 查詢的 列 是一個(gè) 聚合 列 、要么 出現(xiàn) 在 group by 的 后面,作為分組依據(jù)。
having 分組 篩選
對(duì)分組后的結(jié)果 進(jìn)行過(guò)濾 、篩選, having 是 基于 group by 存在 的。
-- 查詢 班級(jí)中 同名 、同性別 的 學(xué)生名 和 性別 select name, gender from student group by name ,gender having count(1) > 1 ;
where 和 having 的區(qū)別
- where 是 對(duì) 表中的 數(shù)據(jù) 進(jìn)行篩選 , having 是 對(duì) 分組后的 結(jié)果 進(jìn)行 篩選 。
- where 和 having 如果 同時(shí) 存在 ,那么 where 先篩選 再分組 再過(guò)濾
- where 條件 中 不能使用 聚合函數(shù) 、但 having 可以使用 聚合函數(shù)
- 能用 where 篩選過(guò)濾的數(shù)據(jù) 、盡量不要用 having 篩選
數(shù)據(jù)排序 order by
-- 查詢 所有的學(xué)生信息 、按照 成績(jī)降序排列,當(dāng)成績(jī)相同的時(shí)候 ,按照 出生日期 降序排列 select * from student order by score desc , birth desc ;
當(dāng) 有多個(gè)字段 參與排序的時(shí)候, 優(yōu)先根據(jù) 第一個(gè)排序的字段 進(jìn)行排序,當(dāng) 第一個(gè)字段 的值 相同的時(shí)候,才會(huì)根據(jù)第二個(gè)字段的值進(jìn)行排序、依此類推。
分頁(yè)查詢 limit
select * from student limit 3 ; -- 查詢表中 前 3 條數(shù)據(jù) select * from student limit 10 , 3 ; -- 查詢表中 從 第 11條數(shù)據(jù)開(kāi)始 3 條數(shù)據(jù) select * from student limit 10 offset 3 ;
分頁(yè)查詢的時(shí)候, 如果 包含 order by , 那么 建議根據(jù) 唯一鍵 進(jìn)行排序 、如果 根據(jù) 的字段值有大量的重復(fù)、建議 使用 多個(gè)字段排序 , 否則 會(huì)出現(xiàn) 分頁(yè)數(shù)據(jù)紊亂 。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql中一千萬(wàn)條數(shù)據(jù)怎么快速查詢
很多人在使用Mysql時(shí)沒(méi)有考慮到優(yōu)化問(wèn)題,如果遇到上千萬(wàn)數(shù)據(jù)量的表,查詢上千萬(wàn)數(shù)據(jù)量的時(shí)候會(huì)發(fā)生什么問(wèn)題,本文就來(lái)介紹一下如何快速查詢一千萬(wàn)條數(shù)據(jù),感興趣的可以了解一下2021-12-12MySQL窗口函數(shù)OVER()用法及說(shuō)明
這篇文章主要介紹了MySQL窗口函數(shù)OVER()用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08MySQL復(fù)合查詢(多表查詢、子查詢)的實(shí)現(xiàn)
MySQL復(fù)合查詢是指在一個(gè)SQL語(yǔ)句中使用多個(gè)查詢條件,以過(guò)濾和檢索數(shù)據(jù),本文主要介紹了MySQL復(fù)合查詢(多表查詢、子查詢)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12MySQL文本文件導(dǎo)入及批處理模式應(yīng)用說(shuō)明
MySQL文本文件導(dǎo)入及批處理模式應(yīng)用說(shuō)明,需要的朋友可以參考下。2011-09-09mysql日常使用中常見(jiàn)報(bào)錯(cuò)大全
MySQL初學(xué)者新安裝好數(shù)據(jù)庫(kù)及使用過(guò)程中經(jīng)常遇到以下幾類錯(cuò)誤,本文給大家詳細(xì)整理并給出完美解決方案,感興趣的朋友跟隨小編一起看看吧2023-03-03