首頁  >  文章  >  資料庫  >  SQL入門學習之淺析UNION關鍵字的用法

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

青灯夜游
青灯夜游轉載
2022-02-21 10:55:225645瀏覽

我們在開發過程中常常會使用到將多個查詢結果都直接顯示出來,那麼應該怎麼查詢呢?這篇文章進行學習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查詢出了所有的值,沒有移除重複資料。

結語

  好了,以上就是SQL中的UNION關鍵字用法,感謝您的閱讀,希望您喜歡,如對您有幫助,歡迎點讚收藏。如有不足之處,歡迎評論指正。下次見。

推薦學習:

mysql影片教學

#

以上是SQL入門學習之淺析UNION關鍵字的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除