使用關(guān)系代數(shù)合并數(shù)據(jù) 1 關(guān)系代數(shù) 合并數(shù)據(jù)集合的理論基礎(chǔ)是關(guān)系代數(shù),它是由E.F.Codd于1970年提出的。 在關(guān)系代數(shù)的形式化語(yǔ)言中: ? 用表、或者數(shù)據(jù)集合表示關(guān)系或者實(shí)體。 ? 用行表示元組。 ? 用列表示屬性。 關(guān)系代數(shù)包含以下8個(gè)關(guān)系運(yùn)算符 ? 選取――返回滿足指定條件的行。 ? 投影――從數(shù)據(jù)集合中返回指定的列。 ? 笛卡爾積――是關(guān)系的乘法,它將分別來(lái)自兩個(gè)數(shù)據(jù)集合中的行以所有可能的方式進(jìn)行組合。 ? 并――關(guān)系的加法和減法,它可以在行的方向上合并兩個(gè)表中的數(shù)據(jù),就像把一個(gè)表壘在另一個(gè)表之上一樣。 ? 交――返回兩個(gè)數(shù)據(jù)集合所共有的行。 ? 差――返回只屬于一個(gè)數(shù)據(jù)集合的行。 ? 連接――在水平方向上合并兩個(gè)表,其方法是:將兩個(gè)表中在共同數(shù)據(jù)項(xiàng)上相互匹配的那些行合并起來(lái)。 ? 除――返回兩個(gè)數(shù)據(jù)集之間的精確匹配。 此外,作為一種實(shí)現(xiàn)現(xiàn)代關(guān)系代數(shù)運(yùn)算的方法,SQL還提供了: ? 子查詢――類似于連接,但更靈活;在外部查詢中,方式可以使用表達(dá)式、列表或者數(shù)據(jù)集合的地方都可以使用子查詢的結(jié)果。 本章將主要講述多種類型的連接、簡(jiǎn)單的和相關(guān)的子查詢、幾種類型的并、關(guān)系除以及其他的內(nèi)容。 2 使用連接 2.1 連接類型 在關(guān)系代數(shù)中,連接運(yùn)算是由一個(gè)笛卡爾積運(yùn)算和一個(gè)選取運(yùn)算構(gòu)成的。首先用笛卡爾積完成對(duì)兩個(gè)數(shù)據(jù)集合的乘運(yùn)算,然后對(duì)生成的結(jié)果集合進(jìn)行選取運(yùn)算,確保只把分別來(lái)自兩個(gè)數(shù)據(jù)集合并且具有重疊部分的行合并在一起。連接的全部意義在于在水平方向上合并兩個(gè)數(shù)據(jù)集合(通常是表),并產(chǎn)生一個(gè)新的結(jié)果集合,其方法是將一個(gè)數(shù)據(jù)源中的行于另一個(gè)數(shù)據(jù)源中和它匹配的行組合成一個(gè)新元組。 SQL提供了多種類型的連接方式,它們之間的區(qū)別在于:從相互交疊的不同數(shù)據(jù)集合中選擇用于連接的行時(shí)所采用的方法不同。 連接類型 定義 內(nèi)連接 只連接匹配的行 左外連接 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行 右外連接 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行 全外連接 包含左、右兩個(gè)表的全部行,不管另外一邊的表中是否存在與它們匹配的行。 (H)(theta)連接 使用等值以外的條件來(lái)匹配左、右兩個(gè)表中的行 交叉連接 生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將一個(gè)數(shù)據(jù)源中的每個(gè)行與另一個(gè)數(shù)據(jù)源的每個(gè)行都一一匹配 在INFORMIX中連接表的查詢 如果FROM子句指定了多于一個(gè)表引用,則查詢會(huì)連接來(lái)自多個(gè)表的行。連接條件指定各列之間(每個(gè)表至少一列)進(jìn)行連接的關(guān)系。因?yàn)檎诒容^連接條件中的列,所以它們必須具有一致的數(shù)據(jù)類型。 SELECT語(yǔ)句的FROM子句可以指定以下幾種類型的連接 FROM子句關(guān)鍵字 相應(yīng)的結(jié)果集 CROSS JOIN 笛卡爾乘積(所有可能的行對(duì)) INNER JOIN 僅對(duì)滿足連接條件的CROSS中的列 LEFT OUTER JOIN 一個(gè)表滿足條件的行,和另一個(gè)表的所有行 RIGHT OUTER JOIN 與LEFT相同,但兩個(gè)表的角色互換 FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集
2.2 內(nèi)連接(Inner Join) 內(nèi)連接是最常見(jiàn)的一種連接,它頁(yè)被稱為普通連接,而E.FCodd最早稱之為自然連接。 下面是ANSI SQL-92標(biāo)準(zhǔn) select * |