<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            軟件測試數據庫中SQL Join連接詳解

            發(fā)布: 2010-9-28 13:55 | 作者: 網(wǎng)絡(luò )轉載 | 來(lái)源: 領(lǐng)測軟件測試網(wǎng)采編 | 查看: 102次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

            軟件測試數據庫中SQL Join連接詳解

            SQL是高級的非過(guò)程化編程語(yǔ)言,允許用戶(hù)在高層數據結構上工作。它不要求用戶(hù)指定對數據的存放方法,也不需要用戶(hù)了解具體的數據存放方式,所以具有完全不同底層結構的不同數據庫系統,可以使用相同的SQL語(yǔ)言作為數據輸入與管理的  SQL
            接口。它以記錄集合作為操作對象,所有SQL語(yǔ)句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語(yǔ)句的輸出作為另一條SQL語(yǔ)句的輸入,所以SQL語(yǔ)句可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語(yǔ)言中需要一大段程序實(shí)現的功能只需要一個(gè)SQL語(yǔ)句就可以達到目的,這也意味著(zhù)用SQL語(yǔ)言可以寫(xiě)出非常復雜的語(yǔ)句。   結構化查詢(xún)語(yǔ)言(Structured Query Language)最早是IBM的圣約瑟研究實(shí)驗室為其關(guān)系數據庫管理系統SYSTEM R開(kāi)發(fā)的一種查詢(xún)語(yǔ)言,它的前身是SQUARE語(yǔ)言。SQL語(yǔ)言結構簡(jiǎn)潔,功能強大,簡(jiǎn)單易學(xué),所以自從IBM公司1981年推出以來(lái),SQL語(yǔ)言得到了廣泛的應用。如今無(wú)論是像Oracle、Sybase、Informix、SQL Server這些大型的數據庫管理系統,還是像Visual Foxpro、PowerBuilder這些PC上常用的數據庫開(kāi)發(fā)系統,都支持SQL語(yǔ)言作為查詢(xún)語(yǔ)言。   美國國家標準局(ANSI)與國際標準化組織(ISO)已經(jīng)制定了SQL標準。ANSI是一個(gè)美國工業(yè)和商業(yè)集團組織,負責開(kāi)發(fā)美國的商務(wù)和通訊標準。ANSI同時(shí)也是ISO和International Electrotechnical Commission(IEC)的成員之一。ANSI 發(fā)布與國際標準組織相應的美國標準。1992年,ISO和IEC發(fā)布了SQL國際標準,稱(chēng)為SQL-92。ANSI隨之發(fā)布的相應標準是ANSI SQL-92。ANSI SQL-92有時(shí)被稱(chēng)為ANSI SQL。盡管不同的關(guān)系數據庫使用的SQL版本有一些差異,但大多數都遵循 ANSI SQL 標準。SQL Server使用ANSI SQL-92的擴展集,稱(chēng)為T(mén)-SQL,其遵循ANSI制定的 SQL-92標準。   SQL語(yǔ)言包含4個(gè)部分:   ※ 數據定義語(yǔ)言(DDL),例如:CREATE、DROP、ALTER等語(yǔ)句。   ※ 數據操作語(yǔ)言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語(yǔ)句。   ※ 數據查詢(xún)語(yǔ)言(DQL),例如:SELECT語(yǔ)句。   ※ 數據控制語(yǔ)言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等語(yǔ)句。   SQL語(yǔ)言包括三種主要程序設計語(yǔ)言類(lèi)別的語(yǔ)句:數據定義語(yǔ)言(DDL),數據操作語(yǔ)言(DML)及數據控制語(yǔ)言(DCL)。   SQL 是用于訪(fǎng)問(wèn)和處理數據庫的標準的計算機語(yǔ)言。   SQL 指結構化查詢(xún)語(yǔ)言 SQL 使我們有能力訪(fǎng)問(wèn)數據庫 SQL 是一種 ANSI 的標準計算機語(yǔ)言 編者注:ANSI,美國國家標準化組織

            接下來(lái)給大家說(shuō)一下有關(guān)SQL Join連接詳解
            連接類(lèi)型
            在關(guān)系代數中,連接運算是由一個(gè)笛卡爾積運算和一個(gè)選取運算構成的。首先用笛卡爾積完成對兩個(gè)數據集合的乘運算,然后對生成的結果集合進(jìn)行選取運算,確保只把分別來(lái)自?xún)蓚(gè)數據集合并且具有重疊部分的行合并在一起。連接的全部意義在于在水平方向上合并兩個(gè)數據集合(通常是表),并產(chǎn)生一個(gè)新的結果集合,其方法是將一個(gè)數據源中的行于另一個(gè)數據源中和它匹配的行組合成一個(gè)新元組。
            SQL提供了多種類(lèi)型的連接方式,它們之間的區別在于:從相互交疊的不同數據集合中選擇用于連接的行時(shí)所采用的方法不同。
            連接類(lèi)型          定義
            內連接          只連接匹配的行
            左外連接          包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
            右外連接          包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
            全外連接          包含左、右兩個(gè)表的全部行,不管另外一邊的表中是否存在與它們匹配的行。
            (H)(theta)連接          使用等值以外的條件來(lái)匹配左、右兩個(gè)表中的行
            交叉連接          生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將一個(gè)數據源中的每個(gè)行與另一個(gè)數據源的每個(gè)行都一一匹配
            在INFORMIX中連接表的查詢(xún)
            如果FROM子句指定了多于一個(gè)表引用,則查詢(xún)會(huì )連接來(lái)自多個(gè)表的行。連接條件指定各列之間(每個(gè)表至少一列)進(jìn)行連接的關(guān)系。因為正在比較連接條件中的列,所以它們必須具有一致的數據類(lèi)型。
            SELECT語(yǔ)句的FROM子句可以指定以下幾種類(lèi)型的連接
            FROM子句關(guān)鍵字          相應的結果集
            CROSS JOIN          笛卡爾乘積(所有可能的行對)
            INNER JOIN          僅對滿(mǎn)足連接條件的CROSS中的列
            LEFT OUTER JOIN          一個(gè)表滿(mǎn)足條件的行,和另一個(gè)表的所有行
            RIGHT OUTER JOIN          與LEFT相同,但兩個(gè)表的角色互換
            FULL OUTER JOIN          LEFT OUTER 和 RIGHT OUTER中所有行的超集

            2.2 內連接(Inner Join)
            內連接是最常見(jiàn)的一種連接,它頁(yè)被稱(chēng)為普通連接,而E.FCodd最早稱(chēng)之為自然連接。
            下面是ANSI SQL-92標準
            select *
            from    t_institution i
            inner join t_teller t
            on i.inst_no = t.inst_no
            where i.inst_no = "5801"
            其中inner可以省略。
            等價(jià)于早期的連接語(yǔ)法
            select *
            from t_institution i, t_teller t
            where i.inst_no = t.inst_no
            and i.inst_no = "5801"

            2.3 外連接
            2.3.1          左外連接(Left Outer Jion)
            select *
            from    t_institution i
            left outer join t_teller t
            on i.inst_no = t.inst_no
            其中outer可以省略。
            2.3.2          右外連接(Rigt Outer Jion)
            select *
            from    t_institution i
            right outer join t_teller t
            on i.inst_no = t.inst_no
            2.3.3          全外連接(Full Outer)
            全外連接返回參與連接的兩個(gè)數據集合中的全部數據,無(wú)論它們是否具有與之相匹配的行。在功能上,它等價(jià)于對這兩個(gè)數據集合分別進(jìn)行左外連接和右外連接,然后再使用消去重復行的并操作將上述兩個(gè)結果集合并為一個(gè)結果集。
            在現實(shí)生活中,參照完整性約束可以減少對于全外連接的使用,一般情況下左外連接就足夠了。在數據庫中沒(méi)有利用清晰、規范的約束來(lái)防范錯誤數據情況下,全外連接就變得非常有用了,你可以使用它來(lái)清理數據庫中的數據。
            select *
            from    t_institution i
            full outer join t_teller t
            on i.inst_no = t.inst_no
            2.3.4          外連接與條件配合使用
            當在內連接查詢(xún)中加入條件是,無(wú)論是將它加入到j(luò )oin子句,還是加入到where子句,其效果是完全一樣的,但對于外連接情況就不同了。當把條件加入到j(luò )oin子句時(shí),SQL Server、Informix會(huì )返回外連接表的全部行,然后使用指定的條件返回第二個(gè)表的行。如果將條件放到where子句中,SQL Server將會(huì )首先進(jìn)行連接操作,然后使用where子句對連接后的行進(jìn)行篩選。下面的兩個(gè)查詢(xún)展示了條件放置位子對執行結果的影響:
            條件在join子句
            select *
            from    t_institution i
            left outer join t_teller t
            on i.inst_no = t.inst_no
            and i.inst_no = “5801”
            結果是:
            inst_no      inst_name              inst_no      teller_no    teller_name
            5801        天河區                5801        0001        tom
            5801        天河區                5801        0002        david
            5802        越秀區
            5803        白云區
            條件在where子句
            select *
            from    t_institution i
            left outer join t_teller t
            on i.inst_no = t.inst_no
            where i.inst_no = “5801”
            結果是:
            inst_no      inst_name              inst_no      teller_no    teller_name
            5801        天河區                5801        0001        tom
            5801        天河區                5801        0002        david

            2.4 自身連接
            自身連接是指同一個(gè)表自己與自己進(jìn)行連接。這種一元連接通常用于從自反關(guān)系(也稱(chēng)作遞歸關(guān)系)中抽取數據。例如人力資源數據庫中雇員與老板的關(guān)系。
            下面例子是在機構表中查找本機構和上級機構的信息。
            select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
            from t_institution i
            join t_institution s
            on i.superior_inst = s.inst_no

            結果是:
            superior_inst sup_inst_name          inst_no      inst_name
            800            廣州市                5801        天河區
            800            廣州市    &nbs

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/

            TAG: Join sql SQL Sql 軟件測試 數據庫 詳解


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>