SQL之union操作符

参考源

SQL union 操作符

SQLUNION 操作符合并两个或多个 SELECT 语句的结果

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名

不允许重复: union

SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;

允许重复值: union all

SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;

但这些 SELECT 语句 的结果集必须符合一定的要求:

  • 每个 SELECT 语句必须拥有相同数量的列
  • 列也必须拥有相似的数据类型
  • 每个 SELECT 语句中的列的顺序必须相同

示例数据

CREATE DATABASE IF NOT EXISTS hardy_db default character set utf8mb4 collate utf8mb4_0900_ai_ci;

USE hardy_db;

DROP TABLE IF EXISTS lesson;
DROP TABLE IF EXISTS lesson2;

CREATE TABLE lesson (
    id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(32) default '',
    views int(11) NOT NULL default 0,
    created_at TIMESTAMP
);

INSERT INTO lesson(id, name, views, created_at) VALUES
(1, 'Python 基础教程',981,'2017-04-18 13:52:03'),
(2, 'Scala 基础教程',73,'2017-04-18 16:03:32');

CREATE TABLE lesson2 (
    id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(32) default '',
    views int(11) NOT NULL default 0,
    created_at TIMESTAMP
);

INSERT INTO lesson(id, name, views, created_at) VALUES
(1, 'Scala 基础教程',73,'2017-04-18 16:03:32'),
(2, 'Ruby 基础教程',199,'2017-05-01 06:16:14');

SQL union 使用

  1. 下面的 SQL 语句从 lessonlesson2 表中选取不同的 name

    select name, views from lesson union select name, views from lesson2;
    

    运行结果如下

    mysql> select name, views from lesson union select name, views from lesson2;
    +---------------------+-------+
    | name                | views |
    +---------------------+-------+
    | Python 基础教程     |   981 |
    | Scala 基础教程      |    73 |
    | Ruby 基础教程       |   199 |
    +---------------------+-------+
    

SQL union all 使用

  1. 下面的 SQL 语句从 lessonlesson2 表中选取不同的 name

    select name, views from lesson union all select name, views form lesson2;
    

    运行结果如下

    mysql> select name, views from lesson union all select name, views form lesson2;
    +---------------------+-------+
    | name                | views |
    +---------------------+-------+
    | Python 基础教程     |   981 |
    | Scala 基础教程      |    73 |
    | Scala 基础教程      |    73 |
    | Ruby 基础教程       |   199 |
    +---------------------+-------+
    

带有 where 的 SQL union all

任何一个 select 语句都可以有 wherelimit 等子句

  1. 例如下面的 SQL 语句从 lesson 中选取所有的 name 和 从 lesson2 中选取 views 大于 100 的 name

    select name, views from lesson unin all select name, views from lesson2 where views > 100;
    

    运行结果如下

    mysql> select name, views from lesson unin all select name, views from lesson2 where views > 100;
    +---------------------+-------+
    | name                | views |
    +---------------------+-------+
    | Python 基础教程     |   981 |
    | Scala 基础教程      |    73 |
    | Ruby 基础教程       |   199 |
    +---------------------+-------+
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值