MYSQL中的簡單查詢
MYSQL簡單查詢
完整語法:
select [distinct] , … [from [where ] [group by , … [having ] ] [order by asc| desc ] [limit [offset , ] rows ] ]
select 簡單查詢
select 1 ; -- 往往用來 做 數(shù)據(jù)庫心跳檢測 select user() ; -- 獲取 當(dāng)前登錄的用戶信息 select version() ; -- 獲取數(shù)據(jù)庫的版本號 select now() ; -- 獲取 當(dāng)前系統(tǒng)時間 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' ; -- 查詢的時候 name的值 不區(qū)分大小寫 select * from tb_user where binary name = 'admin' ; -- 查詢的 name 值 區(qū)分大小寫
基于分組的查詢
- count() : 用來 統(tǒng)計 個數(shù)
-- 查詢 學(xué)生表中 有多少個 學(xué)生 select count(*) from student ; -- 以行為單位 ,統(tǒng)計有多少個學(xué)生 select count(stuNo) from student ; -- 根據(jù)學(xué)號 來統(tǒng)計 有多少個學(xué)生 select count(1) from student ; -- 根據(jù)常量值 進行統(tǒng)計、如果有值,個數(shù) + 1
從性能上 、 count(1 ) > count( * ), count(column) 只統(tǒng)計該列中 值不為 null 的 行數(shù)(null不參與統(tǒng)計) 。
如果 count(column) 中的 column 中的列 有索引,那么性能 會 比 count(1) 高 、 如果沒有索引,性能 比 count(*) 還低
- sum() : 求和
-- 查詢學(xué)生的總成績 select sum(score) from student ; -- sum 函數(shù) 參數(shù) 只能傳入 字段名, 字段列中對應(yīng)的 null 不參與 求和
- avg() : 求平均值
-- 查詢學(xué)生 的平均成績 select avg(score) from student ; -- sum 函數(shù) 參數(shù) 只能傳入 字段名, 字段列中對應(yīng)的 null 不參與 求平均值 select avg ( ifnull(score, 0) ) from student ; -- 字段列對應(yīng)的 null, 則 取 0 , 仍舊參與 求 平均值
- max() : 求最大值
-- 查詢 最高分 select max(score) from student ;
- min() : 求最小值
-- 查詢 最低分 select min(score) from student ; -- 空值不參與 求 最小值
group by 實現(xiàn) 分組查詢
-- 查詢 不同 性別的 學(xué)生人數(shù) select sex, count(1) from student group by sex ;
group by 分組 對查詢的 列 有 要求 , 要么 查詢的 列 是一個 聚合 列 、要么 出現(xiàn) 在 group by 的 后面,作為分組依據(jù)。
having 分組 篩選
對分組后的結(jié)果 進行過濾 、篩選, having 是 基于 group by 存在 的。
-- 查詢 班級中 同名 、同性別 的 學(xué)生名 和 性別 select name, gender from student group by name ,gender having count(1) > 1 ;
where 和 having 的區(qū)別
- where 是 對 表中的 數(shù)據(jù) 進行篩選 , having 是 對 分組后的 結(jié)果 進行 篩選 。
- where 和 having 如果 同時 存在 ,那么 where 先篩選 再分組 再過濾
- where 條件 中 不能使用 聚合函數(shù) 、但 having 可以使用 聚合函數(shù)
- 能用 where 篩選過濾的數(shù)據(jù) 、盡量不要用 having 篩選
數(shù)據(jù)排序 order by
-- 查詢 所有的學(xué)生信息 、按照 成績降序排列,當(dāng)成績相同的時候 ,按照 出生日期 降序排列 select * from student order by score desc , birth desc ;
當(dāng) 有多個字段 參與排序的時候, 優(yōu)先根據(jù) 第一個排序的字段 進行排序,當(dāng) 第一個字段 的值 相同的時候,才會根據(jù)第二個字段的值進行排序、依此類推。
分頁查詢 limit
select * from student limit 3 ; -- 查詢表中 前 3 條數(shù)據(jù) select * from student limit 10 , 3 ; -- 查詢表中 從 第 11條數(shù)據(jù)開始 3 條數(shù)據(jù) select * from student limit 10 offset 3 ;
分頁查詢的時候, 如果 包含 order by , 那么 建議根據(jù) 唯一鍵 進行排序 、如果 根據(jù) 的字段值有大量的重復(fù)、建議 使用 多個字段排序 , 否則 會出現(xiàn) 分頁數(shù)據(jù)紊亂 。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL復(fù)合查詢(多表查詢、子查詢)的實現(xiàn)
MySQL復(fù)合查詢是指在一個SQL語句中使用多個查詢條件,以過濾和檢索數(shù)據(jù),本文主要介紹了MySQL復(fù)合查詢(多表查詢、子查詢)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-12-12MySQL文本文件導(dǎo)入及批處理模式應(yīng)用說明
MySQL文本文件導(dǎo)入及批處理模式應(yīng)用說明,需要的朋友可以參考下。2011-09-09