一
簡單查詢
簡單的Transact
SQL查詢只包括選擇列表
FROM子句和WHERE子句
它們分別說明所查詢列
查詢的 表或視圖
以及搜索條件等
例如
下面的語句查詢testtable表中姓名為
張三
的nickname字段和email字段
SELECT nickname
email
FROM testtable
WHERE name=
張三
(一)選擇列表
選擇列表(select_list)指出所查詢列
它可以是一組列名列表
星號
表達式
變量(包括局部變量和全局變量)等構成
選擇所有列
例如
下面語句顯示testtable表中所有列的數據
SELECT *
FROM testtable
選擇部分列並指定它們的顯示次序
查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同
例如
SELECT nickname
email
FROM testtable
更改列標題
在選擇列表中
可重新指定列標題
定義格式為
列標題=列名
列名 列標題
如果指定的列標題不是標准的標識符格式時
應使用引號定界符
例如
下列語句使用漢字顯示列
標題
SELECT 昵稱=nickname
電子郵件=email
FROM testtable
刪除重復行
SELECT語句中使用ALL或DISTINCT選項來顯示表中符合條件的所有行或刪除其中重復的數據行
默認
為ALL
使用DISTINCT選項時
對於所有重復的數據行在SELECT返回的結果集合中只保留一行
限制返回的行數
使用TOP n [PERCENT]選項限制返回的數據行數
TOP n說明返回n行
而TOP n PERCENT時
說明n是
表示一百分數
指定返回的行數等於總行數的百分之幾
例如
SELECT TOP
*
FROM testtable
SELECT TOP
PERCENT *
FROM testtable
(二)FROM子句
FROM子句指定SELECT語句查詢及與查詢相關的表或視圖
在FROM子句中最多可指定
個表或視圖
它們之間用逗號分隔
在FROM子句同時指定多個表或視圖時
如果選擇列表中存在同名列
這時應使用對象名限定這些列
所屬的表或視圖
例如在usertable和citytable表中同時存在cityid列
在查詢兩個表中的cityid時應
使用下面語句格式加以限定
SELECT username
citytable
cityid
FROM usertable
citytable
WHERE usertable
cityid=citytable
cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名
表名 as 別名
表名 別名
例如上面語句可用表的別名格式表示為
SELECT username
b
cityid
FROM usertable a
citytable b
WHERE a
cityid=b
cityid
SELECT不僅能從表或視圖中檢索數據
它還能夠從其它查詢語句所返回的結果集合中查詢數據
例如
SELECT a
au_fname+a
au_lname
FROM authors a
titleauthor ta
(SELECT title_id
title
FROM titles
WHERE ytd_sales>
) AS t
WHERE a
au_id=ta
au_id
AND ta
title_id=t
title_id
此例中
將SELECT返回的結果集合給予一別名t
然後再從中檢索數據
(三)使用WHERE子句設置查詢條件
WHERE子句設置查詢條件
過濾掉不需要的數據行
例如下面語句查詢年齡大於
的數據
SELECT *
FROM usertable
WHERE age>
WHERE子句可包括各種條件運算符
比較運算符(大小比較)
>
>=
=
<
<=
<>
!>
!<
范圍運算符(表達式值是否在指定的范圍)
BETWEEN…AND…
NOT BETWEEN…AND…
列表運算符(判斷表達式是否為列表中的指定項)
IN (項
項
……)
NOT IN (項
項
……)
模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE
NOT LIKE
空值判斷符(判斷表達式是否為空)
IS NULL
NOT IS NULL
邏輯運算符(用於多條件的邏輯連接)
NOT
AND
OR
范圍運算符例
age BETWEEN
AND
相當於age>=
AND age<=
列表運算符例
country IN (
Germany
China
)
模式匹配符例
常用於模糊查找
它判斷列值是否與指定的字符串格式相匹配
可用於char
varchar
text
ntext
datetime和smalldatetime等類型查詢
可使用以下通配字符
百分號%
可匹配任意類型和長度的字符
如果是中文
請使用兩個百分號即%%
下劃線_
匹配單個任意字符
它常用來限制表達式的字符長度
方括號[]
指定一個字符
字符串或范圍
要求所匹配對象為它們中的任一個
[^]
其取值也[] 相同
但它要求所匹配對象為指定字符以外的任一個字符
例如
限制以Publishing結尾
使用LIKE
%Publishing
限制以A開頭
LIKE
[A]%
限制以A開頭外
LIKE
[^A]%
空值判斷符例WHERE age IS NULL
邏輯運算符
優先級為NOT
AND
OR
(四)查詢結果排序
使用ORDER BY子句對查詢返回的結果按一列或多列排序
ORDER BY子句的語法格式為
ORDER BY {column_name [ASC|DESC]} [
…n]
其中ASC表示升序
為默認值
DESC為降序
ORDER BY不能按ntext
text和image數據類型進行排
序
例如
SELECT *
FROM usertable
ORDER BY age desc
userid ASC
另外
可以根據表達式進行排序
二
聯合查詢
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合並成一個結果集合顯示
即執行聯
合查詢
UNION的語法格式為
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement為待聯合的SELECT查詢語句
ALL選項表示將所有行合並到結果集合中
不指定該項時
被聯合查詢結果集合中的重復行將只保留一
行
聯合查詢時
查詢結果的列標題為第一個查詢語句的列標題
因此
要定義列標題必須在第一個查詢語
句中定義
要對聯合查詢結果排序時
也必須使用第一查詢語句中的列名
列標題或者列序號
在使用UNION 運算符時
應保證每個聯合查詢語句的選擇列表中有相同數量的表達式
並且每個查詢選
擇表達式應具有相同的數據類型
或是可以自動將它們轉換為相同的數據類型
在自動轉換時
對於數值類
型
系統將低精度的數據類型轉換為高精度的數據類型
在包括多個查詢的UNION語句中
其執行順序是自左至右
使用括號可以改變這一執行順序
例如
查詢
UNION (查詢
UNION 查詢
)
三
連接查詢
通過連接運算符可以實現多個表查詢
連接是關系數據庫模型的主要特點
也是它區別於其它類型
數據庫管理系統的一個標志
在關系數據庫管理系統中
表建立時各數據之間的關系不必確定
常把一個實體的所有信息存放在
一個表中
當檢索數據時
通過連接操作查詢出存放在多個表中的不同實體的信息
連接操作給用戶帶
來很大的靈活性
他們可以在任何時候增加新的數據類型
為不同實體創建新的表
爾後通過連接進行
查詢
連接可以在SELECT 語句的FROM子句或WHERE子句中建立
似是而非在FROM子句中指出連接時有助於
將連接操作與WHERE子句中的搜索條件區分開來
所以
在Transact
SQL中推薦使用這種方法
SQL
標准所定義的FROM子句的連接語法格式為
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出參與連接操作的表名
連接可以對同一個表操作
也可以對多表操作
對同一
個表操作的連接又稱做自連接
join_type 指出連接類型
可分為三種
內連接
外連接和交叉連接
內連接(INNER JOIN)使用比
較運算符進行表間某(些)列數據的比較操作
並列出這些表中與連接條件相匹配的數據行
根據所使用
的比較方式不同
內連接又分為等值連接
自然連接和不等連接三種
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)
右外連接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外連接(FULL OUTER JOIN或FULL JOIN)三種
與內連接不同的是
外連接不只列出與連接條件相匹
配的行
而是列出左表(左外連接時)
右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的
數據行
交叉連接(CROSS JOIN)沒有WHERE 子句
它返回連接表中所有數據行的笛卡爾積
其結果集合中的
數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數
連接操作中的ON (join_condition) 子句指出連接條件
它由被連接表中的列和比較運算符
邏輯
運算符等構成
無論哪種連接都不能對text
ntext和image數據類型列進行直接連接
但可以對這三種列進行間接
連接
例如
SELECT p
pub_id
p
pub_id
p
pr_info
FROM pub_info AS p
INNER JOIN pub_info AS p
ON DATALENGTH(p
pr_info)=DATALENGTH(p
pr_info)
(一)內連接
內連接查詢操作列出與連接條件匹配的數據行
它使用比較運算符比較被連接列的列值
內連接分
三種
等值連接
在連接條件中使用等於號(=)運算符比較被連接列的列值
其查詢結果中列出被連接
表中的所有列
包括其中的重復列
不等連接
在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值
這些
運算符包括>
>=
<=
<
!>
!<和<>
自然連接
在連接條件中使用等於(=)運算符比較被連接列
From:http://tw.wingwit.com/Article/program/SQLServer/201311/21994.html