zoukankan      html  css  js  c++  java
  • mysql语法之union

    UNION的语法结构:

    SELECT ...

    UNION [ ALL | DISTINCT ]  SELECT ....

    [ UNION [ ALL | DISTINCT ] SELECT .....]

    UNION 用于将多个SELECT语句中的结果组合到单个结果集中。

    1 第一个SELECT语句用的列名称用作返回结果的列名称

    其中第一个select中查询的列名为user_name,第二个select中查询的列名为password,但显示的结果列名称只有user_name

    在多个select语句中,对应的列应该具有相同的数据类型,如果相应的select猎德数据类型不匹配,则union结果中列的类型和长度会考虑所有的select语句检索的值

    UNION DISTINCT   和 UNION ALL 

    UNION DISTINCT 组合俩个输入,并应用DISTINCT过滤重复的行,一般DISTINCT可以省略,因为UNION默认是删除结果中重复的行。UNION ALL不会删除重复的行,结果包括所有SELECT语句中所有的匹配行

    SELECT * FROM T1 WHERE   = 10 UNION ALL SELECT * FROM T1 WHERE a = 10;

    查询出来的结果会有俩分相同的数据(这里就不做实际例子了)

    UNION 中使用  ORDER BY 和 LIMIT 

    要对单个select语句应用ORDER BY 或 LIMIT ,请将子句放在括号括住的select语句中:

    (select a from t1 where a = 10 order by a limit 10) 

    union

    (select * from t2 where a = 11 order by a limit 10);

    但要注意的是,ORDER BY 对于单个SELECT 语句的使用并不意味着在最终结果中进行排序,因为UNION默认情况下会生成一组无序的结果集。因此这里要使用ORDER BY 通常会结合LIMIT使用,来确定要取出的行的数量,如果只用了ORDER BY 没有配合使用LIMIT,那么ORDER BY 会被优化掉,因为它不会有任何效果

    如果想整个结果集使用ORDER BY 或 LIMIT 进行排序或限制,请将各个SELECT语句括起来并把ORDER BY 或 LIMIT  放在最后:

    (select a from t1 where a = 10 )

    union 

    (select a from t2 where a = 11)

    order by a limit 10;

    但要注意上面的这种情况ORDER BY引用的列名不能包含表名(例如:table_name.col_name)

    此外,如果要排序的列是别名,则该ORDER BY子句必须引用别名,而不是列名。以下第一个语句将起作用,但第二个语句将失败并显示 Unknown column 'a' in 'order clause'错误:

    (SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY b;

    (SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY a;

    如果相在整个结果集中对每个SELECT的结果集排序,请在每个SELECT中选择一个附加列用以排序,并ORDER BY在最后添加一下内容:

    (SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)

    UNION

    (SELECT 2 AS sort_col,col2a, col2b, ... FROM t2) ORDER BY sort_col;

    要在单个SELECT结果中另外维护排序顺序 ,请在ORDER BY子句中添加辅助列

    (SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)

    UNION

    (SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col, col1a;

  • 相关阅读:
    java基础英语---第二天
    树莓派的版本
    Linux系统下安装.deb文件
    在Raspberry上安装ROS
    树莓派文件权限的转换
    树莓派中Linux的相关命令
    raspberry连接ssh和vnc
    链表的建立及释放
    一些小细节问题
    关于构建二维动态内存(堆)及释放
  • 原文地址:https://www.cnblogs.com/skl-bobo/p/10886268.html
Copyright © 2011-2022 走看看