mysql中的union操作(整理)

一、总结

一句话总结:

union两侧的字段数和字段类型要是一样的
union可以接多个
orderby和排序可以在最后的union组合之后

1、union简单实例?

SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;

2、UNION和UNION ALL的区别是什么?

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

3、laravel中union使用实例?

query2中 union(query1)
  $select_field=['comment_lessons.*','users.name','users.id','lessons.l_title','lessons.l_id'];
//1、这是所有我发的,我回复的或者我评论的:这里我并不需要知道自己的信息
//这是我回复别人的
$lesson_comments_active=CommentLesson::where('cl_u_id',$u_id)
->leftJoin('users', 'comment_lessons.cl_to_u_id', '=', 'users.id')
->join('lessons', 'comment_lessons.cl_l_id', '=', 'lessons.l_id')
->select($select_field);
//2、这是所有回复我的,我需要知道用户的信息
$lesson_comments=CommentLesson::where('cl_to_u_id',$u_id)
->join('users', 'comment_lessons.cl_u_id', '=', 'users.id')
->join('lessons', 'comment_lessons.cl_l_id', '=', 'lessons.l_id')
->union($lesson_comments_active)
->orderBy('cl_created_at','desc')->offset($offset)->limit($per_page_item_num)
->select($select_field)->get();

4、union重复的问题?

select一般不产生重复数据,所以默认不消除重复记录,需要消除使用select DISTINCT.消除重复
union大多数产生重复数据,默认是消除重复数据,使用union all 不消除重复数据

5、为什么在union在字句中排序没有意义?

对用户不可见:ORDER BY子句不能出现在由UNION操作组合的两个SELECT中。不管怎样,排序两个查询结果集并没有太多的意义,因为它们被直接加入到UNION操作中,对用户是不可见的。
字段未命名:因为由UNION操作生成的字段是没有命名的,ORDERBY子句必须按字段编号指定字段。

二、MySQL UNION 操作符(基础)

转自或参考:MySQL UNION 操作符
https://www.cnblogs.com/hetaoyuan/p/11616172.html">MySQL UNION 操作符

描述

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法

MySQL UNION 操作符语法格式:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

参数

  • expression1, expression2, ... expression_n: 要检索的列。

  • tables: 要检索的数据表。

  • WHERE conditions: 可选, 检索条件。

  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

  • ALL: 可选,返回所有结果集,包含重复数据。


演示数据库

下面是选自 "Websites" 表的数据:

mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
+----+---------------+---------------------------+-------+---------+

下面是 "apps" APP 的数据:

mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name | url | country |
+----+------------+-------------------------+---------+
| 1 | QQ APP | http://im.qq.com/ | CN |
| 2 | 微博 APP | http://weibo.com/ | CN |
| 3 | 淘宝 APP | https://www.taobao.com/ | CN |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)

SQL UNION 实例

下面的 SQL 语句从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值):

实例:

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

注释:UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!


SQL UNION ALL 实例

下面的 SQL 语句使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值):

实例

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
执行以上 SQL 输出结果如下:

带有 WHERE 的 SQL UNION ALL

下面的 SQL 语句使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值):

实例

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

执行以上 SQL 输出结果如下:

NION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

使用形式如下:

SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;

转载:https://www.runoob.com/mysql/mysql-union-operation.html

三、mysql中的union用法

转自或参考:mysql中的union用法 - 简书
https://www.jianshu.com/p/b8f7f122f8a4

UNION在mysql中被称为集合操作,操作类型分为两种:UNION DISTINCT 和  UNION ALL;注意:UNION和UNION DISTINCT是一样的功能。UNION功能为合并多个查询的结果并去重,UNION ALL的功能为合并多个查询的结果不去重。

集合操作时,两边的输入必须拥有相同的列数,如果数据类型不同的话,mysql会自动进行隐式转化 ;同时,结果列的名称由第一个查询的列的名称决定。下面看一下例子:

sql语句为:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION SELECT 'abc' as a,'haha',4 FROM DUAL;结果是:

如果是:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION ALL SELECT 'abc' as a,'haha',4 FROM DUAL;

如果两次查询的列个数不一致,如:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION ALL SELECT 'abc' as a,'haha' FROM DUAL;

在多个列查询时,只要有一个列的数据不一致时,都是无法去重的;也就是去重是每个列的数据完全一致,比如:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION DISTINCT SELECT 'abc' as a,'haha',5 FROM DUAL;

这几个例子可以看出UNION (DISTINCT) 与 UNION ALL的用法了吧,下面讲一下UNION (DISTINCT)的实现方式:

一:创建一张虚拟表;

二:对这张虚拟表的列添加唯一索引,即UNIQUE INDEX;

三:将结果插入虚拟表

四:返回虚拟表;

如何判断是否创建一个虚拟表,我们可以通过一下语句判断:

SHOW STATUS LIKE 'Created_tmp_tables';

SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION SELECT 'abc' as a,'haha',4 FROM DUAL;

SHOW STATUS LIKE 'Created_tmp_tables';                                                                                                             结果是:

可见结果3比结果1多1,在操作第二个 UNION语句时创建了一个虚拟表;如果UNION创建了索引,插入会相对变慢

四、mysql 中union使用

转自或参考:mysql 中union使用
https://blog.csdn.net/csdn13257081409/article/details/79573500

 

1.

2.union重复的问题:

select一般不产生重复数据,所以默认不消除重复记录,需要消除使用select DISTINCT.消除重复

union大多数产生重复数据,默认是消除重复数据,使用union all 不消除重复数据

3.union 和order by

union不能两个子查询都是用order by,他并不是将每个子查询一个一个查询出来后联接在一起,数据库是将整段查询语句理解之后统一查询得到的是整个的数据集合,只能在最后一个查询语句后面加,或者使用select from(...union...) order by

select * from [IND] where INDID>10 union select * from [IND] where INDID<9 order by INDID desc

4.多个Union使用

 

mysql中的union操作(整理)的更多相关文章

  1. javascript中字符串常用操作整理

    javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...

  2. MySQL中的分页操作结合python

    mysql中的分页操作结合python --分页: --方式1: ;-- 读取十行 , --从第十行读取 往后再读十行 --方式2: offset ; --从第二十行开始读取10行 -- 结合pyth ...

  3. mysql中的正则操作 匹配手机号,匹配中文,替换

    mysql中的正则操作 匹配手机号,匹配中文,替换 正则匹配hy_user表内tel字段的电话号码: SELECT * FROM hy_user WHERE tel REGEXP "[1][ ...

  4. MySQL中truncate误操作后的数据恢复案例

    MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...

  5. Mysql中交换行操作

    博客已搬家,更多内容查看https://liangyongrui.github.io/ Mysql中交换行操作 leetcode的一道题目 参考:https://leetcode.com/proble ...

  6. MYSQL中SHOW的使用整理收藏

    好记性不如乱笔头吧....下面收藏整理了mysql中show 的使用技巧....有需要的博友可以看看哈 a. show tables或show tables from database_name; / ...

  7. mysql语句的相关操作整理

    事实证明,如果不经常跟代码,语句打交道,人家可是会翻脸不认人的,大脑也会觉得一脸懵逼,不知道做错了啥,这次长点记性了,把语句整理出来,不仅加强对sql语句的记忆,还能有个笔记,以后大脑懵逼了还能回来看 ...

  8. mysql中常用的语句整理

    mysql中常用的语句: 1:创建带自增长的主键的表 DROP TABLE IF EXISTS user_login ; CREATE TABLE user_login (   user_id INT ...

  9. mysql中的一些操作

    查询mysql中事务提交的情况: show variables like '%commit%'; 可以查看当前autocommit值 在mysql数据库中它的默认值是"on"代表自 ...

随机推荐

  1. java实现当前时间往前推N小时

    import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; /** * @author sha ...

  2. jQuery异步请求ajax()之complete参数详解

    请求完成后回调函数 (请求success 和 error之后均调用).这个回调函数得到2个参数:XMLHTTPRequest) 对象和一个描述请求状态的字符串("success", ...

  3. CSS伸缩布局

    1. 伸缩布局应用: 伸缩布局应用 主轴: Flex容器的主轴用来配置Flex项目,默认是水平方向 侧轴: 与主轴垂直的轴称为侧轴,默认还是垂直方向 方向: 默认是主轴从左向右, 侧轴默认是从上到下 ...

  4. Java 之 Collections 工具类

    一.Collections 概述 java.utils.Collections 是集合工具类,用来对集合进行操作. 二.常用方法 public static <T> boolean add ...

  5. Hadoop错误:PipeMapRed.waitOutputThreads(): subprocess failed with code 1

    有一种原因是python文件中有语法或逻辑错误

  6. 异步网络编程aiohttp的使用

    aiohttp的使用 aiohttp Asynchronous HTTP Client/Server for asyncio and Python. Supports both Client and ...

  7. Linux命令——gzip、zcat、bzip2、bzcat、tar

    参考:Linux命令——ar 为什么文件要压缩? 当文件过大时,无论是本地做备份,复制都很麻烦,而且还浪费磁盘空间.如果用网络传输,大文件无疑会浪费大量宝贵带宽.文件压缩技术可以有效解决这个问题,但是 ...

  8. mongoDB的基本操作之数据更新

    查询了解后,我们还要了解下如何进行数据的更新,在mongodb中,数据的更新是用update方法,update至少接收两个参数,一个是要查找的记录条件,一个是更新之后的数据,我们现在查找x为1的数据 ...

  9. Unknown initial character set index '255' received from server. Initial client character 解决方法

    Unknown initial character set index '255' received from server. Initial client character set can be ...

  10. webpack4.0打包优化策略整理小结

    本文转载于:https://www.jb51.net/article/137449.htm 介绍了webpack4.0打包优化策略整理小结,分享给大家,具体如下: webapck4 新特性介绍-参考资 ...