技术交流QQ群:1027579432,欢迎你的加入!

联合查询

  • 联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接
  • 联合查询由多条select语句构成,每条select语句获取的字段数相同,但与字段类型无关
  • 基本语法:select 语句1 + union + [union选项] + select 语句2 + ...;
    • union选项:
      • all:无论重复与否,保留所有记录;
      • distinct:表示去重,为默认选项。
  • 联合查询,默认去重
    mysql> SELECT * FROM class
        -> UNION DISTINCT
        -> SELECT * FROM class;
    +----+-------+------+
    | id | grade | room |
    +----+-------+------+
    |  1 |   3.1 | A    |
    |  2 |   3.2 | B    |
    |  3 |   3.4 | C    |
    +----+-------+------+
    3 rows in set (0.00 sec)
  • 联合查询,保留所有记录
    mysql> SELECT * FROM class
        -> UNION ALL
        -> SELECT * FROM class;
    +----+-------+------+
    | id | grade | room |
    +----+-------+------+
    |  1 |   3.1 | A    |
    |  2 |   3.2 | B    |
    |  3 |   3.4 | C    |
    |  1 |   3.1 | A    |
    |  2 |   3.2 | B    |
    |  3 |   3.4 | C    |
    +----+-------+------+
    6 rows in set (0.00 sec)
  • 联合查询只要求字段数相同,而跟类型无关。联合查询只保留了第一张表的字段,而不保留第二张表的字段。
    mysql> SELECT id, grade, room FROM class
        -> UNION DISTINCT
        -> SELECT name, age, id FROM student;
    +--------+--------------------+------+
    | id     | grade              | room |
    +--------+--------------------+------+
    | 1      | 3.0999999046325684 | A    |
    | 2      |  3.200000047683716 | B    |
    | 3      | 3.4000000953674316 | C    |
    | curry  |                 30 | 1    |
    | durant |                 29 | 2    |
    | Riuo   |                 27 | 3    |
    | harden |                 29 | 4    |
    +--------+--------------------+------+
    7 rows in set (0.04 sec)