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

  • 相关阅读:
    delphi 随意将函数执行权限提高到Ring0源代码
    delphi 使电脑睡眠代码
    delphi 监控文件系统
    在Delphi中使用系统对应文件类型的图标
    Panel
    delphi 读写记录类型文件Record
    C# winform 一次只能允许一个应用(使用mutex)
    winform捕获全局异常
    观察者模式实践-实现winform 窗体之间传值(事件实现)
    在wpf中利用异步lambda编程,模拟数据库连接,防止界面假死
  • 原文地址:https://www.cnblogs.com/poloyy/p/12884399.html
Copyright © 2011-2022 走看看