UNION 和 UNION ALL操作符都用于合并两个或多个 SELECT 语句的结果集,不同的是UNION把结果集去重了(即不包含重复的值),而UNION ALL不去重(即含有重复的值)。还有一点要注意,UNION 内部的 SELECT 语句查询的字段必须拥有相同数量的列,列也必须拥有相似的数据类型,并且每条 SELECT 语句中的列的顺序必须相同。
为了更好的理解UNION 和 UNION ALL的用法,首先创建表,插入数据
1.创建表student_info
CREATE TABLE `student_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`class` varchar(255) DEFAULT NULL,
`student_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
2.插入数据
INSERT INTO student_info VALUES(NULL,'A班','张三');
INSERT INTO student_info VALUES(NULL,'A班','李四');
INSERT INTO student_info VALUES(NULL,'A班','李四');
INSERT INTO student_info VALUES(NULL,'B班','孙六');
INSERT INTO student_info VALUES(NULL,'B班','张三');
INSERT INTO student_info VALUES(NULL,'B班','王五');
3.实际操作
3.1查看所有在A、B班不同学生名字(即不含重复的姓名)
sql语句如下:
SELECT student_name from student_info where class='A班'
UNION
SELECT student_name from student_info where class='B班';
运行结果:只显示了一个张三和李四,而非两个张三和李四
3.2查看在A、B班所有学生的名字
sql语句如下:
SELECT student_name from student_info where class='A班'
UNION ALL
SELECT student_name from student_info where class='B班';
运行结果:所有的张三和李四学生都查出来了
3.3查看所有在A、B班不同学生班级和名字(即班级和姓名不能同时重复)
sql语句如下:
SELECT class,student_name from student_info where class='A班'
UNION
SELECT class,student_name from student_info where class='B班';
运行结果:A班的李四学生只有一个查出来了
3.3查询字段个数不同效果
SELECT student_name from student_info where class='A班'
UNION
SELECT class,student_name from student_info where class='B班';
会提示:[Err] 1222 - The used SELECT statements have a different number of columns
意思就是:[Err] 1222 -使用的SELECT语句有不同数量的列
同样也可以自己试试查询的字段顺序不同,类型不同,,,
------------------------------------希望你有所收获,喜欢的话就点个赞吧,哈哈哈------------------------------------