SQL入門學習之淺析UNION關鍵字的用法

我們開發過程中經常會使用到將多個查詢結果都直接顯示出來,那么應該怎么查詢呢?本篇文章進行學習sql,來一起看看sql中的union關鍵字,看看它要怎么使用,希望對大家有所幫助!

SQL入門學習之淺析UNION關鍵字的用法

SQL中的UNION關鍵字,將實現將多個查詢條件中的結果展示出來。

UNION

??UNION的中文含義是聯合的意思,即合并兩個或多個 select 語句的結果。使用技巧如下:

  • UNION 內部的每個 SELECT 語句必須擁有相同數量的列。
  • 列必須擁有相似的數據類型
  • 每個 SELECT 語句中的列的順序必須相同。

相同數量的列

如下圖,使用上一章介紹的數據作為演示數據

SQL入門學習之淺析UNION關鍵字的用法

分別建立表s_user 和表s_user_1

CREATE?TABLE?`s_user`?( ??`userid`?int(11)?NOT?NULL?AUTO_INCREMENT, ??`user_name`?varchar(255)?DEFAULT?NULL, ??`name`?varchar(255)?DEFAULT?NULL, ??`pass_word`?varchar(255)?DEFAULT?NULL, ??`salt`?varchar(255)?DEFAULT?NULL, ??`state`?varchar(255)?DEFAULT?NULL, ??`create_time`?datetime?DEFAULT?NULL, ??PRIMARY?KEY?(`userid`) )?ENGINE=InnoDB?AUTO_INCREMENT=3?DEFAULT?CHARSET=utf8;

測試數據如下:

INSERT?INTO?`test`.`s_user`(`userid`,?`user_name`,?`name`,?`pass_word`,?`salt`,?`state`,?`create_time`)?VALUES?(1,?'小米',?'小米',?'123123',?'123',?'1',?'2022-02-10?19:48:43'); INSERT?INTO?`test`.`s_user`(`userid`,?`user_name`,?`name`,?`pass_word`,?`salt`,?`state`,?`create_time`)?VALUES?(2,?'小白',?'小白',?'123123',?'123',?'1',?'2022-02-10?19:48:43');  INSERT?INTO?`test`.`s_user_1`(`userid`,?`user_name`,?`name`,?`pass_word`,?`salt`,?`state`,?`create_time`)?VALUES?(1,?'小紅',?'小紅',?'123123',?'123',?'1',?'2022-02-10?19:48:43'); INSERT?INTO?`test`.`s_user_1`(`userid`,?`user_name`,?`name`,?`pass_word`,?`salt`,?`state`,?`create_time`)?VALUES?(2,?'小黃',?'小黃',?'123123',?'123',?'1',?'2022-02-10?19:48:43');

UNION 內部的每個 SELECT 語句必須擁有相同數量的列:先查詢具有相同列的SQL

SELECT?*?FROM?`s_user`?UNION?SELECT?*?FROM?`s_user_1`

查詢出所有的列,可以看到,執行結果如下。

SQL入門學習之淺析UNION關鍵字的用法

如果第一個查詢是所有列,第二個查詢是三個字段,那么查詢結果又是怎么樣呢,現在執行如下SQL:

錯誤用法

SELECT?*?FROM?`s_user`?UNION?SELECT?userid,name,pass_word?FROM?`s_user_1`

SQL入門學習之淺析UNION關鍵字的用法

錯誤提示:使用的SELECT語句查詢出不同的列數

正確用法

SELECT?userid,name,pass_word??FROM?`s_user`?UNION?SELECT?userid,name,pass_word?FROM?`s_user_1`

SQL入門學習之淺析UNION關鍵字的用法

數據類型

??上面看到了多個查詢的列數必須相同,那么查詢出的列數如果相同,查詢字段的數據類型不同,是否可正常處理呢?下面將s_user查詢中的pass_word換成create_time,進行查詢。通過查詢之后可以看到。在SQL查詢中,列的數據類型是無關的。當然實際業務中是不會將其設置成不同的類型的。

SELECT?userid,name,create_time??FROM?`s_user`?UNION?SELECT?pass_word,name,userid?FROM?`s_user_1`

SQL入門學習之淺析UNION關鍵字的用法

列順序

??在使用UNION關鍵字進行查詢時,是否和列的順序有關呢,上面看到可能和列的順序有關,可能也是無關的,那么進行一下測試。可以看到執行結果是和列的順序無關的。在實際業務中是合并多個查詢,因此我們在項目中定義是需要列的順序一致的。

SELECT?create_time,userid,name??FROM?`s_user`?UNION?SELECT?pass_word,name,userid?FROM?`s_user_1`

SQL入門學習之淺析UNION關鍵字的用法

UNION 和 UNION ALL區別

??為了測試UNION 和 UNION ALL區別需要在數據表s_user_1中增加【小白】,與表s_user中的【小白】都存在數據庫中,兩個會有什么不同結果呢。

INSERT?INTO?`test`.`s_user_1`(`userid`,?`user_name`,?`name`,?`pass_word`,?`salt`,?`state`,?`create_time`)?VALUES?(3,?'小白',?'小白',?'123123',?'123',?'1',?'2022-02-10?19:48:43');

SQL入門學習之淺析UNION關鍵字的用法

首先執行:

SELECT?user_name,name,pass_word,salt FROM?`s_user`?UNION?SELECT?user_name,name,pass_word,salt?FROM?`s_user_1`

執行結果:

SQL入門學習之淺析UNION關鍵字的用法

再次執行

SELECT?user_name,name,pass_word,salt FROM?`s_user`?UNION?ALL?SELECT?user_name,name,pass_word,salt?FROM?`s_user_1`

執行結果:

SQL入門學習之淺析UNION關鍵字的用法

??可以看到UNION關聯的去除了重復項,而UNION ALL查詢出了所有的值,沒有去除重復數據。

結語

??好了,

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享