SQL语句中union all和union的区别以及用法


起因

一次渗透过程中目标使用的SQL Server有联合注入,发现使用union all 不报错,union报错,同时还有一个就是字段的类型,发现类型不对也会报错,贴张图

union+all+select+123123,1,'2','3',null,null,null--+-    不报错
union+select+123123,1,'2','3',null,null,null--+-         报错

注意点:

1 union结果集种的列名总是等于第一个select语句中的类型。

2 union内部的select 语句必须拥有相同数量的列,列也必须有相似的数据类型。同时,每条select语句的列的顺序必须相同。

3 如果子句中有 order by,limit 需要用括号()包起来,推荐将order by,limit放到所有子句之后,即对最终合并的结果来排序或筛选。

union 和union all的区别:

union联合的结果集不会有重复值,如果要有重复值,则使用union all

union会自动压缩多个结果集合中重复的结果,使结果不会有重复行,union all 会将所有的结果共全部显示出来,不管是不是重复。

union:会对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。

union all:对两个结果集进行并集操作,包括重复行,不会对结果进行排序。

1.sql Union用法
select 字段1 from 表名1 Union select 字段2 from 表名2;
2.sql Union All用法
select 字段1 from 表名1 Union all select 字段2 from 表名2;