设为首页 收藏本站
查看: 1197|回复: 0

[经验分享] mysql中UNION和UNION ALL联合查询

[复制链接]

尚未签到

发表于 2018-10-10 12:41:06 | 显示全部楼层 |阅读模式
  转自:http://blog.csdn.net/semial/article/details/50424350
  UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
  UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
  同时,每条 SELECT 语句中的列的顺序必须相同.
  SQL UNION 语法:
  复制代码 代码如下:SELECT column_name FROM table1
  UNION
  SELECT column_name FROM table2
  注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
  当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行
  SQL UNION ALL 语法
  复制代码 代码如下:SELECT column_name FROM table1
  UNION ALL
  SELECT column_name FROM table2
  注释:另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
  注意:1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名
  2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同
  二、union的用法及注意事项
  union:联合的意思,即把两次或多次查询结果合并起来。
  要求:两次查询的列数必须一致
  推荐:列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样
  可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。
  如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。
  如果不想去掉重复的行,可以使用union all。
  如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。
  如:

  复制代码 代码如下:(select * from a order by>  在子句中,order by 需要配合limit使用才有意义。如果不配合limit使用,会被语法分析器优化分析时去除。
  三、学习例子
  下面的例子中使用的原始表:
  Employees_China:
  复制代码 代码如下:E_ID E_Name
  01 Zhang, Hua
  02 Wang, Wei
  03 Carter, Thomas
  04 Yang, Ming
  Employees_USA:
  复制代码 代码如下:E_ID E_Name
  01 Adams, John
  02 Bush, George
  03 Carter, Thomas
  04 Gates, Bill
  使用 UNION 命令实例
  列出所有在中国和美国的不同的雇员名:
  复制代码 代码如下:SELECT E_Name FROM Employees_China
  UNION
  SELECT E_Name FROM Employees_USA
  结果:
  复制代码 代码如下:E_Name
  Zhang, Hua
  Wang, Wei
  Carter, Thomas
  Yang, Ming
  Adams, John
  Bush, George
  Gates, Bill
  注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。
  使用 UNION ALL 命令实例
  UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
  复制代码 代码如下:SQL Statement 1
  UNION ALL
  SQL Statement 2
  实例:
  列出在中国和美国的所有的雇员:
  复制代码 代码如下:SELECT E_Name FROM Employees_China
  UNION ALL
  SELECT E_Name FROM Employees_USA
  结果
  复制代码 代码如下:E_Name
  Zhang, Hua
  Wang, Wei
  Carter, Thomas
  Yang, Ming
  Adams, John
  Bush, George
  Carter, Thomas
  Gates, Bill
  四、项目使用例子
  web项目中经常会碰到整站搜索的问题,即客户希望在网站的搜索框中输入一个词语,然后在整个网站中只要包含这个词的页面都要出现在搜索结果中。由于一个web项目不可能用一张表就全部搞定的,所以这里一般都是要用union联合搜索来解决整个问题的。
  下面列举一下本次使用的union联合搜索的sql语句:
  复制代码 代码如下:
  select * from
  (SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND `subject` LIKE '%调整图片%' ORDER BY `add_time` DESC)
  as t1
  union all
  select * from
  (SELECT `id`,`class_name` AS `subject` FROM `web_class` WHERE `active`='1' AND `class_name` LIKE '%调整图片%' ORDER BY `class_id` DESC)
  as t2
  union
  select * from
  (SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND (`subject` LIKE '%调整%' OR `subject` LIKE '%图片%') ORDER BY `add_time` DESC)
  as t3;
  以上SQL语句的联合查询主要用到了union all和union,至于这两者的区别就是union all会列举所有符合条件的查询结果,而union会将所有符合条件的查询结果做一下去除重复结果的筛选。
  对于以上SQL语句的解释就是由于article表和web_class表分属两个不同的表,所以这里不用去除重复结果。然而以上联合查询的第三个分支的sql查询语句是由分词然后组合出来的查询语句,这条sql语句查询的结果是肯定包含第一个分支sql语句的查询结果的,这里就显得没必要了,所以没有使用all而去掉重复的查询结果。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-619970-1-1.html 上篇帖子: mysql 报错 Ignoring query to other database 下篇帖子: MySQL之select和LVM快照实现数据备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表