亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

sql server數據查詢--SELECT語句

添加時間:2013-4-24 17:34:05  添加: 思海網絡 
數據庫是為更方便有效地管理信息而存在的人們,希望數據庫可以隨時提供所需要的數據信息。因此,對用戶來說,數據查詢是數據
庫最重要的功能。本章將講述數據查詢的實現方法。

在數據庫中,數據查詢是通過SELECT 語句來完成的。SELECT 語句可以從數據庫中按用戶要求檢索數據,并將查詢結果以表格的形式返回。我們在“Transact-SQL 語言”章節及前面的章節中已經初步接觸到了SELECT 語句的一些用法,在本章中將分類講述其具體用法。

本節講述SELECT 語句完整的鋟ń峁梗饈且桓齜淺H叱ぁ⒖菰锏墓獺6琳嚦? 以跳過本節,從第二節開始閱讀,而將本節作為理解、編寫查詢語句的語法參考資料。 SELECT 語句完整的語法結構如下:
SELECT statement ::=
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [,...n] ]
[ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,...n]
[ BY expression [,...n] ] ]
[ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ] }
[ OPTION (<query_hint> [,...n]) ]
<query expression> ::=
{ <query specification> | (<query expression>) }
[UNION [ALL] <query specification | (<query expression>) [...n] ]
<query specification> ::=
SELECT [ ALL | DISTINCT ]
[ {TOP integer | TOP integer PERCENT} [ WITH TIES] ]
<select_list>
[ INTO new_table ]
[ FROM {<table_source>} [,...n] ]
[ WHERE <search_condition> ]
[ GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ] ]
[ HAVING <search_condition> ]
由于SELECT 語句特別復雜,上述結構還不能完全說明其用法,因此我們將它拆分為若干部分來講述。

10.1.1 SELECT 子句
SELECT 子句指定需要通過查詢返回的表的列,其語法如下:
SELECT [ ALL | DISTINCT ]
[ TOP n [PERCENT] [ WITH TIES] ]
<select_list>
<select_list> ::=
{ *
| { table_name | view_name | table_alias }.*
| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [AS] column_alias ]
| column_alias = expression
} [,...n]
各參數說明如下:

  • ALL
    指明查詢結果中可以顯示值相同的列。ALL 是系統默認的。
  • DISTINCT
    指明查詢結果中如果有值相同的列,則只顯示其中的一列。對DISTINCT 選項來說, Null 值被認為是相同的值。
  • TOP n [PERCENT]
    指定返回查詢結果的前n 行數據。如果PERCENT 關鍵字指定的話,則返回查詢結果的前百分之n 行數據。
  • WITH TIES
    此選項只能在使用了ORDER BY 子句后才能使用當指定此項時,除了返回由TOP n (PERCENT) 指定的數據行外,還要返回與TOP n (PERCENT) 返回的最后一行記錄中由ORDER BY 子句指定的列的列值相同的數據行。
  • select_list
    select_list 是所要查詢的表的列的集合,多個列之間用逗號分開。
  • * 通配符,返回所有對象的所有列。
  • table_name | view_name | table_alias.*
    限制通配符*的作用范圍。凡是帶*的項,均返回其中所有的列。
  • column_name
    指定返回的列名
  • expression
    表達式可以為列名、常量、函數或它們的組合。
  • IDENTITYCOL
    返回IDENTITY 列。如果FROM 子句中有多個表含有IDENTITY 列,則在IDENTTYCOL 選項前必須加上表名,如Table1.IDENTITYCOL。
  • ROWGUIDCOL
    返回表的ROWGUIDCOL 列。同IDENTITYCOL 選項相同,當要指定多個ROWGUIDCOL 列時,選項前必須加上表名,如Table1. ROWGUIDCOL。
  • column_alias
    在返回的查詢結果中用此別名替代列的原名。column_alias 可用于ORDER BY 子句,但不能用于WHERE GROUP BY 或HAVING 子句如果查詢是游標聲明命令DECLARE CURSOR 的一部分,則column_alias 還不能用于FOR UPDATE 子句(有關游標的介紹請參見“游標和視圖”章節)。

10.1.2 INTO 子句
INTO 子句用于把查詢結果存放到一個新建的表中。SELECT...INTO 句式不能與COMPUTE 子句一起使用。其語法如下:
INTO new_table
參數new_table 指定了新建的表的名稱。新表的列由SELECT 子句中指定的列構成,新表中的數據行是由WHERE 子句指定的。但如果SELECT 子句中指定了計算列,在新表中對應的列則不是計算列,而是一個實際存儲在表中的列,其中的數據由執行SELECT...INTO 語句時計算得出。如果數據庫的“Select into/bulk copy” 選項設置為“True/On”,則可以用INTO 子句創建表和臨時表,反之,則只能創建臨時表。

10.1.3 FROM 子句
FROM 子句指定需要進行數據查詢的表。只要SELECT 子句中有要查詢的列,就必須使用FROM 子句。其語法如下:
FROM {<table_source>} [,...n]
<table_source> ::=
table_name [ [AS] table_alias ] [ WITH ( <table_hint> [,...n]) ]
| view_name [ [AS] table_alias ]
| rowset_function [ [AS] table_alias ]
| OPENXML
| derived_table [AS] table_alias [ (column_alias [,...n] ) ]
| <joined_table>
<joined_table> ::=
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| <joined_table>
<join_type> ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ <join_hint> ]
JOIN
各參數說明如下:

  • table_source
    指明SELECT 語句要用到的表、視圖等數據源。
  • table_name [ [AS] table_alias ]
    指明表名和表的別名。
  • view_name [ [AS] table_alias ]
    指明視圖名稱和視圖的別名。
  • rowset_function [ [AS] table_alias ]
    指明行統計函數和統計列的名稱。
  • OPENXML
    提供一個XML 文檔的行集合視圖。
  • WITH ( [,...n])
    指定一個或多個表提示。通常SQL Server 的查詢優化器會自動選取最優執行計劃,除非是特別有經驗的用戶,否則最好不用此選項。關于表提示table_hint 的設,定請參見下一章的“刪除數據”部分。
  • derived_table [AS] table_alias
    指定一個子查詢,從數據庫中返回數據行。
  • column_alias
    指明列的別名,用以替換查詢結果中的列名。
  • joined_table
    指定由連接查詢生成的查詢結果。有關連接與連接查詢的介紹參見本章的相關章節。
  • join_type
    指定連接查詢操作的類型。
  • INNER
    指定返回兩個表中所有匹配的行。如果沒有join_type 選項,此選項就為系統默認。
  • LEFT [OUTER]
    返回連接查詢左邊的表中所有的相應記錄,而右表中對應于左表無記錄的部分,用NULL 值表示。
  • RIGHT [OUTER]
    返回連接查詢右邊的表中所有的相應記錄,而左表中對應于右表無記錄的部分,用NULL 值表示。
  • FULL [OUTER]
    返回連接的兩個表中的所有記錄。無對應記錄的部分用NULL 值表示。
  • join_hint
    指定一個連接提示或運算法則。如果指定了此選項,則INNER LEFT RIGHT 或FULL選項必須明確指定。通常SQL Server 的查詢優化器會自動選取最優執行計劃,除非是特別有經驗的用戶,否則最好不用此選項。
    join_hint 的語法如下:
    <join_hint> ::= { LOOP | HASH | MERGE | REMOTE }
    其中LOOP | HASH | MERGE 選項指定查詢優化器中的連接是循環、散列或合并的。REMOTE 選項指定連接操作由右邊的表完成。當左表的數據行少于右表,才能使用REMOTE 選項。當左表和右表都是本地表時,此選項不必使用。
  • JOIN
    指明特定的表或視圖將要被連接。
  • ON <search_condition>
    指定連接的條件。
  • CROSS JOIN
    返回兩個表交叉查詢的結果。
10.1.4 WHERE 子句
WHERE 子句指定數據檢索的條件,以限制返回的數據行。其語法如下:
WHERE <search_condition> | <old_outer_join>
<old_outer_join> ::=
column_name { *= | =* } column_name
各參數說明如下:
search_condition
通過由謂詞構成的條件來限制返回的查詢結果。
old_outer_join
指定一個外連接。此選項是不標準的,但使用方便。它用“*=” 操作符表示左連接,用“=*” 操作符表示右連接。此選項與在FROM 子句中指定外連接都是可行的方法,但二者只能擇其一。

注意:如果在WHERE子句中指定一個值為FALSE的條件,則可以用SELECT...INTO語句來創建一個表名不同,但結構和數據類型均和原表相同的表。

10.1.5 GROUP BY 子句
GROUP BY 子句指定查詢結果的分組條件。其語法如下;
GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ]
各參數說明如下:

  • ALL
    返回所有可能的查詢結果組合,即使此組合中沒有任何滿足WHERE 子句的數據。分組的統計列如果不滿足查詢條件,則將由NULL 值構成其數據。ALL 選項不能與CUBE或ROLLUP 選項同時使用。
    GROUP BY ALL is not supported in queries that access remote tables.
  • group_by_expression
    指明分組條件。group_by_expression 通常是一個列名,但不能是列的別名。數據類型為TEXT、 NTEXT、 IMAGE 或BIT 類型的列不能作為分組條件。
  • CUBE
    除了返回由GROUP BY 子句指定的列外,還返回按組統計的行。返回的結果先按分組的第一個條件列排序顯示,再按第二個條件列排序顯示以此類推。統計行包括了GROUPBY 子句指定的列的各種組合的數據統計。
  • ROLLUP
    與CUBE 不同的是,此選項對GROUP BY 子句中的列順序敏感,它只返回第一個分組條件指定的列的統計行。改變列的順序會使返回的結果的行數發生變化。

使用Distinct選項的統計函數,如AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、和SUM(DISTINCT column_name)等,不能在使用CUBE或ROLLUP選項時使用。

10.1.6 HAVING 子句
HAVING 子句指定分組搜索條件。HAVING 子句通常與GROUP BY 子句一起使用。TEXT、 NTEXT 和IMAGE 數據類型不能用于HAVING 子句。其語法如下:
HAVING <search_condition>
HAVING 子句與WHERE 子句很相似,其區別在于其作用的對象不同。WHERE 子句作用于表和視圖,HAVING 子句作用于組。

10.1.7 UNION 操作符
UNION 操作符將兩個或兩個以上的查詢結果合并為一個結果集。它與使用連接查詢合并兩個表的列是不同的。使用UNION 操作符合并查詢結果需要遵循兩個基本規則:

  • 列的數目和順序在所有查詢中必須是一致的;
  • 數據類型必須兼容。
    其語法如下:
    <query specification> | (<query expression>)
    UNION [ALL]
    <query specification | (<query expression>)
    [UNION [ALL] <query specification | (<query expression>) [...n] ]
    各參數說明如下:
  • <query_specification> | (<query_expression>)
    指明查詢的詳細說明或查詢表達式。
  • UNION
    合并操作符。
  • ALL
    合并所有數據行到結果中,包括值重復的數據行。如果不指定此選項,則重復的數據行只顯示一行。

10.1.8 ORDER BY 子句

ORDER BY 子句指定查詢結果的排序方式。其語法如下:
ORDER BY {order_by_expression [ ASC | DESC ] } [,...n]
各參數說明如下:

  • order_by_expression
    指定排序的規則。order_by_expression 可以是表或視圖的列的名稱或別名。如果SELECT 語句中沒有使用DISTINCT 選項或UNION 操作符。那么ORDER BY 子句中可以包含select list 中沒有出現的列名。或別名ORDER BY 子句中也不能使用TEXT、 NTEXT 和 IMAGE 數據類型。
  • ASC
    指明查詢結果按升序排列。這是系統默認值。
  • DESC
    指明查詢結果按降序排列。
    注意:Null值被作為最小的值。

10.1.9 COMPUTE 子句
COMPUTE 子句在查詢結果的末尾生成一個匯總數據行。其語法如下:
COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP |VAR | VARP | SUM }
(expression) } [,...n]
[ BY expression [,...n] ]
各參數說明如下:
    AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM()以上參數與對應的函數有相同的含義。這些函數均會忽略NULL 值,且DISTINCT選項不能在此使用。
    expression
    指定需要統計的列的名稱。此列必須包含于SELECT 列表中,且不能用別名。COMPUTE子句中也不能使用TEXT、 NTEXT 和IMAGE 數據類型。
    BY expression
    在查詢結果中生成分類統計的行。如果使用此選,項則必須同時使用ORDER BY 子句。expression 是對應的ORDER BY 子句中的order_by_expression 的子集或全集。
    注意:在SELECT子句中使用統計函數,會覆蓋COMPUTE子句中的相應選項。在SELECTINTO語句中不能使用COMPUTE子句。

10.1.10 FOR BROWSE 子句
FOR BROWSE 子句用于讀取另外的用戶正在進行添加、刪除或更新記錄的表。其語法如下:
FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ]
}
各參數說明如下:
BROWSE
BROWSE 選項指明當查看在使用DB-Library 的客戶機應用程序中的數據時,可以更新數據。
使用此子句時對所操作的表有一些限制:
表必須包含一個timestamp 類型的時間標識列;
表必須有一個惟一索引。
注意:
在SELECT語句中:FOR BROWSE子句必須是SELECT語句的最后子句;FOR BROWSE子句不能與UNION操作符同時使用;FOR BROWSE子句不能與表提示HOLDLOCK選項同時使用。

  • XML
    XML 選項指明查詢結果以XML 文檔模式返回XML。 模式分為RAW、 AUTO、 EXPLICIT 三種。
  • RAW
    將查詢結果每一行轉換為以一個普通標識符作為元素標識XML 文檔。
  • AUTO
    以簡單嵌套的XML 樹方式返回查詢結果。
  • EXPLICIT
    指定查詢結果的XML 樹的形式被明確定義的。
  • XMLDATA
    返回概要信息。它是附加在文檔上返回的。
  • ELEMENTS
    指明列將以子元素的方式返回。
  • BINARY base 64
    指定查詢返回的以base64 格式編碼的二進制數據。
  • 10.1.11 OPTION 子句
    OPTION 子句用于指定在整個查詢過程中的查詢提示(Query Hint)。通常,用戶不必使用OPTION 子句,因為查詢優化器會自動選擇一個最佳的查詢計劃。OPTION 子句必須由最外層的主查詢來指定。各查詢提示之間應使用逗號隔開。其語法如下:
    OPTION (<query_hint> [,...n] )
    <query_hint> ::=
    { { HASH | ORDER } GROUP
    | { CONCAT | HASH | MERGE } UNION
    | { LOOP | MERGE | HASH } JOIN
    | FAST number_rows
    | FORCE ORDER
    | MAXDOP number
    | ROBUST PLAN
    | KEEP PLAN
    | KEEPFIXED PLAN
    | EXPAND VIEWS
    }
    各參數說明如下:
  • {HASH | ORDER} GROUP
    指定在GROUP BY 或COMPUTE 子句中指定的查詢使用散列法或排序法。所謂散列法是指為存儲和檢索數據項或數據,把搜索關鍵字轉換為一個地址的一種方法。該方法常作為數據集內的記錄的一種算法,可以使記錄分組均勻,減少搜索時間。
  • {MERGE | HASH | CONCAT} UNION
    指定所有的UNION 操作符采用合并(Merge)、散列(Hash) 或連接(Concatenate)的方法執行操作。如果指定了多個UNION 提示,查詢優化器會挑選一個最佳的提示方案。
  • {LOOP | MERGE | HASH |} JOIN
    指定查詢過程中的所有連接操作采取循環連接(Loop Join)、合并連接(Merge Join)或散列連接(Hash Join) 的方法。如果指定了多個JOIN 提示,查詢優化器會挑選一個最佳的提示方案。
  • FAST number_rows
    指定查詢優化只用于迅速返回前number_rows 行數據,在number_rows 行以后的數據采用原查詢方法。
  • FORCE ORDER
    指定在查詢語法中說明的連接順序在查詢優化的過程中保持不變。
  • MAXDOP number
    忽略由Sp_configure 設定的針對查詢的最大并行線程數目。
  • ROBUST PLAN
    強制查詢優化器嘗試使用最大行容量的計劃。
  • KEEP PLAN
    強制查詢優化器放松重新編譯查詢的閾值。指定此選項可以讓一個表被多次更新而不必頻繁地重新編譯查詢。
  • KEEPFIXED PLAN
    強制查詢優化器不重新編譯查詢。這樣只有當表的概要改變或執行Sp_recompile 存儲過程時,才會重新編譯查詢。
  • EXPAND VIEWS
    擴展索引化視圖(當一個視圖的名稱在查詢文本中被視圖定義替換時稱這個視圖被擴展了),并且查詢優化器不再將索引化視圖作為查詢的某部分的替代品。如果視圖使用了WITH (NOEXPAND) 說明,則不能被擴展。
注意:SELECT語句中各子句的排列次序是很重要的,子句必須依相應的次序來使用。
      當用SELECT命令讀取TEXT和IMAGE類型數據時,一次所能讀取的數據受限于@@TE-XTSIZE全局變量的值。
      可以用SET TEXTSIZE命令來更改它。@@TEXTSIZE的初始值為4K,最大為231-1(2,147,483,647)個字節。
關鍵字:sql server、數據庫
分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站