Union和Union All到底有什麼區別

iteye_20954發表於2011-12-31

以前一直不知道Union和Union All到底有什麼區別,今天來好好的研究一下,網上查到的結果是下面這個樣子,可是還是不是很理解,下面將自己親自驗證:

Union:對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序;

Union All:對兩個結果集進行並集操作,包括重複行,不進行排序;

下面進行簡單的測試(因為是測試,所以sql程式碼寫的很簡單,沒有什麼很嚴格的規範,只是為了理解這兩者之間的區別)

嚴格的標準寫法應該先判斷資料庫是否存在,表是否存在等等約束

第一步,建庫:

  1. CreatedatabaseTest
  2. go
  3. useTest
  4. go


第二步,建表:

  1. CreatetableTable1
  2. (
  3. idintnotnull,
  4. namevarchar(20)notnull
  5. )
  6. CreatetableTable2
  7. (
  8. idintnotnull,
  9. namevarchar(20)notnull
  10. )

第三步,插入測試資料:

  1. InsertintoTable1values(1,'姚羽')
  2. InsertintoTable1values(2,'邊兵兵')
  3. InsertintoTable1values(3,'袁磊')
  4. InsertintoTable2values(1,'姚羽')
  5. InsertintoTable2values(2,'柳春平')
  6. InsertintoTable2values(3,'張永超')
  7. InsertintoTable2values(4,'劉華健')


第四步,測試開始:

  1. select*fromTable1
  2. select*fromTable2

執行兩個表的查詢結果如下


可以很容易的看到,上面插入的測試資料當中,有一條是重複的

那麼我們 先看執行union 看看

  1. select*fromTable1
  2. union
  3. select*fromTable2


再執行union all 看看

  1. select*fromTable1
  2. unionall
  3. select*fromTable2

相信到此時,應該明白了union 和 union all 的區別了, 我以前也一直沒搞清楚,這次看視訊,就終於搞清楚了


相關文章