本節書摘來自異步社群出版社《sql初學者指南(第2版)》一書中的第2章,第2.6節,作者:【美】larry rockoff,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
本書大部分内容都與本章所介紹的select語句相關。從第3章到第15章,我們将擴充這條select語句,不斷引入新的特性,直到你了解和了解select的全部潛力和功能。這裡,我們隻是簡單介紹了select語句如下的這個部分:
為了不留懸念,我們先來預覽一下完整的select語句,并且簡單介紹一下其各個不同的組成部分。包含了全部子句的、完整的select語句如下所示:
我們已經介紹了select子句和from子句。讓我們在這些子句基礎上來進行一些擴充,介紹一下其他子句。select子句開始了整條語句,并且列出了将要顯示的列。在後面的章節中,你會看到,columnlist不僅可以包含指定的表中的實際的列,而且可以包含計算的列,而這些計算的列通常由表中的一個或多個列派生而來。columnlist中的列還可以包含函數,而函數代表着添加常用方法以轉換資料的一種特殊方式。
from子句指定了将要從中提取資料的資料源。大多數情況下,這些資料源是表。在後面的章節中,我們将了解到,這些資料源也可以是其他的select語句,它們表示的是資料的一種虛拟視圖(view)。在本章中,tablelist是一個單個的表。在後邊的章節中,我們将會介紹sql的一個關鍵特性,就是通過join關鍵字把多個表組合到一條select語句中。是以,你将會看到很多這樣的例子:其中from子句中的tablelist是由多行語句組成的,這表示将這些表連接配接了起來。
where子句用來表示查詢邏輯。我們使用該子句來确切地指定要擷取哪些資料行。where子句可以使用基本的數學運算符,如等号(=)和大于号(>),以及布爾運算符,如or和and。
group by子句在彙總資料方面扮演了關鍵的角色。通過把資料組織到不同的組中,分析師不僅可以組織資料,而且可以使用諸如求和或者計數等不同的統計方法,來彙總每一個組中的資料。
當對資料分組的時候,選擇标準變得多少有點複雜了。必然要搞清楚的一個問題是,這個選擇标準是應用于單個的行,還是應用于整個組。例如,當按照所在的州來對客戶分組的時候,某人可能隻有在一個州之中所有客戶的購買總量超過一定的數量時,才想要檢視這個州中的單個客戶的資料行。這個時候,having子句就派上用場了。having子句用于為整個一組的資料指定選擇邏輯。
最後,使用order by子句按照升序或降序來排序資料。在後邊章節中,我們會介紹到,如果select語句中的各種子句都存在的話,它們的順序必須和前面給出的select語句一般格式中的順序相同。例如,如果一條select語句中有一個group by子句,它必須出現在where子句之後,而位于having子句之前。
除了上述的子句,我們還會介紹編寫select語句的一些其他方法,包括子查詢和集合邏輯。子查詢是把一條完整的select語句插入到另一條select語句中的一種方法,對于特定類型的選取邏輯往往很有用。集合邏輯是将多條查詢并列地組合成一條單個的查詢的一種方法。