(5)MySQL的查詢:模糊查詢(通配符查詢like)、限制符查詢(limit)、排序查詢(order by)、分組查詢(group by)、(子查詢)


注意事項

指令語法的優先級: where > group by >order by > limit

例:select count(id) as cnt,age from tablename where id > 6 group by age having cnt < 2 order by age desc limit 2,5

PS:查找tablename表中age列從id列大於6后面開始分組,且計算age值相同的數量,然后查詢相同數量小於2的數據以age降序排列,且從第二行開始取值一頁顯示5條

 

通配符查詢:like  #數據庫查詢肯定用索引,所以這個知識只要了解即可

固定用法like + 條件

1、% 代表所有字符(like ‘n%’ ) #查詢只要以n開頭的

2、_  代表一個字符(like 'n_')   #查詢只要字符串內有n都查詢到

where后面可以跟比較運算符和邏輯運算符(=、<、>、!=、not、or、and)

PS:如果用like去搜索,就無法使用索引查詢,索引查詢的速度要快與通配符查詢

 

限制符查詢:limit

PS:應用在網頁每頁呈現多少數據

select * from tablename limit 5; #tablename就是表名,數字5就是要取幾行數據

select * from tablename limit offset(4),5  #offset就是偏移量,意思就是從第幾行開始,5就是要取幾行

 

限制符查詢實例:page=1 的時候取10條數據

思路:page=1的時候就取10條,就是從數據庫中取10行(0-10),第二頁就是要從數據庫的10行開始取10條,以此類推

page = 1 limit 0,10

page = 2 limit 10,20

page = 3 limit 20,10

指令就是  page = n select * from tablename where 查詢條件 limit (n-1)*10,10

 

排序查詢

select * from tablename order by age;  #將列表中的數據通過age來進行升序排序,后面有asc和desc兩個參數,如果不寫,默認按照升序進行排序

select * from tablename order by age asc;  #acs就是按照升序 排列

select * from tablename order by age desc;  #desc就是按照降序排列

select * from tablename order by age desc,id asc;  #優先按照age降序排列,如果age有相同的,就按照id進行升序排列 

 

分組查詢(用到分組查詢必須要有一個聚合函數這是一定的配套的)

PS:where 和having 的區別(都是用來過濾數據的),但是不同的where是過濾的原生的數據(沒有經過處理的數據,比如分組等),having是過濾group by(分組)之后的數據進行二次篩選,這個程序設計者設計的,固定的

PS:where是可以和having配合使用的,但是必須在group by 分組之前使用,即select count(id) as cut,age from tablename where id > 6 group by age having cnt < 2 #查找tablename中age列下序號6以后的值,並且分組默認升序排列,且計算相同的數量,查找相同數量<2的數據

聚合函數:

count()  #計數

max()  #最大值

min()  #最小值

avg()  #去平均

sum() #求和

PS:sum和count是不同的,sum是做計算,count只是數個數

 

語法:

select 聚合函數 as name,條件1 from tablename group by 分組條件  #as name 是將聚合函數修改一個名字,能夠更直觀的在列表內呈現 \ group by 后面的就是以什么分組的條件 \ 條件1就是列表內需要查詢的列名

PS:條件1肯定是和分組條件一樣的,否則會出現數據查詢不完全

 

select count(id) as cnt,age from tablename group by age;   #分組age並且計算這個組相同的條件的數量   

select count(id) as cnt,age from tablename  group by age having cnt < 2; #查詢tablename表中age列然后計算相同age值的數量並且查找相同age數量<2的數據

 

 

where和having連用

select count(id) as cut,age from tablename where id > 6 group by age having cnt < 2 #查找tablename表中age列,且id列>6的值,並且分組,且計算相同的數量,查找相同數量<2的數據

 

子查詢(sql語句套sql語句) #不建議用,使用子查詢后無法用索引,而且效率比連表查詢還慢

select * from tablename1 where 列名 in (select 列名 from tablename2); 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM