說到SQL語句,大家最開始想到的就是他的查詢語句:
select * from tableName;
這是最簡單的一種查詢方式,不帶有任何的條件。
當然在我們的實際應用中,這條語句也是很常用到的,當然也是最簡單的。在考慮到性能的時候,我們一般不這么寫!具體怎么寫,請關注后續的文章。。。
下面我們着重的看下文章標題所提到的幾個子句。
一、Where
在英文中翻譯為:在哪里,在什么地方。
在SQL語句中又該如何進行翻譯呢?
如下一句:
select * from tableName where id="2012";
就是尋找表tableName中,id=2012的記錄。
這里的where對查詢的結果進行了篩選。只有滿足where子句中條件的記錄才會被查詢出來。
對於where子句沒什么高深的東西,而且也是最常見的東西,大家都太熟了。在這里不進行過多的介紹哈!
二、Group By
group by子句,我們放在select子句中的列必須也要放在group by子句中,除非在select子句中不指定任何列。 這句總感覺有問題?請大牛指點。
我們先看上面的這個表格,假如現在讓你找出Apple在China,Japan,USA的平均價格,你怎么辦?
我們可以這么做:select avg(price) from tablename where fruitname="apple";
Group By 一般是和一些聚合函數一起使用,比如上面我們用到的求平均的函數avg,還有求和sum,求個數count,求最大max,求最小min and so on.
對於上表,求每種水果的最大的價格:select fruitname,productplace,max(price) from tablename group by fruitname
Group By 還有一個重要的合作對象,他就是having
三、Having
我們用Group By 進行分組后,如何對分組后的結果進行一個篩選呢?having來幫您解決這個難題。
1.首先看一個例子:求平均價格在3.0以上的水果
如果我們使用這個:
select fruitname,avg(price) from tablename where avg(price)>=3.0 group by fruitname ;
這樣能否達到我們的要求呢?
答案是否定的,因為where子句不能使用聚合函數。為了解決這個問題,我們來用下我們的殺手鐧,他就是Having;
改寫如下:select fruitname,avg(price) from tablename group by fruitname having avg(price)>=3.0;
2.我們繼續看Having的另外一個匪夷所思
select fruitname,avg(price) from tablename group by fruitname having price<2.0;
這個查詢的結果你們覺得會是什么呢?
沒錯,就是 orange 0.8 ;只有這一條記錄
為什么呢?為什么Apple沒有被查到呢,因為apple的有的價格超出了2.0.
另外運算符in也可以用在having 子句。
select fruitname,avg(price) from tablename group by fruitname having fruitname in ("orange","apple");
四、Order By
Order By是對查詢的結果進行一個再排序的過程,一般放在查詢語句的最后,可以是單列,也可以實現多列的排序。
分為升序asc和降序desc,默認的為升序。
Order By單列的排序比較簡單,多列的也不麻煩。
select * from tablename group by friutname order by fruitname asc,price desc.
轉自:http://blog.csdn.net/qitian0008/article/details/7840845