您的位置:首页 > 数据库 > MySQL

MySQL的联合查询深入分析及案例

2017-11-14 09:23 567 查看
联合查询

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);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 联合查询