MySQL:union all與union區別詳解


union 是對數據進行並集操作,不包括重復行,同時進行默認排序

Union all 是對數據進行並集操作,包括重復行,不進行排序

舉例說明:

創建數據庫表:

CREATE TABLE `t_demo` (
  `id` int(32) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `num` int(3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

復制此表:

CREATE TABLE `t_demo_copy` (
  `id` int(32) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `num` int(3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

加入數據:

INSERT INTO `t_demo` VALUES ('1', '張三', '21', '69');
INSERT INTO `t_demo` VALUES ('2', '李四', '22', '98');
INSERT INTO `t_demo` VALUES ('3', '王五', '20', '54');
INSERT INTO `t_demo` VALUES ('4', '趙甜', '22', '80');


INSERT INTO `t_demo_copy` VALUES ('1', '張三', '21', '69');
INSERT INTO `t_demo_copy` VALUES ('2', '豬八戒', '22', '98');
INSERT INTO `t_demo_copy` VALUES ('3', '王五', '20', '54');
INSERT INTO `t_demo_copy` VALUES ('4', '趙甜', '22', '80');
INSERT INTO `t_demo_copy` VALUES ('5', '孫悟空', '22', '100');
INSERT INTO `t_demo_copy` VALUES ('6', '李四', '24', '99');

 

MySQL中的UNION

SELECT * FROM t_demo
UNION
SELECT * FROM t_demo_copy

 

查詢結果:

我們從上面的查詢數據可以發現:

UNION在進行表鏈接后會篩選掉重復的記錄,對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。

MySQL中的UNION ALL

SELECT * FROM t_demo
UNION ALL
SELECT * FROM t_demo_copy

 

查詢結果:

從上面數據我們可以看到:

UNION ALL只是簡單的將兩個結果合並后就返回。如果返回的兩個結果集中有重復的數據,那么返回的結果集就會包含重復的數據了。

效率:

從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合並的兩個結果集中不包含重復數據且不需要排序時的話,那么就使用UNION ALL。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM