閱讀目錄sql
1. AVG函數函數
該函數的做用是經過對錶中行數並計算其列值之和,而後求他們的平均值。spa
以下代碼:select avg(password) as avg_password from user;code
如上代碼的含義是:從user表中查詢password這個字段,求他們的平均值,而後該列的平均值別名叫 avg_password;blog
以下圖所示:排序
固然咱們能夠對特定的列或行的平均值。以下是對特定的列的平均值。以下代碼:it
select avg(password) as avg_password from user where username = 'cccc';
如上代碼的含義是:從user表中查找password這個字段平均值,而後根據username='cccc' 這個條件去查找。所以以下圖所示:table
如上所示:如上代碼包含了where子句這個條件去查找user表中的數據。class
2.理解COUNT()函數select
該函數的做用是肯定表中行的數目或符合特定條件的行的數目。
該函數有2種使用方式:
1. 使用count(*) 對錶中行的數目進行計數,無論表中包含的是空值(null) 仍是非空值。
2. 使用count(column) 對特定列中具備值的行進行計數,忽略NULL值。
以下語法:select count(*) as num_count from user;
該代碼的做用是:從user表中查詢總行數,而後把該列的別名叫作 num_count; 以下圖所示:
在如上代碼中,使用了count(*) 對全部的行計數,無論行中各列有什麼值。它都返回到總行數裏面去。
3.理解max()函數
max()函數返回指定列中的最大值。max()要求指定列名,以下所示:
select max(password) as max_value from user;
如上代碼的含義是:查詢user表中password字段的最大值,取名該列的別名爲 max_value. 以下圖所示:
4.理解min()函數
min()函數的做用是返回指定列的最小值。該函數和max()方法同樣須要指定列名。以下所示:
select min(password) as min_value from user;
以下圖所示:
5.理解sum()函數
該函數的做用是返回指定列值的和。以下代碼:
select sum(password) as items_password from user where username='cccc';
以下圖所示:
6 建立分組(group by)
好比說我想知道user表中的某個數據的總數有多少,咱們通常會使用咱們前面介紹的count這個函數來計算,好比以下代碼:
select count(*) as num_count from user where username='cccc';
如上語法的含義是 咱們查詢user這張表中的全部數據,而後根據字段 username ='cccc' 這個條件去查找的。以下所示:
可是若是我如今想知道每一個表中的username對應的各個字段的總數是多少,咱們該怎麼辦呢?咱們總不可能每一個都去執行一遍吧?那麼這個時候分組就很是有用了。
分組是使用select語句的group by子句創建的。好比以下代碼:
select username, count(*) as num_count from user group by username;
如上代碼的含義是: 從user這張表中查詢username這個字段,經過username這個字段去獲取該總數。而後把該username的別名叫 num_count; 以下所示:
group by 注意事項:
group by子句能夠包含任意數目的列,所以能夠對分組進行嵌套。更細緻地進行數據分組。
7 HAVING過濾分組
除了能用group by分組數據外,咱們還可使用過濾分組,規定包括哪些分組,排除哪些分組。咱們以前也說過 where語句也能夠進行過濾條件,可是where只能過濾的是行,而不是分組,所以咱們這邊不能使用where來過濾分組。所以 HAVING子句就出現了。
注意:HAVING支持全部的where操做符。
以下代碼:
select username,count(*) as num_count from user group by username having count(*) >=2;
如上代碼的含義是:查詢user這張表,根據username這個字段進行分組,而且根據username這個字段查詢到對應的總數,而且過濾的條件是總數大於2的數量。所以會把username這個字段總數小於2的數據會所有過濾掉,以下圖所示:
having和where的差異:
where在數據分組前進行過濾的,having在數據分組後進行過濾的。這是這兩個用法的最主要的區別。
那麼咱們也能夠把這二者一塊兒使用,以下語法:
select username,count(*) as num_count from user where password > 200 group by username having count(*) = 1;
如上代碼的含義是:查詢user這張表中全部的數據,根據username這個字段去獲取該user表中的總數,而後使用where語句去根據password這個字段進行判斷,該值大於200的數據。而且使用username進行分組,而且分組後的數據總數等於1的數據。以下所示:
8 分組和排序(order by)
group by是對數據進行分組,那麼order by就是對分組後的數據進行排序。好比以下語法:
select username,count(*) as items from user group by username having count(*) >= 2 order by items, username;
如上代碼含義是:查詢user這張表中的字段username,經過username這個字段獲取總數,而且經過having這個關鍵字過濾掉總數小於2的數據,最後咱們經過 order by經過別名items進行排序。以下圖所示:
select 子句順序一些含義:
select: 要返回的列或表達式。
where: 行級過濾。
group by: 分組說明
having: 分組過濾
order by: 對分組進行排序。
9. 建立組合查詢(UNION 和 UNION ALL)
sql查詢只包含從一個或多個表中返回數據的單條select語句。可是sql也容許執行多個查詢(多條select語句)。並將結果做爲一個查詢結果集返回。這些組合查詢通常叫複合查詢。
有下面兩種狀況須要組合查詢:
1. 在一個查詢中從不一樣的表返回結構數據。
2. 對一個表執行多個查詢,按一個查詢返回數據。
可使用UNION操做符來組合多條sql查詢。利用UNION, 可給出多條select語句,將他們的結果組合成一個結果集。
使用UNION很簡單,在各條select語句之間放上關鍵字 UNION。
舉個列子,好比 我使用 select * from user where username in ('aaaa','eeee'); 這個sql語句查詢出數據出來後,我再使用以下這個:select * from user where id=27; 語句也能查詢出數據,那麼我如今想結合這兩種查詢,查詢出數據,那麼須要sql語句以下:
select * from user where username in ('aaaa','eeee') UNION select * from user where id=27;
以下圖所示:
可是咱們使用or關鍵字更簡單,如:select * from user where username in ('aaaa','eeee') or id=27;
以下所示:
注意:對於在多個表中檢索數據的情形,使用UNION可能處理更簡單,可是對於一個表中使用多條語句查詢建議使用or關鍵字可能會簡單。
10. 對組合查詢結果排序
在使用UNION組合查詢時,只能使用一條ORDER BY 子句進行排序,而且它必須位於最後一條select語句以後。
以下語句:
select * from user where username in ('aaaa','cccc') UNION ALL select * from user where id=27 order by username;
以下圖所示:
11. 建立表的語句使用 create table 語句。
1. 建立表的語句使用 create table 語句。
CREATE TABLE User ( ID int NOT NULL AUTO_INCREMENT, UserName varchar(255) NOT NULL, Password varchar(255) NOT NULL, PRIMARY KEY (ID) );
12. 更新表使用 alter table 語句
好比咱們想給user表添加一列,就使用 alter table user add age int(20); 語句,會增長一列age。以下所示:
13. 刪除表中的列
刪除表中的列,使用 alter table user drop column age; 語句,以下所示:
如上是使用drop column 關鍵字刪除age這個列。
14. 刪除表 drop table 表名;
刪除表 drop table 表名; 語法:drop table user3; 以下所示: