Unions | 联合 | MySQL

UNION

之前学习了连接,因此我们掌握了结合多张表列的方法
今天学习如何结合多张表的行

案例一

首先,原始表格如下
在这里插入图片描述
现在我们针对表格中的“order_date”的具体日期,来为每一行的order进行标签,即新增一列来描述其状态,如active

代码

SELECT 
	order_id,
    order_date,
    'Active' AS status
FROM orders
WHERE order_date >= '2019-01-01'

结果

在这里插入图片描述
然后为其它订单日期的行也赋予archive状态

代码

SELECT 
	order_id,
    order_date,
    'Archived' As status
FROM orders
WHERE order_date < '2019-01-01'

结果

在这里插入图片描述

使用UNION连接上述两个代码的返回列表

代码

SELECT 
	order_id,
    order_date,
    'Active' As status
FROM orders
WHERE order_date >= '2019-01-01'
UNION
SELECT 
	order_id,
    order_date,
    'Archived' As status
FROM orders
WHERE order_date < '2019-01-01'

结果

在这里插入图片描述

案例二

刚刚上述操作是基于同一个表格实现的
现在我们基于不同的表格写查询,并将结果合并到一个结果集

代码

SELECT first_name
FROM customers
UNION
SELECT name
FROM shippers

结果

在这里插入图片描述

注意

1 查询返回的列的数量一定要一样,否则报错

示例

SELECT first_name,last_name
FROM customers
UNION
SELECT name
FROM shippers

在这里插入图片描述

2 查询返回的列的数量一定要一样,否则报错
如果两次查询返回的列名不一致,则使用UNION后返回的列名以第一个列表返回列名为主

练习

使得查询后,返回customer表如下数据

在这里插入图片描述

SELECT
	customer_id,
    first_name,
    points,
    'Bronze' AS type 
From customers
WHERE points <= 2000
UNION
SELECT
	customer_id,
    first_name,
    points,
    'Silver' AS type 
From customers
WHERE points BETWEEN 2000 AND 3000  --WHERE 3000 >= points >2000  这样是错误表示!
UNION
SELECT
	customer_id,
    first_name,
    points,
    'Gold' AS type 
From customers
WHERE  points > 3000 

如果想要列表按照type的gold、silver、bronze排序的话,可以在上述代码最后插入一段:

order by points DESC

或者在编写代码时,就按顺序写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值