sql查询多条数据用逗号拼接_14.组合查询

CUSTOMERS 表

cd45cf825c31288830d0ca71abce8a14.png

主要是使用 union 操作符,将多条 SQL 语句组合成一个结果集。

我们有 2 种情况可能要用到组合查询:

  1. 在一个查询中从不同的表返回结构数据
  2. 对一个表执行多个查询,按一个查询返回数据(这种情况往往可以用 where 中的 and 或者 or 操作符可以实现)

比如我们有 2 条查询语句:

// 第一句 SQL
select CUST_NAME, CUST_CONTACT, CUST_EMAIL
from CUSTOMERS
where CUST_STATE in ('IL', 'IN', 'MI');

// 第二句 SQL
select CUST_NAME, CUST_CONTACT, CUST_EMAIL
from CUSTOMERS
where CUST_NAME = 'Fun4All';

我们使用 union 可以把这两个语句进行组合:

select CUST_NAME, CUST_CONTACT, CUST_EMAIL
from CUSTOMERS
where CUST_STATE in ('IL', 'IN', 'MI')
union
select CUST_NAME, CUST_CONTACT, CUST_EMAIL
from CUSTOMERS
where CUST_NAME = 'Fun4All'; 

不过在这个例子中,由于数据是来自同一张表,所以我们可以用 where 的多个子句来实现同样的效果。

select CUST_NAME, CUST_CONTACT, CUST_EMAIL
from CUSTOMERS
where CUST_STATE in ('IL', 'IN', 'MI')
   or CUST_NAME = 'Fun4All'; 

我们也可以将不同表的查询结果拼接起来。

select CUST_NAME
from CUSTOMERS
union
select PROD_NAME
from PRODUCTS;

如果是不同的表,那么数据类型必须兼容,类型不需要完全相同,但至少是要 DBMS 可以隐式转换的类型。

这种多张表的组合查询,最后生成的列名取的是第一个 SQL 语句的列名。

包含或取消重复的行

我们可以使用 union all 来代替 union,这样就保留重复的行。

select CUST_NAME, CUST_CONTACT, CUST_EMAIL
from CUSTOMERS
where CUST_STATE in ('IL', 'IN', 'MI')
union all
select CUST_NAME, CUST_CONTACT, CUST_EMAIL
from CUSTOMERS
where CUST_NAME = 'Fun4All'; 

8bd9006e4826689fa11042de3ce2992a.png

排序

我们可以对最终的结果进行排序,但只能再最后一条 SQL 语句中使用 order by,而不能对每个 SQL 语句指定 order by 进行排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值