<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhyiwww
    用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
    posts - 536,comments - 394,trackbacks - 0

    ???????????????????????????

    ?

    一、 簡(jiǎn)單查詢

    ?

      簡(jiǎn)單的 Transact-SQL 查詢只包括選擇列表、 FROM 子句和 WHERE 子句。它們分別說(shuō)明所查詢列、查詢的表或視圖、以及搜索條件等。

    ?

      例如,下面的語(yǔ)句查詢 testtable 表中姓名為“張三”的 nickname 字段和 email 字段。

    ?

       SELECT nickname,email

       FROM testtable

       WHERE name=' 張三 '?

    ?

       ( ) 選擇列表

    ?

      選擇列表 (select_list) 指出所查詢列,它可以是一組列名列表、星號(hào)、表達(dá)式、變量 ( 包括局部變量和全局變量 ) 等構(gòu)成。

    ?

       1 、選擇所有列

    ?

      例如,下面語(yǔ)句顯示 testtable 表中所有列的數(shù)據(jù):

    ?

       SELECT *

       FROM testtable?

    ?

       2 、選擇部分列并指定它們的顯示次序

    ?

      查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。

    ?

      例如:

    ?

       SELECT nickname,email

       FROM testtable?

    ?

       3 、更改列標(biāo)題

    ?

      在選擇列表中,可重新指定列標(biāo)題。定義格式為:

    ?

      列標(biāo)題 = 列名

      列名 列標(biāo)題

    ?

      如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識(shí)符格式時(shí),應(yīng)使用引號(hào)定界符,例如,下列語(yǔ)句使用漢字顯示列標(biāo)題:

    ?

       SELECT 昵稱 =nickname, 電子郵件 =email

       FROM testtable?

    ?

       4 、刪除重復(fù)行

    ?

       SELECT 語(yǔ)句中使用 ALL DISTINCT 選項(xiàng)來(lái)顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)為 ALL 。使用 DISTINCT 選項(xiàng)時(shí),對(duì)于所有重復(fù)的數(shù)據(jù)行在 SELECT 返回的結(jié)果集合中只保留一行。

    ?

       5 、限制返回的行數(shù)

    ?

      使用 TOP n [PERCENT] 選項(xiàng)限制返回的數(shù)據(jù)行數(shù), TOP n 說(shuō)明返回 n 行,而 TOP n PERCENT 時(shí),說(shuō)明 n 是表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。

    ?

      例如:

    ?

       SELECT TOP 2 *FROM testtable SELECT TOP 20 PERCENT * FROM testtable

    ?

       ( )FROM 子句

    ?

       FROM 子句指定 SELECT 語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在 FROM 子句中最多可指定 256 個(gè)表或視圖,它們之間用逗號(hào)分隔。

    ?

      在 FROM 子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列所屬的表或視圖。例如在 usertable citytable 表中同時(shí)存在 cityid 列,在查詢兩個(gè)表中的 cityid 時(shí)應(yīng)使用下面語(yǔ)句格式加以限定:

    ?

       SELECT username,citytable.cityid

       FROM usertable,citytable

       WHERE usertable.cityid=citytable.cityid?

    ?

      在 FROM 子句中可用以下兩種格式為表或視圖指定別名:

    ?

      表名 as 別名

      表名 別名

    ?

       ( ) FROM 子句

    ?

       FROM 子句指定 SELECT 語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在 FROM 子句中最多可指定 256 個(gè)表或視圖,它們之間用逗號(hào)分隔。

    ?

      在 FROM 子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列所屬的表或視圖。例如在 usertable citytable 表中同時(shí)存在 cityid 列,在查詢兩個(gè)表中的 cityid 時(shí)應(yīng)使用下面語(yǔ)句格式加以限定:

    ?

       SELECT username,citytable.cityid

       FROM usertable,citytable

       WHERE usertable.cityid=citytable.cityid?

    ?

      在 FROM 子句中可用以下兩種格式為表或視圖指定別名:

    ?

      表名 as 別名

      表名 別名

    ?

      例如上面語(yǔ)句可用表的別名格式表示為:

    ?

       SELECT username,b.cityid

       FROM usertable a,citytable b

       WHERE a.cityid=b.cityid?

    ?

       SELECT 不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語(yǔ)句所返回的結(jié)果集合中查詢數(shù)據(jù)。

    ?

      例如:

    ?

       SELECT a.au_fname+a.au_lname

       FROM authors a,titleauthor ta

       (SELECT title_id,title

       FROM titles

       WHERE ytd_sales>10000

       ) AS t

       WHERE a.au_id=ta.au_id

       AND ta.title_id=t.title_id?

    ?

    ?

    ?

      此例中,將 SELECT 返回的結(jié)果集合給予一別名 t ,然后再?gòu)闹袡z索數(shù)據(jù)。

    ?

    ( ) 使用 WHERE 子句設(shè)置查詢條件

    ?

       WHERE 子句設(shè)置查詢條件,過(guò)濾掉不需要的數(shù)據(jù)行。例如下面語(yǔ)句查詢年齡大于 20 的數(shù)據(jù):

    ?

       SELECT *

       FROM usertable

       WHERE age>20?

    ?

       WHERE 子句可包括各種條件運(yùn)算符:

    ?

      比較運(yùn)算符 ( 大小比較 ) > >= = < <= <> !> !<

      范圍運(yùn)算符 ( 表達(dá)式值是否在指定的范圍 ) BETWEEN AND

       NOT BETWEEN AND

      列表運(yùn)算符 ( 判斷表達(dá)式是否為列表中的指定項(xiàng) ) IN ( 項(xiàng) 1, 項(xiàng) 2 …… )

       NOT IN ( 項(xiàng) 1, 項(xiàng) 2 …… )

      模式匹配符 ( 判斷值是否與指定的字符通配格式相符 ):LIKE NOT LIKE

      空值判斷符 ( 判斷表達(dá)式是否為空 ) IS NULL NOT IS NULL

      邏輯運(yùn)算符 ( 用于多條件的邏輯連接 ) NOT AND OR

    ?

       1 、范圍運(yùn)算符例: age BETWEEN 10 AND 30 相當(dāng)于 age>=10 AND age<=30

    ?

       2 、列表運(yùn)算符例: country IN ('Germany','China')

    ?

       3 、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配。可用于 char varchar text ntext datetime smalldatetime 等類型查詢。

    ?

      可使用以下通配字符:

    ?

      百分號(hào) % :可匹配任意類型和長(zhǎng)度的字符,如果是中文,請(qǐng)使用兩個(gè)百分號(hào)即 %%

    ?

      下劃線 _ :匹配單個(gè)任意字符,它常用來(lái)限制表達(dá)式的字符長(zhǎng)度。

    ?

      方括號(hào) [] :指定一個(gè)字符、字符串或范圍,要求所匹配對(duì)象為它們中的任一個(gè)。 [^] :其取值也 [] 相同,但它要求所匹配對(duì)象為指定字符以外的任一個(gè)字符。

    ?

      例如:

    ?

      限制以 Publishing 結(jié)尾,使用 LIKE '%Publishing'

    ?

      限制以 A 開(kāi)頭: LIKE '[A]%'

    ?

      限制以 A 開(kāi)頭外: LIKE '[^A]%'

    ?

       4 、空值判斷符例 WHERE age IS NULL

    ?

       5 、邏輯運(yùn)算符:優(yōu)先級(jí)為 NOT AND OR

    ?

       ( ) 查詢結(jié)果排序

    ?

      使用 ORDER BY 子句對(duì)查詢返回的結(jié)果按一列或多列排序。 ORDER BY 子句的語(yǔ)法格式為:

    ?

       ORDER BY {column_name [ASC|DESC]} [, n]

    ?

      其中 ASC 表示升序,為默認(rèn)值, DESC 為降序。 ORDER BY 不能按 ntext text image 數(shù)據(jù)類型進(jìn)行排序。

    ?

      例如:

    ?

       SELECT *

       FROM usertable

       ORDER BY age desc,userid ASC?

    ?

      另外,可以根據(jù)表達(dá)式進(jìn)行排序。

    ?

     二、 聯(lián)合查詢

    ?

       UNION 運(yùn)算符可以將兩個(gè)或兩個(gè)以上上 SELECT 語(yǔ)句的查詢結(jié)果集合合并成一個(gè)結(jié)果集合顯示,即執(zhí)行聯(lián)合查詢。 UNION 的語(yǔ)法格式為:

    ?

       select_statement

       UNION [ALL] selectstatement

       [UNION [ALL] selectstatement][ n]?

    ?

      其中 selectstatement 為待聯(lián)合的 SELECT 查詢語(yǔ)句。

    ?

       ALL 選項(xiàng)表示將所有行合并到結(jié)果集合中。不指定該項(xiàng)時(shí),被聯(lián)合查詢結(jié)果集合中的重復(fù)行將只保留一行。

    ?

      聯(lián)合查詢時(shí),查詢結(jié)果的列標(biāo)題為第一個(gè)查詢語(yǔ)句的列標(biāo)題。因此,要定義列標(biāo)題必須在第一個(gè)查詢語(yǔ)句中定義。要對(duì)聯(lián)合查詢結(jié)果排序時(shí),也必須使用第一查詢語(yǔ)句中的列名、列標(biāo)題或者列序號(hào)。

    ?

      在使用 UNION 運(yùn)算符時(shí),應(yīng)保證每個(gè)聯(lián)合查詢語(yǔ)句的選擇列表中有相同數(shù)量的表達(dá)式,并且每個(gè)查詢選擇表達(dá)式應(yīng)具有相同的數(shù)據(jù)類型,或是可以自動(dòng)將它們轉(zhuǎn)換為相同的數(shù)據(jù)類型。在自動(dòng)轉(zhuǎn)換時(shí),對(duì)于數(shù)值類型,系統(tǒng)將低精度的數(shù)據(jù)類型轉(zhuǎn)換為高精度的數(shù)據(jù)類型。

    ?

      在包括多個(gè)查詢的 UNION 語(yǔ)句中,其執(zhí)行順序是自左至右,使用括號(hào)可以改變這一執(zhí)行順序。例如:

    ?

      查詢 1 UNION ( 查詢 2 UNION 查詢 3)

    ?

      三、連接查詢

    ?

      通過(guò)連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢。連接是關(guān)系數(shù)據(jù)庫(kù)模型的主要特點(diǎn),也是它區(qū)別于其它類型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)標(biāo)志。

    ?

      在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,表建立時(shí)各數(shù)據(jù)之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在一個(gè)表中。當(dāng)檢索數(shù)據(jù)時(shí),通過(guò)連接操作查詢出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶帶來(lái)很大的靈活性,他們可以在任何時(shí)候增加新的數(shù)據(jù)類型。為不同實(shí)體創(chuàng)建新的表,爾后通過(guò)連接進(jìn)行查詢。

    ?

      連接可以在 SELECT 語(yǔ)句的 FROM 子句或 WHERE 子句中建立,似是而非在 FROM 子句中指出連接時(shí)有助于將連接操作與 WHERE 子句中的搜索條件區(qū)分開(kāi)來(lái)。所以,在 Transact-SQL 中推薦使用這種方法。

    ?

       SQL-92 標(biāo)準(zhǔn)所定義的 FROM 子句的連接語(yǔ)法格式為:

    ?

       FROM join_table join_type join_table

       [ON (join_condition)]?

    ?

      其中 join_table 指出參與連接操作的表名,連接可以對(duì)同一個(gè)表操作,也可以對(duì)多表操作,對(duì)同一個(gè)表操作的連接又稱做自連接。

    ?

       join_type 指出連接類型,可分為三種:內(nèi)連接、外連接和交叉連接。內(nèi)連接 (INNER JOIN) 使用比較運(yùn)算符進(jìn)行表間某 ( ) 列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行。根據(jù)所使用的比較方式不同,內(nèi)連接又分為等值連接、自然連接和不等連接三種。外連接分為左外連接 (LEFT OUTER JOIN LEFT JOIN) 、右外連接 (RIGHT OUTER JOIN RIGHT JOIN) 和全外連接 (FULL OUTER JOIN FULL JOIN) 三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表 ( 左外連接時(shí) ) 、右表 ( 右外連接時(shí) ) 或兩個(gè)表 ( 全外連接時(shí) ) 中所有符合搜索條件的數(shù)據(jù)行。

    ?

      交叉連接 (CROSS JOIN) 沒(méi)有 WHERE 子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積,其結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。

    ?

      連接操作中的 ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運(yùn)算符、邏輯運(yùn)算符等構(gòu)成。

    ?

      無(wú)論哪種連接都不能對(duì) text ntext image 數(shù)據(jù)類型列進(jìn)行直接連接,但可以對(duì)這三種列進(jìn)行間接連接。例如:

    ?

       SELECT p1.pub_id,p2.pub_id,p1.pr_info

       FROM pub_info AS p1 INNER JOIN pub_info AS p2

       ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)?

    ?

       ( ) 內(nèi)連接

    ?

      內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。內(nèi)連接分三種:

    ?

       1 、等值連接:在連接條件中使用等于號(hào) (=) 運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。

    ?

       2 、不等連接: 在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括 > >= <= < !> !< <>

    ?

       3 、自然連接:在連接條件中使用等于 (=) 運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。

    ?

      例,下面使用等值連接列出 authors publishers 表中位于同一城市的作者和出版社:

    ?

       SELECT *

       FROM authors AS a INNER JOIN publishers AS p

       ON a.city=p.city

    ?

      又如使用自然連接,在選擇列表中刪除 authors publishers 表中重復(fù)列 (city state)

    ?

       SELECT a.*,p.pub_id,p.pub_name,p.country

       FROM authors AS a INNER JOIN publishers AS p

       ON a.city=p.city?

    ?

       ( ) 外連接

    ?

      內(nèi)連接時(shí),返回查詢結(jié)果集合中的僅是符合查詢條件 ( WHERE 搜索條件或 HAVING 條件 ) 和連接條件的行。而采用外連接時(shí),它返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表 ( 左外連接時(shí) ) 、右表 ( 右外連接時(shí) ) 或兩個(gè)邊接表 ( 全外連接 ) 中的所有數(shù)據(jù)行。如下面使用左外連接將論壇內(nèi)容和作者信息連接起來(lái):

    ?

    SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b

       ON a.username=b.username?

      

    ?

      下面使用全外連接將 city 表中的所有作者以及 user 表中的所有作者,以及他們所在的城市:

    ?

       SELECT a.*,b.*

       FROM city as a FULL OUTER JOIN user as b

       ON a.username=b.username?

    ?

       ( ) 交叉連接

    ?

      交叉連接不帶 WHERE 子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。例, titles 表中有 6 類圖書,而 publishers 表中有 8 家出版社,則下列交叉連接檢索到的記錄數(shù)將等

    ?

      于 6*8=48 行。

    ?

       SELECT type,pub_name

       FROM titles CROSS JOIN publishers

       ORDER BY type

       [Post=0][/Post]?

    ?

    ?

    ?

    - 作者: biliang 訪問(wèn)統(tǒng)計(jì): 12   2005 07 2 , 星期六 23:00 加入博采

    Trackback 你可以使用這個(gè)鏈接引用該篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=2146575

    回復(fù) ??? 發(fā)布人: ? 郵箱: ?

    主 頁(yè): ?

    評(píng)論內(nèi)容:

    ???????????

                  ?   ??

    ?

    2003-2004 BlogChina.COM All rights reserved

    Powered by BlogDriver 2.1



    |----------------------------------------------------------------------------------------|
                               版權(quán)聲明  版權(quán)所有 @zhyiwww
                引用請(qǐng)注明來(lái)源 http://www.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2006-06-02 19:02 zhyiwww 閱讀(310) 評(píng)論(0)  編輯  收藏 所屬分類: database
    主站蜘蛛池模板: 成人免费ā片在线观看| 亚在线观看免费视频入口| 香港a毛片免费观看| 成人免费无遮挡无码黄漫视频| 国产精品亚洲美女久久久| 337p日本欧洲亚洲大胆色噜噜| 亚洲妇女无套内射精| 日韩免费视频一区二区| 国产小视频免费观看| 亚洲激情中文字幕| 国产精品亚洲综合网站| 一个人免费日韩不卡视频| 又黄又爽一线毛片免费观看| 久久亚洲AV成人无码国产| 老湿机一区午夜精品免费福利| 亚洲第一网站免费视频| 亚洲一区二区三区国产精品| 亚洲Av无码一区二区二三区| 最近中文字幕免费大全| 日本xxwwxxww在线视频免费| 亚洲成a人片77777群色| 成人性生交大片免费看中文| 国产精品美女自在线观看免费| 亚洲精品**中文毛片| 久青草视频97国内免费影视| 国产片免费在线观看| 亚洲国产成人手机在线电影bd| 黄视频在线观看免费| 日日夜夜精品免费视频| 亚洲国产夜色在线观看| a级午夜毛片免费一区二区| 国产无遮挡裸体免费视频| 亚洲制服丝袜一区二区三区| 99久久免费国产精品热| 天堂亚洲免费视频| 亚洲kkk4444在线观看| 91成人免费观看| 亚洲日本va中文字幕久久| 国产亚洲综合久久| 女人张腿给男人桶视频免费版| 亚洲最大的视频网站|