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截取集和数量,那么自然联合查询分页等其他应用也不在话下了
分享到:
相关推荐
SQL注入笔记-union联合查询
本案例中,开发者遇到了一个与Hibernate映射配置文件相关的异常,该异常涉及到不支持的“union”联合查询。具体表现为在执行查询时抛出了`SQLGrammarException`,提示为`ORA-00907: 缺失右括号`,这通常意味着SQL...
在SQL Server中,`UNION`操作符是用于合并两个或更多`...记住,选择正确的操作符(`UNION`或`UNION ALL`)以及优化查询是提升数据库性能的关键。通过持续学习和实践,你将能够熟练掌握这些技能,成为数据库查询的专家。
摘要:本文总结了简单 SQL 数据库语句的基本用法,以学生成绩的管理为例进行描述,涵盖了查询结果中的列名显示、精确查找、时间类型变量的处理、集函数、分组、union 联合查询结果、多表查询等多个方面的知识点。...
在C++编程中,`union`是一种特殊的数据结构,它允许多个数据类型共享同一块内存空间。这个特性使得`union`在处理不同数据类型的转换和节省存储空间时非常有用。然而,`union`在处理大小端问题时,可能会引发一些不...
基于 UNION 联合查询的检测是指攻击者使用 UNION 联合查询来推断数据库中的数据。攻击者可以通过在用户输入中注入恶意 SQL 代码,来推断数据库中的数据。 ### 5. 基于堆叠查询的检测 基于堆叠查询的检测是指攻击者...
联合查询,又称为"UNION"查询,它允许我们将两个或多个SELECT语句的结果合并成一个结果集。在Access中,这通常用于将数据从不同的表中组合在一起,尤其当这些表有相似的列结构时。而“带合计”的概念意味着在查询中...
在本系列的“数据库介绍(二)12~17”中,我们将深入探讨数据库管理中的几个关键概念和操作,主要包括SELECT查询语句的执行顺序、表数据的复制、数据类型的转换、GROUP BY的运用以及UNION联合查询。这些都是数据库查询...
**一、UNION联合查询注入** 1. **注入点判断**:通过在查询参数中添加`' and 1=1`来检查是否存在注入漏洞,如果页面返回正常,说明可能存在注入。 2. **字段数猜测**:利用`order by`来逐个尝试字段数,观察页面响应...
1. **UNION 联合查询注入** 在这种类型的注入攻击中,攻击者利用`UNION`操作符将两个或多个`SELECT`语句连接起来。攻击者的目标是合并他们的恶意查询与原始查询,以便在结果集中注入额外的行或列。成功的关键在于...
本文详细介绍了Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下
为了高效地执行此类操作,我们可以利用数据库查询语言,如SQL(结构化查询语言)中的联合查询(Union Query)来实现。本篇文章将深入探讨如何通过联合查询来解决库存计算的问题,并提供相关源代码作为示例。 联合...
因此,常常出现这样的错误 代码如下:select * from [IND] where INDID>10unionselect * from [IND] where INDID<9>10 order by INDID descunionselect * from [IND] where INDID<9 order by INDID desc此时就出现...
3. **基于UNION联合查询**:在两个查询之间使用UNION操作符,当查询列数和数据类型匹配时,可以合并结果,高效地获取大量数据。例如,通过ORDER BY和数据类型的测试来确定列数和类型。 **自动化检测与利用**: 工具...
#### 七、UNION联合查询 UNION用于合并两个或多个SELECT语句的结果集,确保结果集中没有重复的行。 1. **标准UNION:** ```sql SELECT * FROM students WHERE name LIKE '张%' UNION SELECT * FROM students ...
* UNION 联合查询型注入 * 时间延迟型盲注 * 堆查询注入 三、判断数据库类型 * Access:and (select id from MSysAccessObjects) >0 返回正常说明是 Access * MSSQL:and (select id from sysobjects) >0 返回...
MySQL数据库中的联合查询(UNION)是一种强大的操作,它允许将两个或更多SELECT语句的结果合并成一个结果集。在理解联合查询时,我们需要明确几个关键概念: 1. **UNION操作符**:UNION操作符用于合并两个或多个...
### 联合查询(UNION) #### 基本语法 ```sql SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; ``` - `UNION`:用于合并两个或多个SELECT语句的结果集。 #### 示例 假设有两个表`...
总结来说,`UNION`和`UNION ALL`是SQL中非常有用的工具,用于合并不同查询的结果,创建一个单一的、去重(对于`UNION`)的结果集。它们在数据分析、报表生成和数据整合等场景中有着广泛的应用。了解并熟练掌握这些...