• SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(九)


    UNION ALL

    UNION ALL 用于合并两个或多个 SELECT 语句的结果
    请注意,UNION ALL 合并的每个 SELECT 语句必须是查询相同数量,相同数据类型的字段,且顺序也必须一致。另外结果集中的列名总是等于 UNION ALL 中第一个 SELECT 语句中的列名

    语法:

    SELECT column_name(s) FROM table1
    UNION ALL
    SELECT column_name(s) FROM table2;
    
    • 1
    • 2
    • 3

    示例:
    从students学生数据表查询理科三班和文科三班的学生id,学生姓名,班级

    写法一:
    使用我们之前的学习的 WHERE … IN … 方式:

    SELECT id,name,clazz
    FROM students
    WHERE clazz IN ('理科三班','文科三班');
    
    • 1
    • 2
    • 3

    写法二:
    使用 UNION ALL 结合两个 SELECT 查询的方式:

    SELECT id,name,clazz
    FROM students
    WHERE clazz = '理科三班'
    UNION ALL
    SELECT id,name,clazz
    FROM students
    WHERE clazz = '文科三班';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    观察这两种写法的结果,写法一的结果中理科三班和文科三班的数据行是交错分布的,但是写法二的结果明显是分别从students表中查询出两部分结果,再纵向拼接而成的,这也是使用 UNION ALL的前提是每个SELECT查询的字段完全一致的原因。

    带有 ORDER BY 的 UNION ALL

    思考一个问题,如果我希望在 UNION ALL 后的结果中进行排序操作,那是不是每个 SELECT 语句都要加 ORDER BY 呢?
    来测试一下:
    从students学生数据表查询理科三班和文科三班的学生id,学生姓名,班级,并且按学生ID升序排列

    错误写法:

    SELECT id,name,clazz
    FROM students
    WHERE clazz = '理科三班'
    ORDER BY id
    UNION ALL
    SELECT id,name,clazz
    FROM students
    WHERE clazz = '文科三班'
    ORDER BY id;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image.png

    很明显,这种写法是不行的,报错 Incorrect usage of UNION and ORDER BY,意思为 不正确地使用UNION和ORDER BY

    正确写法:

    SELECT id,name,clazz
    FROM students
    WHERE clazz = '理科三班'
    UNION ALL
    SELECT id,name,clazz
    FROM students
    WHERE clazz = '文科三班'
    ORDER BY id;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image.png

    使用UNION命令时需要注意,只能在最后使用一个ORDER BY命令,是将两个查询结果合在一起之后,再进行排序!

    UNION

    UNION 同样用于合并两个或多个 SELECT 语句的结果。与 UNION ALL 唯一不同的地方在于 UNION 对查询结果进行去重操作,对所有重复出现的相同数据行只保留一行结果,其用法与 UNION ALL 完全一致。

    此处不再过多赘述,大家自己尝试一下即可。

    本专栏将持续更新,对数据库SQL感兴趣的同学可以关注一下,谢谢!

  • 相关阅读:
    掌握C++魔法:深入解析类与对象(上篇)
    mysql的存储过程
    PyTorch(四)Torchvision 与 Transforms
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统
    15-1 Java反射机制概述
    Navigation 组件(二) Fragment 跳转带参数,动画
    Java开发面试常见问题总结
    [附源码]Java计算机毕业设计SSM服装商城平台
    支持对协议和会话分享动作进行授权,新增API Key白名单功能,JumpServer堡垒机v3.9.0发布
    建造者模式
  • 原文地址:https://blog.csdn.net/lrn521zsd/article/details/134492056