union联合查询guojizaixian - 凯发娱乐

union联合查询guojizaixian

2019-02-11 11:02:49 | 作者: 浅秋 | 标签: 成果,数据,排序 | 浏览: 1319

 select * from [IND] where INDID 10
 union
 select * from [IND] where INDID 9


目前为止,还没有呈现问

之后,或许有人会用到相似的查询

 select * from [IND] where INDID 10 order by INDID desc
 union
 select * from [IND] where INDID 9 order by INDID desc

此刻就呈现问题了,数据库报错。问题就出在order by上

为什么呢?莫非UNION和ORDER BY 不能一起存在?

union和 order by 当然是能够一起存在的

可是在运用union的时分,联合查询不仅仅是将数据调集兼并

他并不是将每个子查询一个一个查询出来后联接在一起,数据库是将整段查询句子了解之后一致查询得到的是整个的数据调集

别的order by在一个数据调集查询里也只能呈现一次而且呈现在最终。

因而,在联合查询里,order by 要写在最终一个子查询之后,而且,该排序是对整个联合查询出来的成果集排序的,并不是只对最终一个子查询排序

 select * from [IND] where INDID 10
 union
 select * from [IND] where INDID 9 order by INDID desc

这样就能够对咱们联合查询出来的成果集进行全体排序,而不是只对最终一个子查询的成果集排序。

再做一个实验来更充沛的阐明这个问题

创立一个这样的查询

 select * from [IND] where INDID=4

 union

 select * from [IND] where INDID=2
 union
 select * from [IND] where INDID=1
 union
 select * from [IND] where INDID=5
 union
 select * from [IND] where INDID=3

INDID是主键,在创立数据的时分,数据库里的次序是12345

假如联合查询仅仅但存的将查询成果联接在一起,那么咱们得到的成果应该是:42153

可是,实际上得到的成果是和数据库里数据摆放的次序相同的 12345

因而,能够得出结论,联合查询的成果是整个查询完成后得出的,而不是将子查询挨个完成后拼接的。

 select * from [IND] where INDID=4

 union

 select * from [IND] where INDID=2
 union
 select * from [IND] where INDID=1
 union
 select * from [IND] where INDID=5
 union
 select * from [IND] where INDID=3

 order by INDID ASC/DESC

这样就能够对整个联合成果集进行排寻了。

别的关于TOP?

假如是这样,在一般的查询中,TOP是在ORDER BY之后履行的,那么

 select TOP 2 * from [IND] where INDID=4

 union

 select * from [IND] where INDID=2
 union
 select * from [IND] where INDID=1
 union
 select * from [IND] where INDID=5
 union
 select * from [IND] where INDID=3

 order by INDID

这样是不是能够得到整个成果集排序后的最前面两条数据呢?

答案是不能够。

尽管说在单句的查询中,TOP是在ORDER BY 之后履行,可是在联合查询中,这样写,TOP的效果域是在子查询里,因而TOP并没有对联合查询的成果集挑选,而只对它所写在的那便条查询里进行挑选,这就像是子查询里的WHERE句子相同,相似这样的挑选效果规模都是在子查询,不像ORDER BY 效果在整个联合查询。

那么怎么对联合查询进行 截取置顶N条数据的挑选呢? 很简单

用 rowcount

比起TOP来说,rowcount作为成果集截取置顶愈加标准些,究竟不是依托查询句子,而是直接设置查询句子取得成果集的数目。

 set rowcount 2
 
 select * from [IND] where INDID=4

 union
 select * from [IND] where INDID=1
 union
 select * from [IND] where INDID=2

 union
 select * from [IND] where INDID=3

 order by INDID ASC
 

形如以上查询句子。咱们就能够做到对联合查询排序,并取得最上的两条数据了。

已然能使用order by 排序 和 并用rowcount截取集和数量,那么天然联合查询分页等其他使用也不在话下了

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2
  • 3
  • 4

    union联合查询guojizaixian

    成果,数据,排序
  • 5

    TIME快报

    效劳,状况,修正
  • 6

    SQL试题环球

    用户,时刻,信息
  • 7
  • 8
  • 9

    asdfasdfITeye头条

    用户,权限,指令
  • 10

    SQL一招ITeyesohu

    字符串,标题,检索