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

摘要:
联合查询是将两个或多个sql语句的查询结果组合成一个结果集。例如:sql1:row N,sql2:row M,sql1union sql2--˃row N+M。我可以从两个表查询联合吗?是的,联合合并了一个“结果集”,不管它来自哪个表2。它取自两个表,两个结果集的列通过“别名”保持一致。然后,如果检索到的结果集具有不同的列名,是否可以将其统一为“是”,并且检索到的最终列名应以第一个sql为准。3.工会在使用前可以满足哪些条件?只要结果集中的列数一致,就可以。4.合并后,结果集是否可以再次排序?

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 );
复制代码

mysql中的union用法以及子查询综合应用第3张     mysql中的union用法以及子查询综合应用第4张

 1,union会去掉重复的行

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

mysql中的union用法以及子查询综合应用第5张

2、order by对union后的结果集排序

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

mysql中的union用法以及子查询综合应用第6张

3、UNION ALL不会过滤重复的行

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

mysql中的union用法以及子查询综合应用第7张

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

 mysql中的union用法以及子查询综合应用第8张

  

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

SELECT id, SUM( num ) AS num FROM ( SELECT * FROM num_a a UNION ALL SELECT * FROM num_b b ) tmp
GROUP BY id;

免责声明:文章转载自《mysql中的union用法以及子查询综合应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Win10自动重启原因怎么查Windows10无故自动重启go之无缓冲channel(通道)和有缓冲channel(通道)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ASP.NET MVC+LINQ开发一个图书销售站点(3):建立数据库

根据上一节的对象,我们创建数据库如下:   Book Shop Database script SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOIF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Admin]...

MySQL UDF提权 过程及注意事项

MySQL UDF提权 过程及注意事项 0x00 udf = ‘user defined function’,即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或concat()。udf在mysql5.1以后的版本中,存在 思路 当获得webshell后发现权限比较低,但是在inc文件中拿到数据库...

oracle 中的truncate 和delete

一、查询表大小,块多少语句 Select SEGMENT_Name,BYTES,BLOCKS,Extents From dba_segments Where segment_name In('BAI_NEW_SESSION_HISTORY2') order by segment_name; (2)查表空间 Select Tablespace_Name,...

MYSQL 数据库导入导出命令

在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。 MySQL命令行导出数据库 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:Program FilesMySQLMySQL Server 4.1in (或...

xcode查版本xcodebuild -version

终端输入 xcodebuild -version 如果报错: xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools...

查看SQL Server Resource Database以及修改系统表

参考文献: SQL 2005修改系统表 SQL Server 2005中修改系统表的方法 如何登入DAC(SQL Server 2005)  ResourceDB Location Changes ResourceDB Location Changes 1.What is resourcedb?(from msdn) The Resource databa...