天天看點

MySQL-查詢

mysql一次查詢,傳回多個統計結果

1.sum(if)

select 

sum(if(status=1,1,0)) as s1_count,

sum(if(status=2,1,0)) as s2_count

from order;

2.count()

select 

count(status=1 or null) as s1_count,

count(status=2 or null) as s2_count

1. 查詢的基本文法

select * from 表名;

• from關鍵字後面寫表名,表示資料來源于是這張表

• select後面寫表中的列名,如果是*表示在結果中顯示表中所有列

• 在select後面的列名部分,可以使用as為列起别名,這個别名出現在結果集中

• 如果要查詢多個列,之間使用逗号分隔

2. 某列消除重複行

• 在select後面列前使用distinct可以消除重複的行

select distinct gender from students;

條件-where

• 使用where子句對表中的資料篩選,結果為true的行會出現在結果集中

select * from 表名 where 條件;

1. 比較運算符

• 等于=

• 大于>

• 大于等于>=

• 小于<

• 小于等于<=

• 不等于!=或<>

查詢沒被删除的學生

select * from students where isDelete=0;

查詢被删除的學生

select * from students where isDelete=1;

2. 邏輯運算符--and,or,not

• and

• or

• not取反

select * from students where id<4 or not isdelete=1;

3. 模糊查詢--like

• like

• %表示任意多個任意字元

• _表示一個任意字元

查詢姓黃或叫靖的學生

select * from students where name like '黃%' or name like '_靖';

4. 範圍查詢--in,  between..and  

• in表示在一個非連續的範圍内 

• 查詢編号是1或3或8的學生

select * from students where id in(1,3,8);

• between ... and ...表示在一個連續的範圍

查詢學生是3至8的學生

select * from students where id between 3 and 8;

5. 空判斷--is null,is not null

• 空判斷--is null,is not null

查詢沒有填寫位址的學生

select * from students where hometown is null;

6. 優先級

• 小括号,not,比較運算符,邏輯運算符

• and比or先運算,如果同時出現并希望先算or,需要結合()使用

聚合:聚合指的是把一列中出現的一系列的值形成單一值的運算。 比如說一列中各個值的和或平均值

函數 作用

count 計算表中的記錄(行數)

sun() 計算表中數值列的資料合計值

avg() 計算表中數值列的資料平均值

max() 求出表中任意列中資料的最大值

min() 求出表中任意列中資料的最小值

• count(*)表示計算總行數,括号中寫星與列名,結果是相同的

• 查詢學生總數

select count(*) from students;

• max(列)表示求此列的最大值

• 查詢女生的編号最大值

select max(id) from students where gender=0;

• min(列)表示求此列的最小值

• 查詢未删除的學生最小編号

select min(id) from students where isdelete=0;

• sum(列)表示求此列的和

• 查詢男生的編号之和

select sum(id) from students where gender=1;

• avg(列)表示求此列的平均值

• 查詢未删除女生的編号平均值

select avg(id) from students where isdelete=0 and gender=0;

分組

• 按照字段分組,表示此字段相同的資料會被放到一個組中

• 分組後,隻能查詢出相同的資料列,對于有差異的資料列無法出現在結果集中。

• 可以對分組後的資料進行統計,做聚合運算

1. 分組文法

• 文法:select 列1,列2,聚合... from 表名 group by 列1,列2,列3...

查詢男女生總數

select gender as 性别,count(*) from students group by gender;

查詢删除和未删除的人數

select isdelete as 是否删除, count(*)  from students group by isdelete;

2. 分組後的資料篩選

文法:select 列1,列2,聚合...from 表名group by 列1,列2,列3..having 列1,.聚合..

查詢男生總人數

select gender as 性别,count(*) from students group by gender having gender=1;

排序

• 為了友善檢視資料,可以對資料進行排序

1. 排序文法  select * from 表名 order by 列1 asc|desc,列2 asc|desc,...

•将行資料按照列1進行排序,如果某些行列1的值相同時,則按照列2排序,以此類推

•預設按照列值從小到大排列

•asc從小到大排列,即升序

•desc從大到小排序,即降序

查詢未删除男生學生資訊,按學号降序

select * from students where gender=1 and isdelete=0 order by id desc;

分頁文法

select * from 表名 limit start,count

• 從start開始,擷取count條資料

• start索引從0開始

select * from students limit 0,2;

limit (n-1)*m,m    n代表第幾頁,m要差詢多少條資料

select * from students where isdelete=0 limit (n-1)*m,m