zoukankan      html  css  js  c++  java
  • Mysql常用sql语句(18)- union 全连接

    测试必备的Mysql常用sql语句系列

    https://www.cnblogs.com/poloyy/category/1683347.html

    前言

    • 其实Mysql并没有全连接,Oracle才有全连接(full join)
    • 但是在MySQL中,union关键字可以达到同样的效果,所以这里也要介绍下union

    union 的语法格式

    [sql1]
    UNION [ALL | DISTINCT]
    [sql2]
    UNION [ALL | DISTINCT]
    [sql3]
    ....

    语法格式说明

    • sql1、sql2、sql3:平时写的查询 sql,可以连接很多条 sql
    • ALL:可选参数,返回所有结果集,包含重复数据
    • distinct:可选参数,删除结果集中重复的数据(默认只写 union 也会删除重复数据,所以不加也没事)

    先看看dept、emp表有什么数据

    dept表

    emp表

    union all 的栗子

    select * from emp as a left join dept as b on a.dept_id = b.id
    union all
    select * from emp as a right join dept as b on a.dept_id = b.id;

    蓝色圈子:第一条 sql 的查询结果

    红色圈子:第二条 sql 的查询结果

    union 的栗子

    select * from emp as a left join dept as b on a.dept_id = b.id
    union
    select * from emp as a right join dept as b on a.dept_id = b.id;

    上图是去重之后的结果,而没有去重的结果可以看union all 的栗子或者下图

    红色圈住的部分就是重复的数据,union 会进行去重,只保留一份数据

    知识点(重点)

    • 使用 union 连接的多条sql,每个 sql 查询出来的结果集的字段名称要一致【只需要名称一致即可,顺序可以不同,但建议相同】,可以看看下面的栗子

    • 最终 union 连接查询的结果集的字段顺序会以第一个 sql 查出来结果集的字段顺序为基准

    union 连接的两条 sql ,各自指定的字段顺序不相同的栗子

    select name,id,leader,is_enable,dept_id from emp where dept_id = 1
    union
    select *  from emp where leader = 0

    从上图可以看出,第二条 sql 查出来的字段顺序和最终结果集字段顺序明显不一样,导致数据错乱的问题

    所以!!union 连接的每条 sql 指定的字段顺序最好一致!!

    所以!!union 连接的每条 sql 指定的字段顺序最好一致!!

    所以!!union 连接的每条 sql 指定的字段顺序最好一致!!

    select * from emp where dept_id = 1
    union
    select id,name,dept_id,leader,is_enable   from emp where leader = 0

  • 相关阅读:
    springMVC+spring+mybatis整合(包括文件上传和下载)
    mybatis spring 框架整合
    Java AOP 注解配置与xml配置
    Java 实现分页功能
    Arcanist安装使用流程
    Swift 添加KVO
    swift 混编OC instanceType 标识的方法找不到
    Swift UIStackView代码使用
    Swift
    swift 相册PHAssetCollection,PHAsset
  • 原文地址:https://www.cnblogs.com/poloyy/p/12884399.html
Copyright © 2011-2022 走看看