首页 > 数据库 >mysql union all、union、join

mysql union all、union、join

时间:2023-12-20 10:11:35浏览次数:47  
标签:顺序 join 结果 union msku mysql WHERE SELECT

union和join是需要联合多张表时常见的关联词,
join:
两张表做交连后里面条件相同的部分记录产生一个记录集,
union:
union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。
二者区别:
join和union的主要区别就一条,join是将拼接内容变成一行(左右拼接),根据共同字段将数据拼接成一行一行数据;union是将表内容拼接成一列(上下拼接),也是根据字段共同属性进行将表与表之间数据进行上下拼接。

 

1. sql中 union 和 union all 的用法

如果我们需要将两个 select 语句的结果作为一个整体显示出来,我们就需要用到 union 或者 union all 关键字。union (或称为联合)的作用是将多个结果合并在一起显示出来。

union 和 union all 的区别是,union 会自动压缩多个结果集合中的重复结果,而 union all 则将所有的结果全部显示出来,不管是不是重复。

union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表 union。
如下sql:

SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'

结果:

 union all:对两个结果集进行并集操作,包括重复行,不进行排序; 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
如下sql:

SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION ALL
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'

结果:

 

2. 注意事项

2.1、UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列

 

2.2、每条 SELECT 语句中列的顺序必须相同

  • 先来说下,如果顺序不同,会是什么结果?

答:结果字段的顺序以union all 前面的表字段顺序为准。
union all 后面的表的数据会按照顺序依次附在后面。注意:按照字段顺序匹配,而不是按照字段名称匹配。

  • sql如下:顺序对结果的影响
SELECT * 
FROM(
    SELECT msku,create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION ALL
    SELECT create_time,msku FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK') t

 

综上:

union all 结果字段的顺序以 union all 前面的表字段顺序为准。union all 后面的表的数据会按照字段顺序依次附在后面,而不是按照字段名称匹配。

我们上面以*来表示顺序的不同,其实你写成不同顺序的字段结果一致。

 

3. union all 使用场景

  • sql 中的组合in,可用 union all 来代替,提高查询效率

修改前:组合in sql

SELECT ***, ***, ***, ***, ***
FROM e_rating_info 
WHERE rating_quantity <> 0 AND (***, ***) 
IN (('***', '***'), ('***', '***'), 
('***', '***'), ('***', '***'), 
('***', '***'), ('***', '***'), 
('***', '***'), ('***', '***'), 
('***', '***'), ('***', '***')) 
ORDER BY *** DESC

修改后:UNION ALL sql

<select id="queryRatingInfo" resultType="***">
        <foreach collection="ratingList" item="item" index="index" open="" separator="UNION ALL" close="">
            SELECT ***, ***, ***, ***, ***
            FROM e_rating_info
            WHERE rating_quantity &lt;&gt; 0
            AND country_code = #{item.***}
            AND asin = #{item.***}
        </foreach>
        ORDER BY *** DESC;
    </select>

另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。否则,如果使用 *汇总查询结果,肯定是会有问题的…亲身踩坑。

https://blog.csdn.net/t194978/article/details/123490979

 

标签:顺序,join,结果,union,msku,mysql,WHERE,SELECT
From: https://www.cnblogs.com/wq-9/p/17915875.html

相关文章

  • MySQL函数
    字符串函数字符串相关操作的函数举个例子:①concat(str1,str2,........):字符串拼接--将product表中pname与price进行拼接selectconcat(pname,price)fromproduct;效果展示: ②lower(str):转成小写--将'SMIT'转成小写selectlower('SMIT')fromdual;效果展示:③......
  • mysql笔记
    MySQL数据库B站资源网盘资源sql数据库提取码:mmmmDB、DBMS、SQL的关系DB:Database,数据库,数据库在硬盘上以文件的形式存在。DBMS:DatabaseManagementSystem,数据库管理系统,如:MySQL,Oracle,DB2,Sybase,SqlServer等。SQL:StructureQueryLanguage,结构化查询语言,是一门标准通用的......
  • MySQL数据库故障恢复方案
    针对以上问题,技术部门拟定了恢复方案,内容如下:1、故障类型分类:在此次故障中,由于未对生产环境进行备份也未开启binlog日志,无法直接还原数据库,属于典型表内mysql-delete数据误删除。2、故障分析与可行性方案制定:对于mysqlinnodb误删除导致记录丢失的恢复方案有三种,分别是备份还原、......
  • mysql8 WIN10密码重置处理
    1、设置权限:mysqld--console--skip-grant-tables--shared-memory2、管理运行CMD:mysql-urooy-p;无需认证,直接回车3、修改USER密码置空: usemysqlupdateusersetauthentication_string=''whereuser='root';4、退出mysql,执行命令:quit关闭以-con......
  • 连接数据库(mysql,orcle)
    链接mysql数据库前提:自行下载.jar包1、下载mysql-connector-java-5.1.28.jar驱动包,将包安装在Jmeter的\lib\ext目录下然后再在jmeter上点击打开导入mysql驱动包,( 添加一个线程组先)如下图所示:  添加配置元件中JDBCConnectionConfiguration  填写一下信息(注:写上vari......
  • Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注解类实现切面
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十一章、AOP11.1为什么要使用AOP问题现有业务层开发存在问题额外功能代码存在大量冗余每个方法都需要书写一遍额外功能代码不利于项目维护Spring中的AOPAOP:Aspect切面+Oriented面向Programmaing......
  • MySQL运维11-Mycat分库分表之应用指定分片
    一、应用指定分片此规则是在运行阶段有应用自主决定路由到那个分片,根据提供的字段,然后按照指定的规则,截取该字段的部分子字符串当做分片的依据,该分别方法比较灵活,适用于某个字段有几个特殊的字符串拼接而成的这种场景,例如:一个学校的学号:小学部的学号以0开头,形式为:0xxxxx(......
  • Docker部署MySQL
    1、拉取MySQL镜像dockerpullmysql:5.72、查看镜像dockerimages3、创建存储MySQL数据信息的目录在根目录下创建/data/docker/mysql目录,用于存储mysql的数据信息mkdir/data/docker/mysql-p4、宿主机创建MySQL配置文件4.1、创建conf目录在/data/docker/mysql目录下......
  • mysql中释放表空间的几种方式
    https://blog.csdn.net/qq_42277412/article/details/133344922MySQL是一款常用的关系型数据库管理系统,当我们使用MySQL创建表的时候,我们可能会面临表空间不足的问题。那么在MySQL中,如何释放表空间呢?下面我们将介绍几种常用的方式。 1.TRUNCATETABLETRUNCATETABLEtable_n......
  • MySQL 8.0 OCP 125
    Choosethebestanswer.Youencounteredaninsufficientprivilegeerrorinthemiddleofalongtransaction.您在长事务中遇到了不足的权限错误。Thedatabaseadministratorisinformedandimmediatelygrantstherequiredprivilege:通知数据库管理员并立即授予所需......