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;