电竞比分网-中国电竞赛事及体育赛事平台

分享

SQL基礎(chǔ)語(yǔ)句大全(中文)

 fnxyy 2011-08-25

SQL基礎(chǔ)語(yǔ)句大全(中文)

SQL基礎(chǔ)

                 本章內(nèi)容
           
                 SQL介紹
                 使用SELECT 語(yǔ)句從表中取數(shù)據(jù)
                 創(chuàng)建新表
                 字段屬性
                 向表中添加數(shù)據(jù)
                 刪除和修改表      
         
    為了建立交互站點(diǎn),你需要使用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)來(lái)自訪問(wèn)者的信息。例如,你要建立一個(gè)職業(yè)介紹服務(wù)的站點(diǎn),你就需要存儲(chǔ)諸如個(gè)人簡(jiǎn)歷,所感興趣的工作等等這樣的信息。創(chuàng)建動(dòng)態(tài)網(wǎng)葉也需要使用數(shù)據(jù)庫(kù),如果你想顯示符合來(lái)訪者要求的最好的工作,你就需要從數(shù)據(jù)庫(kù)中取出這份工作的信息。你將會(huì)發(fā)現(xiàn),在許多情況下需要使用數(shù)據(jù)庫(kù)。
    在這一章里,你將學(xué)會(huì)怎樣使用“結(jié)構(gòu)化查詢(xún)語(yǔ)言”(SQL〕來(lái)操作數(shù)據(jù)庫(kù)。SQL語(yǔ)言是數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言。在Active Sever Pages 中,無(wú)論何時(shí)你要訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),你就要使用SQL語(yǔ)言。因此,掌握好SQL對(duì)ASP編程是非常重要的。
     
    注意:
    你可以把“SQL”讀作“sequel”,也可以按單個(gè)字母的讀音讀作S-Q-L。兩種發(fā)音都是正確的,每種發(fā)音各有大量的支持者。在本書(shū)里,認(rèn)為“SQL”讀作“sequel”。
    通過(guò)這一章的學(xué)習(xí),你將理解怎樣用SQL實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢(xún),你將學(xué)會(huì)怎樣使用這種查詢(xún)從數(shù)據(jù)表中取出信息,最后,你將學(xué)會(huì)怎樣設(shè)計(jì)和建立自己的數(shù)據(jù)庫(kù)。
            
    注意:
    通過(guò)下面幾章對(duì)SQL的介紹,你將對(duì)SQL有足夠的了解,從而可以有效地使用Active Sever Pages。但是,SQL是一種復(fù)雜的語(yǔ)言,本書(shū)不可能包括它的全部細(xì)節(jié)。要全面掌握SQL語(yǔ)言,你需要學(xué)習(xí)在Microsoft SQL Sever 中使用SQL。你可以到附近的書(shū)店去買(mǎi)一本Microsoft SQL Sever 6.5。
SQL介紹:
    本書(shū)假設(shè)你是在SQL操作Microsoft SQL Sever 的數(shù)據(jù)庫(kù)。你也可以用SQL操作許多其它類(lèi)型的數(shù)據(jù)庫(kù)。SQL是操作數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言。(事實(shí)上,關(guān)于SQL語(yǔ)言有一個(gè)專(zhuān)門(mén)的ANSI標(biāo)準(zhǔn)〕
    注意:
    不要在你的站點(diǎn)上試圖用Microsoft Access代替Microsoft SQL Sever。SQL Sever可以同時(shí)服務(wù)于許多用戶(hù),如果你希望你的站點(diǎn)有較高的訪問(wèn)率,MS Access是不能勝任的。
    在學(xué)習(xí)SQL的細(xì)節(jié)之前,你需要理解它的兩大特點(diǎn)。一個(gè)特點(diǎn)容易掌握,另一個(gè)掌握起來(lái)有點(diǎn)困難。
    第一個(gè)特點(diǎn)是所有SQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)都存儲(chǔ)在表中。一個(gè)表由行和列組成。例如,下面這個(gè)簡(jiǎn)單的表包括name 和e-mail address:
    Name                  Email Address
    ................................................................
    Bill Gates               [url=mailto:billg@microsoft.com]billg@microsoft.com[/url]
    president Clinton         [url=mailto:president@whitehouse.com]president@whitehouse.com[/url]
    Stephen Walther         [url=mailto:swalther@somewhere.com]swalther@somewhere.com[/url]
    這個(gè)表有兩列(列也稱(chēng)為字段,域〕:Name和Email Address。有三行,每一行包含一組數(shù)據(jù)。一行中的數(shù)據(jù)組合在一起稱(chēng)為一條記錄。
    無(wú)論何時(shí)你向表中添加新數(shù)據(jù),你就添加了一條新記錄。一個(gè)數(shù)據(jù)表可以有幾十個(gè)記錄,也可以有幾千甚至幾十億個(gè)記錄。雖然你也許永遠(yuǎn)不需要存儲(chǔ)十億個(gè)Email地址,但知道你能這樣做總是好的,也許有一天你會(huì)有這樣的需要。
    你的數(shù)據(jù)庫(kù)很有可能包含幾十個(gè)表,所有存儲(chǔ)在你數(shù)據(jù)庫(kù)中的信息都被存儲(chǔ)在這些表中。當(dāng)你考慮怎樣把信息存儲(chǔ)在數(shù)據(jù)庫(kù)中時(shí),你應(yīng)該考慮怎樣把它們存儲(chǔ)在表中。
    SQL的第二個(gè)特點(diǎn)有些難于掌握。這種語(yǔ)言被設(shè)計(jì)為不允許你按照某種特定的順序來(lái)取出記錄,因?yàn)檫@樣做會(huì)降低SQL Sever取記錄的效率。使用SQL,你只能按查詢(xún)條件來(lái)讀取記錄。
    當(dāng)考慮如何從表中取出記錄時(shí),自然會(huì)想到按記錄的位置讀取它們。例如,也許你會(huì)嘗試通過(guò)一個(gè)循環(huán),逐個(gè)記錄地掃描,來(lái)選出特定的記錄。在使用SQL時(shí),你必須訓(xùn)練自己,不要有這種思路。
    假如你想選出所有的名字是“Bill Gates”的記錄,如果使用傳統(tǒng)的編程語(yǔ)言,你也許會(huì)構(gòu)造一個(gè)循環(huán),逐個(gè)查看表中的記錄,看名字域是否是“Bill Gates”。
    這種選擇記錄的方法是可行的,但是效率不高。使用SQL,你只要說(shuō),“選擇所有名字域等于Bill Gates的記錄”,SQL就會(huì)為你選出所有符合條件的記錄。SQL會(huì)確定實(shí)現(xiàn)查詢(xún)的最佳方法。
    建設(shè)你想取出表中的前十個(gè)記錄。使用傳統(tǒng)的編程語(yǔ)言,你可以做一個(gè)循環(huán),取出前十個(gè)記錄后結(jié)束循環(huán)。但使用標(biāo)準(zhǔn)的SQL查詢(xún),這是不可能實(shí)現(xiàn)的。從SQL的角度來(lái)說(shuō),在一個(gè)表中不存在前十個(gè)記錄這種概念。
    開(kāi)始時(shí),當(dāng)你知道你不能用SQL實(shí)現(xiàn)某些你感覺(jué)應(yīng)該能實(shí)現(xiàn)的功能,你會(huì)受到挫折。你也許會(huì)以頭撞墻甚至想寫(xiě)惡毒的信件給SQL的設(shè)計(jì)者們。但后來(lái)你會(huì)認(rèn)識(shí)到,SQL的這個(gè)特點(diǎn)不僅不是個(gè)限制,反而是其長(zhǎng)處。因?yàn)镾QL不根據(jù)位置來(lái)讀取記錄,它讀取記錄可以很快。
    綜上所述,SQL有兩個(gè)特點(diǎn):所有數(shù)據(jù)存儲(chǔ)在表中,從SQL的角度來(lái)說(shuō),表中的記錄沒(méi)有順序。在下一節(jié),你將學(xué)會(huì)怎樣用SQL從表中選擇特殊的記錄。
使用SQL從表中取記錄。
    SQL的主要功能之一是實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢(xún)。如果你熟悉Internet 引擎,那么你已經(jīng)熟悉查詢(xún)了。你使用查詢(xún)來(lái)取得滿足特定條件的信息。例如,如果你想找到有ASP信息的全部站點(diǎn),你可以連接到 Yahoo!并執(zhí)行一個(gè)對(duì)Active Sever Pages的搜索。在你輸入這個(gè)查詢(xún)后,你會(huì)收到一個(gè)列表,表中包括所有其描述中包含搜索表達(dá)式的站點(diǎn)。
    多數(shù)Internet 引擎允許邏輯查詢(xún)。在邏輯查詢(xún)中,你可以包括特殊的運(yùn)算符如AND、OR和NOT,你使用這些運(yùn)算符來(lái)選擇特定的記錄。例如,你可以用AND來(lái)限制查詢(xún)結(jié)果。如果你執(zhí)行一個(gè)對(duì)Active Sever Pages  AND  SQL的搜索。你將得到其描述中同時(shí)包含Active Sever Pages 和SQL的記錄。當(dāng)你需要限制查詢(xún)結(jié)果時(shí),你可以使用AND。
    如果你需要擴(kuò)展查詢(xún)的結(jié)果,你可以使用邏輯操作符OR。例如,如果你執(zhí)行一個(gè)搜索,搜索所有的其描述中包含Active Sever Pages  OR  SQL的站點(diǎn),你收到的列表中將包括所有其描述中同時(shí)包含兩個(gè)表達(dá)式或其中任何一個(gè)表達(dá)式的站點(diǎn)。
    如果你想從搜索結(jié)果中排除特定的站點(diǎn),你可以使用NOT。例如,查詢(xún)“Active Sever Pages  ”AND NOT “SQL”將返回一個(gè)列表,列表中的站點(diǎn)包含Active  Sever Pages,但不包含SQL。當(dāng)必須排除特定的記錄時(shí),你可以使用NOT。
    用SQL執(zhí)行的查詢(xún)與用Internet搜索引擎執(zhí)行的搜索非常相似。 當(dāng)你執(zhí)行一個(gè)SQL查詢(xún)時(shí),通過(guò)使用包括邏輯運(yùn)算符的查詢(xún)條件,你可以得到一個(gè)記錄列表。此時(shí)查詢(xún)結(jié)果是來(lái)自一個(gè)或多個(gè)表。
    SQL查詢(xún)的句法非常簡(jiǎn)單。假設(shè)有一個(gè)名為email_table 的表,包含名字和地址兩個(gè)字段,要得到Bill Gates 的e_mail地址,你可以使用下面的查詢(xún):
    SELECT email from email_table WHERE name="Bill Gates"
    當(dāng)這個(gè)查詢(xún)執(zhí)行時(shí),就從名為email_table的表中讀取Bill Gates的e_mail 地址。這個(gè)簡(jiǎn)單的語(yǔ)句包括三部分:
    ■  SELECT語(yǔ)句的第一部分指名要選取的列。在此例中,只有email列被選取。當(dāng)執(zhí)行 時(shí),只顯示email列的值 [url=mailto:billg@microsoft.com]billg@microsoft.com[/url]。
    ■  SELECTT語(yǔ)句的第二部份指明要從哪個(gè)(些)表中查詢(xún)數(shù)據(jù)。在此例中,要查詢(xún)的表名為email_table 。
    ■  最后,SELECT語(yǔ)句的WHERE子句指明要選擇滿足什么條件的記錄。在此例中,查詢(xún)條件為只有name列的值為Bill Gates 的記錄才被選取。
    Bill Gates很有可能擁有不止一個(gè)email地址。如果表中包含Bill Gates的多個(gè)email地址。用上述的SELECT語(yǔ)句可以讀取他所有的email地址。SELECT語(yǔ)句從表中取出所有name字段值為Bill Gates 的記錄的email 字段的值。
    前面說(shuō)過(guò),查詢(xún)可以在查詢(xún)條件中包含邏輯運(yùn)算符。假如你想讀取Bill Gates 或Clinton總統(tǒng)的所有email地址,你可以使用下面的查詢(xún)語(yǔ)句:
    SELECT  email  FROM  email_table  WHERE  name="Bill Gates" OR
                                                   name="president  Clinton"
    此例中的查詢(xún)條件比前一個(gè)復(fù)雜了一點(diǎn)。這個(gè)語(yǔ)句從表email_table中選出所有name列為Bill Gates或president Clinton的記錄。如果表中含有Bill Gates或president Clinton的多個(gè)地址,所有的地址都被讀取。
    SELECT語(yǔ)句的結(jié)構(gòu)看起來(lái)很直觀。如果你請(qǐng)一個(gè)朋友從一個(gè)表中為你選擇一組記錄,你也許以非常相似的方式提出你的要求。在SQL SELECT語(yǔ)句中,你“SELECT特定的列FROM一個(gè)表WHERE某些列滿足一個(gè)特定的條件”。
    下一節(jié)將介紹怎樣執(zhí)行SQL查詢(xún)來(lái)選取記錄。這將幫助你熟悉用SELECT語(yǔ)句從表中取數(shù)據(jù)的各種不同方法。
使用ISQL執(zhí)行SELECT查詢(xún)
    當(dāng)你安裝SQL Sever時(shí),你同時(shí)安裝了一個(gè)叫作ISQL/w的應(yīng)用程序。ISQL/w允許你執(zhí)行交互的SQL查詢(xún)。在把查詢(xún)包括到你的ASP網(wǎng)頁(yè)中之前,用ISQL/w對(duì)其進(jìn)行測(cè)試是非常有用的。
    注意:
    在這本書(shū)的第一部份,你學(xué)習(xí)了怎樣安裝和配置Microsoft SQL Sever 。如果沒(méi)有安裝SQL Sever或者SQL Sever不能運(yùn)行,請(qǐng)參閱第三章“安裝和使用SQL Sever”。
    選擇任務(wù)上SQL Sever程序組中的ISQL_w以啟動(dòng)該程序。程序啟動(dòng)時(shí),首先會(huì)出現(xiàn)一個(gè)對(duì)話框,要求輸入服務(wù)器信息和登錄信息(見(jiàn)圖10.1)。在Sever框中,輸入你的SQL服務(wù)器的名字。如果服務(wù)器正運(yùn)行在本地計(jì)算機(jī)上,服務(wù)器名字就是你計(jì)算機(jī)的名字。在登錄信息框中,輸入一個(gè)登錄賬號(hào)和密碼或選擇使用“可信連接”,然后單擊Connect按鈕。
      圖10。1

    注意:
    如果你將SQL Sever配置為使用完整安全或混合安全,那么你可以使用可信連接。如果你使用標(biāo)準(zhǔn)安全,你則需要提供用戶(hù)賬號(hào)和密碼。要了解更多信息,參見(jiàn)第三章。
    如果一切正常,在你單擊連接按鈕后會(huì)出現(xiàn)一個(gè)查詢(xún)窗口,如圖10.2所示。(如果有異常,請(qǐng)參考第三章)

        圖10.2

    在執(zhí)行查詢(xún)之前,你需要選擇數(shù)據(jù)庫(kù)。安裝 SQL Sever時(shí)你已為自己創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù),SQL Sever還有許多系統(tǒng)數(shù)據(jù)庫(kù),如master,model,msdb,和tempdb。
    方便的是,SQL Sever帶有一個(gè)特殊的名為pubs的例子數(shù)據(jù)庫(kù)。庫(kù) pubs中包含供一個(gè)虛擬的出版商使用的各個(gè)表。文檔中所有的例子程序都是針對(duì)這個(gè)庫(kù)來(lái)設(shè)計(jì)的。本書(shū)中的許多例子也使用這個(gè)數(shù)據(jù)庫(kù)。
    在查詢(xún)窗口頂部的DB下拉框中選擇數(shù)據(jù)庫(kù)pubs,這樣你就選擇了數(shù)據(jù)庫(kù)。你所有的查詢(xún)都將針對(duì)這個(gè)庫(kù)中的各個(gè)表來(lái)執(zhí)行。現(xiàn)在你可以執(zhí)行你的第一個(gè)查詢(xún)了。這真讓人興奮!
    你的第一個(gè)查詢(xún)將針對(duì)一個(gè)名為autrors的表,表中包含所有為某個(gè)虛擬出版商工作的作者的相關(guān)數(shù)據(jù)。單擊查詢(xún)窗口并輸入以下的語(yǔ)句:
    SELECT  phone  FROM authors WHERE au_name="Ringer"
    輸入完成后,單擊執(zhí)行查詢(xún)按鈕(一個(gè)綠色三角形,看起來(lái)像VCR播放鍵)。單擊此按鈕后,任何出現(xiàn)在查詢(xún)窗口中的語(yǔ)句均會(huì)被執(zhí)行。查詢(xún)窗口會(huì)自動(dòng)變成結(jié)果顯示窗口,你可以看到查詢(xún)的結(jié)果(見(jiàn)圖10.3)。
    你看到的查詢(xún)結(jié)果也許與圖10.3所示的不同。在SQL Sever的不同版本中,庫(kù)pubs中的數(shù)據(jù)會(huì)有所不同。對(duì)SQL Sever 6.5來(lái)說(shuō),將會(huì)找到兩條記錄。結(jié)果顯示窗口中應(yīng)顯示如下內(nèi)容:
   
    phone
……………….
801 826_0752
801 826_0752
    (2 row(s)  affected)


  圖10.3

    你所執(zhí)行的SELECT語(yǔ)句從表authors中取出所有名字為Ringer的作者的電話號(hào)碼。你通過(guò)在WHERE子句中使用特殊的選擇條件來(lái)限制查詢(xún)的結(jié)果。你也可以忽略選擇條件,從表中取出所有作者的電話號(hào)碼。要做到這一點(diǎn),單擊Query標(biāo)簽,返回到查詢(xún)窗口,輸入以下的SELECT語(yǔ)句:
SELECT Phone  FROM authors
    這個(gè)查詢(xún)執(zhí)行后,會(huì)取出表authors中的所有電話號(hào)碼(沒(méi)有特定的順序)。如果表authors中包含一百個(gè)電話號(hào)碼,會(huì)有一百個(gè)記錄被取出,如果表中有十億個(gè)電話號(hào)碼,這十億條記錄都會(huì)被取出(這也許需要一些時(shí)間)。
    表authrs的字段包括姓,名字,電話號(hào)碼,地址,城市,州和郵政編碼。通過(guò)在SELECT語(yǔ)句的第一部份指定它們,你可以從表中取出任何一個(gè)字段。你可以在一個(gè)SELECT語(yǔ)句中一次取出多個(gè)字段,比如:
    SELECT au_fname ,au_lname, phone FROM authors
    這個(gè)SELECT語(yǔ)句執(zhí)行后,將取出這三個(gè)列的所有值。下面是這個(gè)查詢(xún)的結(jié)果的一個(gè)示例(為了節(jié)省紙張,只顯示查詢(xún)結(jié)果的一部分,其余記錄用省略號(hào)代替):
    au_fname          au_lname                 phone
    ………………………………………………………………………….
    Johnson            White                    408  496_7223
    Marjorie            Green                    415  986_7020
    Cheryl              Carson                  415  548_7723
    Michael             O’Leary                 408  286_2428
    …
    (23 row(s)  affected)
    在SELECT語(yǔ)句中,你需要列出多少個(gè)字段,你就可以列出多少。不要忘了把字段名用逗號(hào)隔開(kāi)。你也可以用星號(hào)(*)從一個(gè)表中取出所有的字段。這里有一個(gè)使用星號(hào)的例子:
    SELECT  *  FROM  authors
    這個(gè)SELECT語(yǔ)句執(zhí)行后,表中的所有字段的值都被取出。你會(huì)發(fā)現(xiàn)你將在SQL查詢(xún)中頻繁使用星號(hào)。
    技巧:
    你可以使用星號(hào)來(lái)查看一個(gè)表的所有列的名字。要做到這一點(diǎn),只需要在執(zhí)行完SELECT語(yǔ)句后看一下查詢(xún)結(jié)果的列標(biāo)題。
操作多個(gè)表
    到現(xiàn)在為止,你只嘗試了用一句SQL查詢(xún)從一個(gè)表中取出數(shù)據(jù)。你也可以用一個(gè)SELECT語(yǔ)句同時(shí)從多個(gè)表中取出數(shù)據(jù),只需在SELECT語(yǔ)句的FROM從句中列出要從中取出數(shù)據(jù)的表名稱(chēng)即可:
        
    SELECT au_lname ,title  FROM  authors, titles   
    這個(gè)SELECT語(yǔ)句執(zhí)行時(shí),同時(shí)從表authors和表titles中取出數(shù)據(jù)。從表authors中取出所有的作者名字,從表titles中取出所有的書(shū)名。在ISQL/w程序中執(zhí)行這個(gè)查詢(xún),看一下查?A

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多