zoukankan      html  css  js  c++  java
  • (十四)联合查询


    将多次查询(多条 select)的 结果,在记录上拼接增加的是记录数,记录字段不会增加 ;


    基本语法

    将多条 select 拼接在一起 查询,但是查询的字段数,必须一致,至于查询的字段类型,唔紧要;

    查询出的结果,字段是第一条语句的,后面的语句,查出来的结果跟字段不一定是对上的,毕竟只关注字段数量,不关注字段类型 ;

    # 语法
    select 语句1 
    union [union选项]
    select 语句2
    ...
    
    
    mysql> select id ,name from student
        -> union
        -> select sex,name from student ;
    +----+-------+
    | id | name  |
    +----+-------+
    | 1  | andy  |
    | 2  | sas   |
    | 3  | white |
    | 2  | an    |
    | 1  | sas   |
    | 2  | white |
    | 1  | an    |
    +----+-------+
    7 rows in set
    
    
    

    union 选项:与 select 选项一样

    • all : 保留所有
    • distinct :去重(整个重复) 。默认去重 ;

    意义

    • 单表查询,但是目的不同

      比如需求:查询学生表,要求按照男生升序,女生降序给出结果;

      只能使用联合查询 ;

    • 多表查询

      要求多张表必须是 水平分表 分出来的,这样多表的结构完全一致,保存的数据的结构也完全一致 ;

      一般用于,数据量太大了,不得不水平分表,然后需要查出所有数据,这时候需要联合查询 ;


    联合查询的order by

    联合查询使用 order by 必须满足两个条件:

    1. select 语句 ,使用括号()括起来 ;

    2. 必须搭配 limit

      搭配 limit ,只是硬性的语法要求,其实没有任何意义,这里就保证查出来的语句的数量就行了,比如 999999,反正一个很大的数字,就行了 ;

      mysql> (select * from student where sex = '1' order by name asc limit 9999)
      -> union
      -> (select * from student where sex = '2' order by name desc limit 9999);
      +----+-------+-----+
      | id | name  | sex |
      +----+-------+-----+
      |  2 | an    | 1   |
      |  1 | andy  | 1   |
      |  5 | hany  | 1   |
      |  2 | sas   | 1   |
      |  6 | yang  | 2   |
      |  7 | Wily  | 2   |
      |  3 | white | 2   |
      | 11 | gery  | 2   |
      +----+-------+-----+
      8 rows in set
      
      
  • 相关阅读:
    zookeeper基础笔记
    基于spring@aspect注解的aop实现
    Struts2中的开启AsyncContext的方法
    在执行gem install redis时 : ERROR: Error installing redis: redis requires Ruby version >= 2.2.2
    ConcurrentHashMap原理笔记
    Java并发Condition原理分析
    CountDownLatch实现原理
    ThreadPoolExecutor 线程池原理分析
    HashMap原理
    线程池的用法
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665635.html
Copyright © 2011-2022 走看看