1. 程式人生 > 其它 ><轉載>SQL 基礎知識梳理(七)- 集合運算

<轉載>SQL 基礎知識梳理(七)- 集合運算

 

 

博主】反骨仔   【原文】http://www.cnblogs.com/liqingwen/p/6575668.html 

 

 

目錄

  • 表的加減法
  • 聯結(以列為單位)

 

一、表的加減法

  1.集合:記錄的集合(表、檢視和查詢的執行結果)。

 

  2.UNION(並集):表的加法

 初始化測試資料

 圖

  並集圖,會移除重複的記錄。

 

  3.注意事項:

  (1)作為運算物件的記錄的列數必須相同

圖:列數不匹配

  (2)作為運算物件的記錄中列的型別必須一致

圖:型別不一致

  【備註】可以使用型別轉換函式 CAST

 

  4.ALL 選項 - 包含重複行的集合運算

圖:保留重複行

 

   5.INTERSECT(交集) - 選取表中公共的部分

   類似該並集圖:

 

  6.EXCEPT(差集) - 記錄的減法

  需要注意,被減數和減數的位置調換,結果是不同的:

 

二、聯結(以列為單位)

  1.上一節集合運算的特徵是以“行方向”為單位操作,在進行集合運算時會導致記錄行數的增減,不過佇列不會影響,因為它們的列數要一致。

  2.聯結(JOIN)運算:“新增列”的運算,從其它表的列新增過來。

  3.INNER JOIN - 內聯結

  聯結運算:以 A 表中的列作為橋樑,將 B 表中滿足同樣條件的列彙集到同一結果中。

  要點:

    ①FROM 子句:FROM dbo.TenpoShohin AS TS INNER JOIN dbo.Shohin AS S 

    這裡使用 INNER JOIN 將兩張表關聯起來,TS 和 S 分別是兩張表的別名,可以增強表的可讀性。

    ②ON 子句:ON S.shohin_id = TS.shohin_id

    ON 後面記載的是聯結條件,聯結兩張表所使用的的列,可以稱為聯結鍵。

    這是一個比較直觀的例子,兩個小鎮,中間隔了一條河,通過 ON 子句作為他們兩者之間的橋樑。

    ③SELECT 子句:SELECT TS.tenpo_id ,TS.tenpo_mei ,S.shohin_mei ,S.hanbai_tanka

    採用“<表的別名>.<列名>”格式來顯示,這樣就可以清楚的知道該列來自哪張表。

 

  4.OUTER JOIN - 外聯結

  

  (1)要點:

    ①選取出單張表中全部的資訊

    與之前的內聯表相比,15 行比之前 13行多了 2 行。因為多出的 2 條記錄在 TenpoShohin 表並不存在。內聯結只能選取出同時存在於兩張表中的資料,而外聯結,只要資料存在某一張表中,就能夠讀取出來。也就是說,希望生成固定行數的記錄,就需要使用外聯結。

    ②主表的選擇

    最終的結果只會包含主表內所有的資料。指定主表的關鍵字是 LEFT 和 RIGHT,使用 LEFT 時左側的表為主表,使用 RIGHT 時右側的表為主表(如上圖的 Shohin 表)。

  【備註】外聯結使用 LEFT 和 RIGHT 來指定主表。

 

  5.多張表的聯結

 初始化測試資料

  3 表聯結就是多 1 行 JOIN 子句而已,多表聯結就多幾行 JOIN 字句唄。

 

  6.CROSS JOIN(笛卡兒積)- 交叉聯結

  這種聯結在實際業務中很少使用。

  TenpoShohin 表 13 條記錄, Shohin 表 8 條記錄,13*8=104 條記錄。