第5章穿喉一劍數(shù)據(jù)查詢利器select_第1頁
第5章穿喉一劍數(shù)據(jù)查詢利器select_第2頁
第5章穿喉一劍數(shù)據(jù)查詢利器select_第3頁
第5章穿喉一劍數(shù)據(jù)查詢利器select_第4頁
第5章穿喉一劍數(shù)據(jù)查詢利器select_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章 數(shù)據(jù)查詢利器——SELECT命令在Transact-SQL語言中,SELECT是最常用的查詢語句,也是功能最強(qiáng)大的Transact-SQL語句,在SQLServer中對數(shù)據(jù)庫信息的任何查詢操作都最終將翻譯成

SELECT命令提交給數(shù)據(jù)庫服務(wù)器,SQL

Server將查詢結(jié)果返回給客戶端。本章將介紹SELECT語句的方方面面,本章用到的數(shù)據(jù)庫主要是SQL

Server

2008系統(tǒng)示例數(shù)據(jù)庫

AdventureWorks。5.1 執(zhí)行SELECT命令的工具在SQLServer2008中,運(yùn)行SELECT語句的工具有基于文本的查詢設(shè)計器和圖形查詢設(shè)計器。在前面章節(jié)已經(jīng)涉及到了數(shù)據(jù)庫引擎查詢編輯器的使用,本小節(jié)主要學(xué)習(xí)如何在SQLServer

Management

Studio中使用基于文本的查詢編輯器和圖形查詢設(shè)計器檢索數(shù)據(jù)。5.1.1

使用基于文本的查詢設(shè)計器使用基于文本的查詢設(shè)計器檢索數(shù)據(jù)的具體操作步驟如下:單擊“開始|所有程序|Microsoft

SQL

Server

2008

R2|SQL

ServerManagementStudio”命令,啟動SQL

Server

Management

Studio工具。在“連接到服務(wù)器”對話框中,在服務(wù)器類型下拉列表選擇“數(shù)據(jù)庫引擎”,選擇正確的服務(wù)器名稱和身份驗(yàn)證類型,單擊“連接”按鈕。打開SQL

Server

Management

Studio主界面。從“文件”菜單或工具欄中的

“新建查詢”和“數(shù)據(jù)庫引擎查詢”按鈕,打開基于文本的查詢設(shè)計器窗口。當(dāng)在基于文本的查詢設(shè)計器對話框中編寫如下SELECT查詢語句并執(zhí)行查詢后,數(shù)據(jù)庫引擎查詢窗口。5.1.2

使用圖形查詢設(shè)計器圖形查詢設(shè)計器可以幫助創(chuàng)建和維護(hù)應(yīng)用程序的數(shù)據(jù)檢索和數(shù)據(jù)操作部分。圖形查詢設(shè)計器由四個窗格組成:“關(guān)系圖”窗格、“條件”窗格、“SQL”窗格和“結(jié)果”窗格。5.2

簡單數(shù)據(jù)查詢SELECT命令非常接近于自然語言,只需要知道要從“什么地方(數(shù)據(jù)表)”查詢“什么數(shù)據(jù)(字段)”,具體語法格式如下:Select [字段名1],[字段名2],[…n][From

表名]5.3

TOP關(guān)鍵字當(dāng)一個數(shù)據(jù)表中的數(shù)據(jù)量非常大時,讀者可能并不關(guān)心所有的數(shù)據(jù),而只希望查看前10條或

100條記錄,這時可以使用TOP關(guān)鍵字。語法格式如下:Select [TOP

n]

[PERCENT]

column_name[

,

n][From

table_name]5.4

ROWCOUNT關(guān)鍵字在使用TOP的時候必須寫明返回行的數(shù)量或者百分比,不能使用變量或者表達(dá)式代替TOP后面的數(shù)字或者百分比,限定返回行數(shù)的另外的一個辦法就是使用ROWCOUNT全局變量。在示例9的寫法還可以轉(zhuǎn)換為示例10。5.5

DISTINCT關(guān)鍵字DISTINCT關(guān)鍵字用于從SELECT

語句的結(jié)果集中除去重復(fù)的行。如果沒有指定DISTINCT,那么將返回所有行,包括重復(fù)的行。查詢AdventureWorks數(shù)據(jù)庫地址信息表Address中所有的城市(City)名稱。使用DISTINCT關(guān)鍵字。5.6 WHERE子句在查詢數(shù)據(jù)時,大多不是想瀏覽所有數(shù)據(jù),而是檢索符合某種特定條件的值,可以使用WHERE子句來設(shè)置條件。語法格式如下:SELECT

字段名

[

,

n][FROM

表名][WHERE

條件]5.6.1 在WHERE子句中使用比較運(yùn)算符查詢AdventureWorks數(shù)據(jù)庫中聯(lián)系人表Conact中名字為Abby的全部聯(lián)系人的信息5.6.2 在WHERE子句中使用邏輯運(yùn)算符查詢AdventureWorks數(shù)據(jù)庫中聯(lián)系人表

Conact中FirstName為Abby或者James的全部聯(lián)系人的信息。5.6.3 BETWEEN…AND結(jié)構(gòu)BETWEEN…AND表示選取值在兩個數(shù)值之間的數(shù)據(jù)。語法格式為:字段名或者表達(dá)式[NOT]BETWEEN

表達(dá)式1

AND

表達(dá)式25.6.4

IN關(guān)鍵字IN/NOT

IN表示根據(jù)表達(dá)式是包含在指定范圍內(nèi)還是在指定范圍外,指定對表達(dá)式的搜索。搜索表達(dá)式可以是常量或列名,而列表可以是一組常量或更多情況下是子查詢。將值列表放在圓括號內(nèi)。語法格式如下:表達(dá)式或者字段名[NOT]IN

(列表或者子查詢)代碼說明:表達(dá)式或者字段名的數(shù)據(jù)類型與列表或者子查詢相同。5.6.5

LIKE關(guān)鍵字LIKE用于模糊查詢,當(dāng)不能精確知道查詢條件時,當(dāng)使用LIKE進(jìn)行字符串比較時,模式字符串中的所有字符都有意義,包括起始或尾隨空格。如果查詢中的比較要返回包含"abc"(abc

后有一個空格)的所有行,則將不會返回包含"abc"(abc

后沒有空格)的列所在

行。和LIKE結(jié)合使用的4種通配符是%、_、[]、[^],它們必須與LIKE結(jié)合使用才有意義,否則被當(dāng)作普通字符使用。5.6.6 EXISTS關(guān)鍵字EXISTS關(guān)鍵字用于指定一個子查詢,檢測行的存在。也就是說如果EXISTS關(guān)鍵字指定的子查詢查得的結(jié)果集不為空,則執(zhí)行主體的

SELECT查詢,否則返回結(jié)果集為空。5.7

設(shè)置查詢字段的顯示名稱如果不想在查詢時顯示字段的原始字段名,而是根據(jù)需要或者個人愛好顯示自定義的名稱,有3種方式可以使用:使用as關(guān)鍵字;使用“=”號;直接給出名稱。5.8

使用統(tǒng)計函數(shù)在實(shí)際應(yīng)用中,SQLServer程序員可能被要求給出數(shù)據(jù)表中的記錄數(shù)、一筆訂單最大的訂單金額、某一商品的最低價格等等,這時統(tǒng)計函數(shù)就變得必不可少了,

SQL

Server中常見的統(tǒng)計函數(shù)有以下幾個:Sum():返回在某一集合上對數(shù)值表達(dá)式求得的總和。

Avg():返回在某一集合上對數(shù)值表達(dá)式求得的平均數(shù)。

Max():返回在某一集合上數(shù)值表達(dá)式中的最大值。

Min():返回在某一集合上數(shù)值表達(dá)式中的最小值。

Count():返回符合條件的記錄數(shù)。5.9 GROUP

BY子句和HAVING關(guān)鍵字有時老板可能只會對某類產(chǎn)品的總體信息感興趣,比如想知道數(shù)碼相機(jī)、普通相機(jī)分別的銷售情況,這時就要求能夠?qū)?shù)據(jù)進(jìn)行分類查詢,在SQL

Server中GROUP

BY子句用來對數(shù)據(jù)進(jìn)行分組,HAVING關(guān)鍵字用來對分組的數(shù)據(jù)設(shè)置條件。其語法格式如下:[GROUP

BY

表達(dá)式][HAVING

表達(dá)式]5.10 ALL關(guān)鍵字Transact-SQL在GROUPBY子句中提供ALL關(guān)鍵字。只有在SELECT語句還包括WHERE子句時,ALL關(guān)鍵字才有意義。如果使用ALL關(guān)鍵字,那么查詢結(jié)果將包括由

GROUPBY子句產(chǎn)生的所有組,即使某些組沒有符合搜索條件的行。沒有ALL關(guān)鍵字,包含GROUPBY子句的SELECT語句將不顯示沒有符合條件的行的組。5.11 ORDER

BY子句orderby子句用于對查詢結(jié)果進(jìn)行排序,比如對查詢的書籍按價格進(jìn)行排序。語法格式如下:[ORDER

BY{order_by_字段名[ASC

|

DESC]}[

,...n

]

]5.12

多表查詢有時我們想要查詢的數(shù)據(jù)可能存在于多個數(shù)據(jù)表中,例如我們要檢索學(xué)生的姓名和成績,就要需要訪問學(xué)生表和成績表,并將這兩個表中的相關(guān)信息組合到一起。語法格式如下:Select

表名.字段名[,...n]From

t表名[,...n]5.13 UNION表達(dá)式UNION運(yùn)算符可以將兩個或多個SELECT語句的查詢結(jié)果組合到一起,仿佛它們來自同一個數(shù)據(jù)表。使用UNION組合的結(jié)果集都必須具有相同的字段結(jié)構(gòu)。而且它們的字段數(shù)必須相等,并且相應(yīng)的字段的數(shù)據(jù)類型必須兼容。語法格式如下:select_statement

UNION

[ALL]select_statement5.14 CASE表達(dá)式CASE命令是一個特殊的Transact-SQL表達(dá)式,它允許按字段值動態(tài)指定顯式值。不過數(shù)據(jù)中的字段值更改是臨時的,并沒有對數(shù)據(jù)進(jìn)行永久更改。CASE

表達(dá)式有兩種格式:

CASE簡單表達(dá)式,它通過將表達(dá)式與一組簡單的表達(dá)式進(jìn)行比較來確定結(jié)果;CASE搜索表達(dá)式,它通過計算一組布爾表達(dá)式來確定結(jié)果。這兩種格式都支持可選的ELSE

參數(shù)。5.15 INNER

JOIN

…ON

…表達(dá)式INNERJOIN…ON…稱為內(nèi)連接,它查詢字段值與連接條件匹配的數(shù)據(jù)行,在功能上基本等同于兩表聯(lián)合查詢的WHERE…=…。語法格式如下:FROM

表名1 INNER

JOIN

表名2

on

表達(dá)式5.16

本章小結(jié)本章講述了Select命令中讀者會經(jīng)常用到以及可能用到的功能,

相信讀者已經(jīng)從中發(fā)現(xiàn)Select的神奇之處,本章的大部分講的都

是單表的查詢,其實(shí)這部分的技術(shù)也可以應(yīng)用到多表組合查詢中?,F(xiàn)在讀者也應(yīng)該相信Transact-SQL語言是多么地接近自然語言了吧,或許讀者又會因此而擔(dān)心它的執(zhí)行效率,完全不必,因?yàn)?/p>

Transact-SQL語言是一種描述性的語言,讀者只需要把自己的需求使用T-SQL進(jìn)行描述,把執(zhí)行放心地交給查詢優(yōu)化器吧,盡管讀者可能還不曾見到過它,它會保證讀者的查詢效率。5.17

本章習(xí)題(1)熟練掌握數(shù)據(jù)庫引擎查詢編輯器的操作,請將SQL編輯器和查詢設(shè)計器的工具欄顯示出來。(2)請編寫Transact-SQL,查詢AdventureWorks數(shù)據(jù)庫Em

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論