mysql中的union用法以及子查询 排序等综合应用

union查询就是把2条或者多条sql语句的查询结果,合并成一个结果集。
如:sql1: N行,sql2: M行,sql1 union sql2 —> N+M行
1、能否从2张表查询再union呢?
可以,union 合并的是"结果集",不区分在自于哪一张表.
2、取自于2张表,通过"别名"让2个结果集的列一致。那么,如果取出的结果集,列名字不一样,还能否union.
可以,而且取出的最终列名,以第1条sql为准
3、union满足什么条件就可以用了?
只要结果集中的列数一致就可以.(如都是2列或者N列)
4、union后结果集,可否再排序呢?
可以的。Sql1 union sql2 order by 字段
注意: order by 是针对合并后的结果集排的序.
5、如果Union后的结果有重复(即某2行,或N行,所有的列,值都一样),怎么办?
这种情况是比较常见的,默认会去重.
6、如果不想去重怎么办?
union all
下面通过实例来验证union的常用特性以及应用:
创建表输入数据

CREATE TABLE num_a (
    id VARCHAR( 3 ) NOT NULL,
    num INT(3 ) UNSIGNED NOT NULL
)CHARSET utf8 ENGINE MYISAM;
CREATE TABLE num_b (
    id VARCHAR( 3 ) NOT NULL,
    num INT(3 ) UNSIGNED NOT NULL
)CHARSET utf8 ENGINE MYISAM;

INSERT INTO num_a VALUES ( 'a', 5 );
INSERT INTO num_a VALUES ( 'b', 10 );
INSERT INTO num_a VALUES ( 'c', 15 );
INSERT INTO num_a VALUES ( 'd', 10 );

INSERT INTO num_b VALUES ( 'b', 5 );
INSERT INTO num_b VALUES ( 'c', 15 );
INSERT INTO num_b VALUES ( 'd', 20 );
INSERT INTO num_b VALUES ( 'e', 99 );

在这里插入图片描述
在这里插入图片描述
1,union会去掉重复的行

 SELECT id,num FROM num_a UNION SELECT id, num FROM num_b

在这里插入图片描述
2、order by对union后的结果集排序(desc降序 asc升序)

SELECT id,num FROM num_a UNION SELECT id, num FROM num_b ORDER BY num DESC

在这里插入图片描述
3、UNION ALL不会过滤重复的行

SELECT id,num FROM num_a UNION ALL SELECT id, num FROM num_b

在这里插入图片描述
4、把num_a和num_b不同的索引结果保留, 相同的索引结果相加 然后输出:

SELECT a.id, ( a.num + b.num ) AS num FROM num_a AS a INNER JOIN num_b AS b ON a.id = b.id
UNION ALL
SELECT * FROM num_a AS a WHERE NOT EXISTS( SELECT * FROM num_b AS b WHERE a.id = b.id )
UNION ALL
SELECT * FROM num_b AS b WHERE NOT EXISTS( SELECT * FROM num_a AS a WHERE a.id = b.id )
ORDER BY id ASC

在这里插入图片描述

5、第二种方法用子查询分组统计,也可以达到同样的效果

SELECT id, SUM( num ) AS num FROM ( SELECT * FROM num_a a UNION ALL SELECT * FROM num_b b ) tmp
GROUP BY id;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL UNION 操作符用于合并两个或多个 SELECT 语句的结果集。它的语法如下: ``` SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2; ``` 注意以下几个点: - UNION 操作符默认会去除重复的行,如果需要保留重复行需要使用 UNION ALL。 - UNION 要求两个 SELECT 语句的列数必须相等,并且类型必须兼容。如果不兼容,可以使用 CAST 函数进行类型转换。 - UNION 必须对每个 SELECT 语句的列进行命名,否则会使用第一个 SELECT 语句的列名作为结果集的列名。 下面是一个简单的例子,演示如何使用 UNION 合并两个表的记录: ``` SELECT product_name FROM products WHERE price < 50 UNION SELECT product_name FROM products WHERE category = 'Books'; ``` 这个例子,我们从 products 表选择价格小于 50 的产品名称,然后再选择类别为 'Books' 的产品名称,并将两个结果集合并起来。 ### 回答2: MySQLUNION是一个用于合并两个或多个SELECT语句结果集的操作符。它将多个SELECT查询的结果合并为一个结果集,每个查询的列数和数据类型必须一致。 UNION操作符的语法如下: SELECT column1, column2, ... FROM table1 WHERE condition1 UNION SELECT column1, column2, ... FROM table2 WHERE condition2 其,column1, column2等是要选择的列,table1, table2是要查询的表,condition1, condition2是查询的条件。 UNION操作符的作用是将两个或多个查询的结果集进行合并,并且去除重复的行。它合并结果集时会根据列的顺序和数据类型进行匹配,相同位置的列会被合并在一起。 需要注意的是,UNION操作符默认会去除重复的行,如果需要包含重复行,可以使用UNION ALL操作符。 UNION操作符的使用场景包括但不限于以下几个方面: 1. 合并多个表的查询结果,以得到一个完整的结果集。 2. 合并多个查询结果的计算字段,以得到一个包含计算结果的结果集。 3. 对相同表进行不同条件的查询,然后将结果合并,以得到一个满足多个条件的结果集。 总之,UNION操作符是MySQL用于合并查询结果的重要工具,可以帮助我们处理复杂的查询需求,并获得我们所需要的最终结果集。 ### 回答3: MySQLUNION是用于合并来自多个SELECT语句的结果集的操作符。它可以将两个或多个SELECT语句的结果合并为一个结果集,并且自动去重。 UNION的使用方法是在每个SELECT语句之间使用UNION关键字,并且两个SELECT语句的列数和数据类型必须一致。例如,有两个表A和B,它们具有相同的列名和数据类型,可以使用如下的语法进行UNION操作: SELECT 列1, 列2, 列3 FROM 表A UNION SELECT 列1, 列2, 列3 FROM 表B; UNION操作会将两个表的结果集按照列的顺序进行合并,并且自动去除重复的记录。如果想要包含重复的记录,可以使用UNION ALL关键字。 对于使用UNION操作的结果集,可以继续使用其他的SQL操作,如ORDER BY、GROUP BY等。此外,UNION操作还可以嵌套使用,即对已经进行UNION操作的结果再进行UNION操作。 需要注意的是,UNION操作会对结果集进行整体的排序和去重,这可能会影响查询的性能。如果对性能要求较高,可以考虑使用其他的操作符,如UNION ALL或者使用子查询进行合并操作。 总之,MySQLUNION操作可以用于合并多个SELECT语句的结果集,并且自动去重。它提供了一种便捷的方法来处理多个表或查询的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值