用SELECT語句實現數據庫的查詢操作。同時,它還可以使用各種子句對查詢結果進行分組統計、合計、排序等操作。SELECT語句還可將查詢結果生成另一個表(臨時表或永久表)。
SELECT語句的語法格式為:
在SELECT語句中,子句可以省略,但在列出時必須按照以上順序。
簡單查詢:
簡單的SQL查詢只包括SELECT列表、FROM子句和WHERE子句,它們分別說明所查詢列、查詢操作的表或視圖以及搜索條件等。
例:查詢title表中1991年出版的"business"類圖書及其價格。
SELECT title,price
FROM titles
WHERE DATEPART(YEAR,pubdate)=1991 AND type='business'
1.Select列表語句
SELECT列表語句(select_list)指定所選擇的列,它可以為一組列名列表、星號、表達式、變量(包括局部變量和全局變量)等構成。
(1)選擇所有列
用星號表示選擇指定表或視圖中的選擇所有列
SELECT * FROM discounts
選擇指定列並指定它們的顯示次序
在SELECT列表語句中指定列名來選擇不同的列,各列之間用逗號分隔,顯示結果中數據的排列順序為列名的列表順序。
SELECT discount,discounttype FROM discounts
在SELECT列表中,還可以對數值進行算術運算(包括加、減、乘、除、取模等)。
其中,加、減、乘、除操作適用於任何數值型列(如int,smallint,tinyint,decimal,numeric,float,real,money,smallmoney等),而取模操作不能用於money和smallmoneyu數據類型列。
對數值進行運算時,如果列值為空(null),則所執行的所有算術操作的結果仍為空:
SELECT discounttype,'lowqty+50'=lowqty+50
FROM discounts
在SELECT列表中,還可以指定字符串常量或變量輸出結果的顯示格式:
DECLARE @var char(12)
SELECT @VAR='折扣幅度'
SELECT '折扣名稱:',discounttype,@var,discount
SELECT discounts
(2)刪除重復行
SELECT語句可以使用ALL|DISTINCT選項來顯示所有行(ALL)或刪除重復的行(DISTINCT),缺省時為ALL。使用DISTINCT選項時,對於所有數據重復的SELECT列表值只顯示一次。
SELECT DISTINCT country FROM publishers
2.FROM子句
FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。在FROM子句中最多可指定16個表或視圖,它們相互之間用逗號分隔,如果這些表或視圖屬於不同的數據庫,可用“數據庫.所有者名稱.對象”格式限定表或視圖對象。
SELECT au_id,titles.title_id
//由於在兩個表中都存在"title_id"列,加入"titles."避免二義性
FROM titles,titleauthor
WHERE titles.title_id=titleauthor.title_id
在FROM子句中,可為每個表或視圖指定一個別名,別名緊跟在對象名稱之後,之間用空格分隔,然後可以使用別名引用表中各列。
SELECT au_id,t.title_id
FROM titles t,titleauthor ta
WHERE t.title_id=ta.title_id
用WHERE子句限定搜索條件,SELECT語句中使用WHERE子句指定查詢條件。
WHERE語句中可包含的運算符,如下表:
例1:范圍運算符:相交書價為$10~$30之內的圖書
SELECT title,price
FROM titles
WHERE price BETWEEN $10 AND $30
例2:列表運算符:列出publishers表中社址在德國和法國的出版社
SELECT pub_name
FROM publishers
WHERE country IN('germany','france')
3.模式匹配符
模式匹配符[NOT] LIKE常用於模糊條件查詢,它判斷列值是否與指定的字符串格式相匹配,可用於char,varchar,datetime和smalldatetime數據類型。可使用的通配字符有以下幾種:
●百分號%:可匹配任意類型長度的字符;
●下劃線_:匹配單個字符,它常用來限制表達式的字符長度;
●方括號[]:指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個字符;
●[^]:其取值與[]相同,但它要求所匹配對象為指定字符以外的任一個字符。
例6:列出名稱長度為5個字符,且以'GG'開頭的出版社
SELECT pub_name
FROM publishers
WHERE pub_name LIKE 'GG_'
例7:空值判斷符:查找目前仍未定價的圖書
SELECT title,price
FROM titles
WHRER price IS NULL
例8:邏輯運算符:列出收價低於$5或高於$15且當年銷量小於5000的圖書
SELECT price,ytd_sales,title
FROM titles
WHERE(price<$5 OR price>$15) AND ytd_sales<5000
查詢結果排序
在SELECT語句中,使用ORDER BY語句對查詢結果按一列或多列進行排序。ORDER BY子句的語法格式為:
例:列出"business"類的圖書標識和價格,結果排序方式為:價格由高到低,title_id列由低到高。
SELECT title_id,price
FROM titles
WHERE type='business'
ORDER BY price DESC,title_id,ASC