一、語法結構
select select_list [ into new_table ] from table_source [ where search_condition ] [ group by broup_by_expression ] [ having search_condition ] [order by order_by_expression [ asc | desc ]
select查詢語句中的主要參數說明如下
select_list:查詢的列或者表達式的列表,用逗號進行分隔。
new_table:新的表名。
table_source:要查詢的表。如果是多個表,用逗號進行分隔。
search_condition:查詢條件。
group_by_expression:分組表達式。
order_by_expression:排序表達式。
asc:升序排序。
desc:降序排序。
select查詢語句字句的功能列表
| 子句 | 主要功能 | 是否必需 |
| select | 指定由查詢返回的列 | 是 |
| from | 指定要查詢的表 | 是 |
| into | 創建新表並將結果行插入新表中 | 否 |
| where | 查詢條件 | 否 |
| group by | 對查詢結果進行分組 | 否 |
| order by | 對查詢結果進行排序 | 否 |
| having | 對查詢結果進行篩選 | 否 |
二、選擇列表
選擇列表用於定義select語句的結果集中的列
1、* 查詢所有列:
select * from person
*就是結果集合,表示查詢person表中的所有列。
2、distinct 去除重復數據:
distinct是對所有列作用,也就是說,所有列都相同才算重復數據。
select distinct name from person
3、包含函數的查詢:
例如:
select count(*) from person
三、from子句
from子句實際上就是用逗號分隔的表名、視圖名和join字句的列表。使用from子句可以實現如下功能:
1、列出選擇列表和where子句引用的列所在的表和視圖。可以使用as子句為表和視圖指定別名。
2、聯接類型。這些類型由on子句中指定的聯接條件限定。
分配表名時可以使用如下形式
-
- table_name as table alias
- table_name as table_alias
需要特別說明的是,如果為表分配了別名,那么T-SQL語句中對該表的所有顯示引用都必須使用別名,而不能使用別名。
四、where子句
where子句可以篩選結果集的源表中的行。帶有where子句的select語句的結構如下:
select <字段列表> from <表名> where<條件表達式>
其中,條件表達式是由各種字段、常量、表達式、關系運算符、邏輯運算符和特殊的運算符組合起來的。
where子句中的運算符:
1、關系運算符
關系運算符用來表示兩個表達式之間的比較關系。
| 關系運算符 | 含義 |
| = | 等於 |
| < | 小於 |
| > | 大於 |
| !=(或<>) | 不等於 |
| >= | 大於等於 |
| <= | 小於等於 |
| !> | 不大於 |
| !< | 不小於 |
2、邏輯運算符
邏輯運算符用於表示兩個表達式之間的邏輯關系:
| 邏輯運算符 | 含義 |
| not | 非(否) |
| and | 與 |
| or | 或 |
3、特殊運算符
| 特殊運算符 | 含義 |
| % | 通配符,通常與like配合使用 |
| _ | 通配符,代表嚴格的一個字符。where name like '_xxx'將查找以xxx結尾的所有4個字母的名字(sxxx,dxxx等) |
| [] | 指定范圍([a-f])或集合([abcdefg])中的任何單個字符。where name like '[a-f]xxxx',將超找以abcdef開頭,xxxx結尾的字符。 |
| [^] | 不屬於指定范圍的([a-f])或集合([abcdefg])的任何單個字符。 |
| between | 定義一個取值范圍區間,使用and分開。between開始值與and結束值。 |
| like | 字符串匹配 |
| in | 一個字段的值是否在一組定義的值之中 |
| exists | 子查詢有結果集返回(則子查詢返回True) |
| not exists | 子查詢沒有結果集返回(則子查詢返回True) |
| is null | 字段是否為null |
| is not null | 字段是否不為null |
在WHERE子句中使用EXISTS(如果使用得當的話)可以大大提高性能。因為使用EXISTS時,只要找到和條件匹配的記錄,SQL Server就立即停止。假設有一個包含一百萬條記錄的表,並且在第三個記錄中找到了匹配的記錄,那么使用EXISTS選項將避免讀取999997條記錄!NOT EXISTS以同樣的方式工作。
五、group by子句
詳見地址:http://www.cnblogs.com/kissdodog/p/3365789.html
六、order by子句
order by子句用於指定結果集的排序
1、語法結構:
select <字段名列表> from 數據庫表名 [where <條件表達式>] [order by[<字段名或者表達式> [asc|desc],...]]
order by子句可以搭配where子句,也可以和select、fromD搭配使用,而不需要where子句。
order by子句的語法如下:
[ order by { order_by_expression [ asc | desc] } [ ,...n ] ]
其中主要的參數說明如下:
order_by_espression:指定要排序的列、列的別名、表達式或者指定為代表選擇列表內的名稱、別名或表達式的位置的負整數。
asc:按遞增順序對指定列中的值進行排序。
desc:按遞減順序對指定列中的值進行排序。
七、having篩選查詢
詳見地址:http://www.cnblogs.com/kissdodog/p/3365789.html
八、into查詢
into子句將查詢結果生成新表,新表的結構由查詢字段列表組成。也可以將查詢的結果送入tempdb數據庫的臨時表中,這樣關閉服務器之后臨時表會自動刪除。
into查詢的語法結構:
SELECT <字段名列表> [ into 新的數據表名 ] FROM 數據庫表名 [ where <條件表達式> ]
