• SQL UNION 和 UNION ALL 操作符


    总结一下SQL中的连接运算符!union和union all都是用来连接SQL 查询语句的!

    要点一:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同,就比如,第一条语句查询的是姓名和年龄分别是nvarchar和int类型的,那么联合的语句查询的字段也应该是同样的类型,和顺序。

    要点二:默认地,UNION 操作符选取不同的值(就是加载的都不一样,不会有重复的数据,如果有两条数据一模一样,就只会出现一条数据)。如果想得到所有数据,请使用 UNION ALL(ALL不就是所有的意思嘛!)

    要点三:UNION 查询结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名,意思就是两条语句查询的总数据的列名按照第一条查询语句走,比如两条查询的字段都一样,但是第一条查询语句把字段重新命名了(select Name as 姓名 from 表),这时第一列的名字就不是Name了,而是被重新命名的:“姓名”。

    代码实例:

    这里用两张表,一张学生表 一张教师表!字段分别是:主键  姓名(老师或学生)年龄 生日。

    代码语法:

    SELECT SName,Age from DB_Students  --第一条语句查询学生的姓名和年龄
    union
    SELECT TName,Age from DB_Teachers  --第二条语句查询老师的姓名和年龄

    运行结果:

    查询到结果是:学生所有数据和老师所有数据,可以看出,老师学生总数据的一列的列名为SName,因为第一条查询语句用的SName。下边将数据修改一下,让有重复的数据,再用上边代码执行看结果

    将两张表都修改一条数据为:姓名为:小明,年龄为:15,但结果只出现一条小明的数据。

     

    结果为:

    联合的两个语句,类型要相同,顺序要相同,如果不相同,就无法执行,看代码:

    SELECT SName,Age,Bitthday from DB_Students  --第一条语句查询学生的姓名和年龄和生日
    union
    SELECT TName,Age from DB_Teachers  --第二条语句查询老师的姓名和年龄

    报错:

    union会去重,union all不会,看代码:

    SELECT * FROM DB_Students
    SELECT * FROM DB_Students

    两条同样的语句,查询全表,但是如果用union连接,就会只出现三条数据:

    SELECT * FROM DB_Students
    union
    SELECT * FROM DB_Students

    而如果用union all的话就还会出现六条数据,在效率上union all肯定要比union高的,因为少了去重这一步!

  • 相关阅读:
    openresty + gor+minio 集成
    openresty docker 镜像集成gor
    goreplay v1.1.0 支持pro特性docker 镜像
    编译goreplay v1.1.0 minio 集成支持
    编译goreplay v1.1.0 支持二进制协议捕捉
    goreplay v1.1.0 发布
    super-expressive 可以基于js 直接编写正则
    monio 的一些安全实践
    minio+ nginx rewrite 实现saas租户的个性化管理
    LDAP概念和原理介绍
  • 原文地址:https://www.cnblogs.com/dcy521/p/10976630.html
Copyright © 2020-2023  润新知