作者:啊4呀么啊4呀 | 来源:互联网 | 2024-09-26 21:07
联合查询1:概述将多次查询(多条select语句),在记录上进行拼接(字段是不会增加的),只要求字段一样,与数据类型无关union:联合的意思,即把两次或多次查询结果
联合查询
1:概述
将多次查询(多条select语句),在记录上进行拼接(字段是不会增加的),只要求字段一样,与数据类型无关
union:联合的意思,即把两次或多次查询结果合并起来。
要求:两次查询的列数必须一致
推荐:列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样
可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。
如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。
如果不想去掉重复的行,可以使用union all。
2:基本语法(默认去重)
多条select语句构成:每一条select语句获取的字段必须严格一致,但是字段类型无关
select 语句1
Union(union 选项)
Union 选项 与select选项一样有两个
ALL: 保留所有(不管重复),单条select,一张表是允许重复的
Distinct 去重(大量表合并在一起,去除重复的)
3:案例演示
1:单张表查询
SELECT * FROM t_class
2:联合查询(默认是去重的)
SELECT * FROM t_class
UNION
SELECT * FROM t_class;
3:联合查询(不去重ALL)
SELECT * FROM t_class
UNION ALL
SELECT * FROM t_class;
4:联合查询(只要求字段,不管数据类型)
查询出来的数据没有意义
SELECT * FROM t_class
UNION ALL
SELECT id ,NAME,number FROM t_student;
4:联合查询的意义(数据过长百亿级别)
1:查询同一张表,但是需求不同: 如查询男生升序,女生身高降序.
2:多表查询:多张表的结构是完全一样的,保存的数据(结构)也是一样的.
比如腾讯QQ,有11位,有百亿级别,将首位1-9分为9张表,数据就从100亿级别降到10亿级别,第二位再分9张表,数据就将到1亿级别,依次类推,而怎么查询所有的记录里,这就需要将所有的表联合起来进行查询
5:联合查询(小案例:男生升序,女生降序)
1:在联合查询中:order by不能直接使用,需要对查询语句使用括号括起来
2:若要order by 生效,必须搭配limit(使用限定最大数值即可)
3:SQL语句
查询学生表,男生年龄升序,女生年龄降序
(SELECT * FROM t_student WHERE gender='男' ORDER BY age ASC LIMIT 99999)
UNION
(SELECT * FROM t_student WHERE gender='女' ORDER BY age DESC LIMIT 99999);