导读


在办公的时候,看见同事写的SQL语句中有UNION和UNION ALL操作符,不明白这两个的作用是什么,就百度尝试下,下面简单介绍下。

语法


SQL UNION 语法

  1. SELECT column_name(s) FROM table_name1
  2. UNION
  3. SELECT column_name(s) FROM table_name2

注意:默认地UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

注意:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

使用


首先新建两个数据库,简单的来说就是两个地区的部门信息吧:


-- ----------------------------
-- Table structure for dept_sh
-- ----------------------------
DROP TABLE IF EXISTS `dept_sh`;
CREATE TABLE `dept_sh` (
  `e_id` int(11) NOT NULL AUTO_INCREMENT,
  `e_name` varchar(255) DEFAULT NULL,
  `e_Address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`e_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of dept_sh
-- ----------------------------
INSERT INTO `dept_sh` VALUES ('1', '同济大学部', '上海');
INSERT INTO `dept_sh` VALUES ('2', '上海理工大学部', '上海');
INSERT INTO `dept_sh` VALUES ('3', '复旦大学部', '上海');
INSERT INTO `dept_sh` VALUES ('4', '中国科技大部门', 'China');



-- ----------------------------
-- Table structure for dept_hz
-- ----------------------------
DROP TABLE IF EXISTS `dept_hz`;
CREATE TABLE `dept_hz` (
  `e_id` int(11) NOT NULL AUTO_INCREMENT,
  `e_name` varchar(255) DEFAULT NULL,
  `e_Address` varchar(255) DEFAULT NULL,
  `e_mobile` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`e_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of dept_hz
-- ----------------------------
INSERT INTO `dept_hz` VALUES ('1', '浙江大学部门', '浙江', '368454');
INSERT INTO `dept_hz` VALUES ('2', '杭州电子科技大部门', '浙江', '974252');
INSERT INTO `dept_hz` VALUES ('3', '浙江师范大学部门', '浙江', '892975');
INSERT INTO `dept_hz` VALUES ('4', '中国科技大部门', 'China', '123456');

里面数据有一条是重复的(中国科技大部门),两个表加起来一共8条数据。

使用UNION

SELECT e_name,e_address from dept_hz
UNION
SELECT e_name,e_address from dept_sh

控制台显示结果:
一共7条数据,少了一条重复性的数据。
image.png

使用UNION ALL

SELECT e_name,e_address from dept_hz
UNION ALL
SELECT e_name,e_address from dept_sh

控制台显示结果:
一共8条数据,重复性的数据也显示在列表中。
image.png

总结


UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。