上篇講到SQL Server中DML的基本使用方法,其中SELECT語句是最常用的語句,其功能強大,結構復雜,下面通過例子,具體介紹其使用方法。
2 SELECT查詢語句SELECT語句從數據表或視圖中查找數據,SELECT語法歸納如下:
[WITH <common_table_exPRession>]
SELECT select_list [INTO new_table_name]
[FROM table_source] [WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC] ]
假設現有如下三張表格,名稱分別為Student、Course和Grade,下面使用例子具體介紹各個子句的使用方法。
Student Course
Grade
3 簡單查詢WITH子句用于指定臨時命名的結果集,這些結果集稱為共用表表達式(CTE),來自簡單的查詢。也就是說,先通過WITH子句查找出一個臨時的表,再在該臨時表中進行查詢。語法如下(語法格式,大寫為關鍵字,[]為可選項,[,...]為可重復前一項):
WITH expression_name [(column_name [,…])] AS
(CTE_query_definition)
CTE_query_definition: 指定一個其結果集填充共用表達式的SELECT語句。
例如,在WITH子句中查找Student的年齡分布,放入臨時表AgeReport中,再查找AgeReport表,SQL語句如下:
結果如下:
SELECT指明要讀取的信息,FROM指定從中獲取數據的一個或多個表。SELECT中為查詢的列取別名方法:
別名 = 列名
列名 AS 別名
列名 別名
例如,查詢Student表中student_no和name并設置別名為學號和姓名:
結果如下:
創建新表并將查詢結果插入新表中。
[NOT] boolean_expression
Boolean_expression AND boolean_expression
Boolean_expression OR boolean_expressio
2. 比較運算符
= > < >= <= <>
例如,查找性別為女,年齡小于18的student:
3. LIKE關鍵字
Match_expression [NOT] LIKE pattern [ESCAPE escape_expression]
通配符% _ [] [^],%可匹配任何0個或多個字符,_匹配一個字符,[]指定范圍或集合,如 [a-f]或[abcdef]表示其中的一個字符,[^]同[]相反。
例如,查找姓李的學生:
4. BETWEEN關鍵字
BETWEEN...AND和NOT BETWEEN… AND
5. IS (NOT) NULL關鍵字
在WHERE子句中,不能用=來判斷NULL,只能用IS (NOT) NULL
例如,超找成績表中,成績為空的記錄:
6. IN關鍵字
使用IN關鍵字來指定列表搜索的條件,確定指定的值是否與子查詢或列表中的值相匹配。
Test_expression [NOT] IN (subquery | expression [,...])
7. ALL、SOME、ANY關鍵字
比較標量值和單列集中的值,與比較運算符和子查詢一起使用。
Scalar_expression {= | <> | > | >= | < | <= } {ALL | SOME | ANY} (subquery)
例如,查找學生中年齡比心雨和李小小都大(> ALL)的學生:
8. EXISTS關鍵字
用于指定一個子查詢是否存在
EXISTS subquery
表示按照一個或多個列或表達式的值將一組選定行組合成一個摘要行集,針對每一組返回一行。
GROUP BY group_by_expression [,...]
SELECT子句必須包括在聚類函數或GROUP BY子句中。常用的行聚合函數如下:
COUNT(*) | 返回組中的項數 | |
COUNT([ALL | DISTINCT] 列名]) | 返回某列的個數 | |
AVG([ALL | DISTINCT] 列名]) | 返回某列的平均值 | |
MAX([ALL | DISTINCT] 列名]) | 返回某列的最大值 | |
MIN([ALL | DISTINCT] 列名]) | 最小值 | |
SUM([ALL | DISTINCT] 列名]) | 總和 | |
STDEV([ALL | DISTINCT] 列名]) | 標準偏差 | |
STDEVP([ALL | DISTINCT] 列名]) | 總體標準偏差 | |
VAR([ALL | DISTINCT] 列名]) | 方差 | |
VARP([ALL | DISTINCT] 列名]) | 總體方差 |
例如,將學生按照性別分組,并統計人數:
指定組或聚合的搜索條件,通常在GROUP BY中使用。
HAVING search_condition
例如,將學生按照性別分組,并統計女生的人數
指定在SELECT語句返回的列表中所使用的排序方式。除非同時指定了TOP,否則ORDER BY子句在視圖、內聯函數、派生表和子查詢中無效。
ORDER BY {order_by_expression [COLLATE collation_name] [ASC | DESC] [,...]}
新聞熱點
疑難解答