SQL组合查询知识

  1. 大多数SQL查询只从一个或者多表中返回数据都是单个select语句。但是SQL server允许多个select语句执行,它返回的结果是一个结果集,需要使用 union 组合 ,这些组合一般称为并(union)和复合查询(compound query)
  2. 什么情况下可以需要使用组合查询

2.1、在一个查询中从不同的表返回不同的结构数据

2.2、对一个表执行多个查询,按一个查询返回数据

  1. 组合查询和多个where条件

3.1 多数情况下,组合相同表的两个查询所完成的和具有多个where条件的查询是一样的。换个说法,具有多个where条件的查询也可以称之为组合成查询

  1. 使用 union 操作符来组合数条Sql server语句,会将查询的结果返回为结果集

例子:如需要查询Illinois、Indiana和Michigan等美国几个州的所有顾客报表,还想包括不管位于哪个洲的所有Fun4All.

使用union涉及多个select语句,步骤分解:

select cust_name,cust_contact,cust_email

from Customers

where cust_state in ('il','in','mi')

    输出:

这条查询把Illinois、Indiana和Michigan这些洲缩写,放在in关键字中,查询以in ('il','in','mi')这些开头的都会被检索。

步骤二:

select cust_name,cust_contact,cust_email

from Customers

where cust_name = 'fun4all'

     输出:

          

这条查询把cust_name等于fun4all的数据行都检索出来,使用操作符 = 来做相等测试。你会发现有个输出了两次,因为它满足两个select的检索条件。

步骤三:

       使用union来组合这两个select

       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'

    输出:

          

这个查询把步骤一和步骤二的组合在一起,使用union关键字来隔开。Union指示DBMS执行这两个select查询,并两个的查询的一个结果集。不会忽略null行,union 关键字还有一个去重复行的功能 ,如果想显示null行,需要在union关键字后面借一个 All,因为union关键字默认行为就是去重复。

Union 关键字与多个where条件的区别:

    select cust_name,cust_contact,cust_email

from Customers

where cust_contact in ('il','in','mi') or cust_name = 'fun4all'

 输出:

这个例子中使用了步骤一和步骤二的where条件,在通过or操作符来把这两条件联结在一起。Or操作符:两个条件满足一个或者两个都的数据都可以被检索出来。

可能你觉得使用union关键字来组合很麻烦。但是,对于较与复杂where条件,或者从多个表中查询数据,使用union关键字比多个where条件,要简单一些。

  1. union关键字的限制:union关键字组合的select数目,Sql server 没有明确的确定。可以同DBMS文档来查看,union关键字都最大限制数目。
  2. Union 关键字使用规则:

6.1、union关键字必须使用在两个或者两个以上的表查询数据,使用Union关键字来隔开

6.2、Union关键字的每个查询必须包含相同的列,表达式以及聚合函数,不然则会报错

6..3列的数据类型必须兼容:类型不必相同,但是,必需是DBMS能隐式转的类型也可以。

   

  1. union all为union的一种形式,他可以完成where无法完成的工作。
  2. 在使用union进行组合查询是,无论有多少个select子句。只能出现一个order by子句,而order by子句必须位于最后一行。

如:

       select prod_id,quantity

from OrderItems

where prod_id like 'bnbg%' and quantity >=100

union

select prod_id,quantity

from OrderItems

where quantity >=100

order by prod_id,quantity

错误形式:(红色的是错误地方)

        select prod_id,quantity

from OrderItems

where prod_id like 'bnbg%'  and quantity >=100

order by prod_id,quantity

union

select prod_id,quantity

from OrderItems

where quantity >=100

order by prod_id,quantity

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值