sql——Union的使用場景

最近遇到一個需求,需要將數據庫的一條記錄展示成4條記錄。初次一聽,什麼玩意??仔細分析之後,大概是這樣,一條記錄有多個字段,這些字段又可以歸爲不同類別,所以需要展示成多行形式。

這裏想到2種方案,1是將記錄從數據庫中原模原樣取出來,在代碼中將記錄分成多條記錄;2是使用union,選擇記錄中的部分字段,合併記錄中的另一部分字段,接下來分析第二種方法。

1:建一張測試表 user

   

插入幾條數據:

    

2:使用union 將每條記錄顯示成 2條記錄,

       前端展示成   :     水果,1,蘋果,小蘋果

                                     野味,2,山楂,小山楂

                                     水果,1,橘子,小橘子

                                      野味,2,楊桃,小楊桃

      sql語句:select name,id,apple,appleName from user union select name,id,orange,orangeName from user

      執行結果:

      分析:如果單獨執行 select name,id,apple,appleName from user,只會得到2條記錄,使用union後將 select name,id,orange,orangeName from user (2條)的記過合併 ,並且去重。合併,去重表現在結果的總記錄行數。 上述結果已經可以證明union 有進行合併(4條),如何證明有去重呢?

2.1.證明union存在去重功能

       這裏需要改變user表的數據,不然沒法證明。

       sql:select name,id,apple,appleName from user union select name,id,orange,orangeName from user 

       執行結果:

         

         分析:結果變成了3條,select name,id,apple,appleName from user 的結果有2條, select name,id,orange,orangeName from user 也有2條,但是 4條結果中有2條是重複的記錄:水果,1,蘋果,小蘋果。最終去掉一條,剩下3條。如果想要不去重記錄,使用 union all 連接結果。

3.union使用的注意事項

      3.1.union 的結果記錄 名稱是 以第一條sql(使用union)的結果命名的。

       3.2 使用union的sql 返回的列數必須一致,且必需與第一條sql的列數一致

       sql:select name,id,apple from user union select name,id,orange,orangeName from user

                第一條sql 返回 3 個字段,第二條sql返回4個字段

      執行結果

          

   3.3 使用union的sql 返回字段類型可以不用一致

       將表結構變成:

       

  sql:select name,id,apple,appleName from user union select name,id,orange,orangeName from user

  執行結果:

   

   3.4 使用union 可以構造 數據

       添加一列 type 數據

      sql:select name,id,apple,appleName, 1 type from user union select name,id,orange,orangeName, 2 from user

      執行結果:

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章