sql 使用union后结果集排序,无法理解

//这是union all的结果,很正常,四个人名+三个数码产品//
赵佳儿
段飞
李四
张三
手机
空调
电脑
//这是只有union 的结果,为什么乱序了?//
电脑
段飞
空调
李四
手机
张三
赵佳儿
//sql语句:
select Userinfo.UserName from USerinfo union select Address.UserBuy
from Address
select Userinfo.UserName from USerinfo union all select Address.UserBuy
from Address

由于Union需要对查询结果集进行排序操作,当数据量较大时,若非特殊需要,尽量不要使用Union操作,
用Union All操作,然后对Union All出来的结果执行去重操作即可,所以结果不一样

-- union all
select '张三' name
union all
select '李四' 
union all
select '王五' 
union all
select '王五' 
union all
select '苹果' address
union all
select '香蕉' 
union all
select '橘子' 
-- result
张三
李四
王五
王五
苹果
香蕉
橘子

-- union 
select '张三' name
union all
select '李四' 
union all
select '王五' 
union all
select '王五' 
union 
select '苹果' address
union all
select '香蕉' 
union all
select '橘子' 
-- result
李四
苹果
王五
张三
香蕉
橘子

追问

意思是,union的排序不靠谱么。。

追答-- 是的,你可以加排序号,如下
select '张三' name,1
union all
select '李四' ,1
union all
select '王五' ,1
union 
select '王五' ,1
union 
select '苹果' address,2
union all
select '香蕉',2 
union all
select '橘子' ,2
order by 2

温馨提示:内容为网友见解,仅供参考
无其他回答

sql 使用union后结果集排序,无法理解
由于Union需要对查询结果集进行排序操作,当数据量较大时,若非特殊需要,尽量不要使用Union操作,用Union All操作,然后对Union All出来的结果执行去重操作即可,所以结果不一样-- union allselect '张三' nameunion allselect '李四' union allselect '王五' union allselect '王五' union allselect '...

union组合结果集时的order问题
在处理SQL查询时,使用UNION来组合结果集时,常见一个问题涉及到ORDER BY子句的使用。通常,UNION不支持在各个SELECT语句中使用ORDER BY,但允许在最后一个SELECT语句之后使用。这意味着,仅能对最终的组合结果集进行排序。然而,有时候确实需要在每个查询中先进行排序再进行组合,这并不符合标准用法。要解决...

...下面的sql可能有啥问题,我执行时,他在union 处提示命令未正常结束...
order by子句应该在最后,不能出现在union之前 你的意思是第一个数据集的要排在前面,而不是和第二个数据集的一起排序,是吗?要是这样的话,构造一个伪列(dataset)作为第一排序因子,如下:select objid , objname , objtype , quoteid as quoterid , quotename as quotername , quotetype as ...

SQL语句中UNION排序问题?
注意,因人为增加了一个排序用数字字段(第一个查询用1,第二个用2),UNION关键字的删除两个查询之间重复数据的功能会不起作用,如果需要保持删除重复记录的能力,则需要使用DISTINC关键字,例如:select distinct a.输出字段1, a.输出字段2, a.输出字段3, ...a.输出字段n from (select * ,1 a...

SQL语句中UNION排序问题
注意,因人为增加了一个排序用数字字段(第一个查询用1,第二个用2),UNION关键字的删除两个查询之间重复数据的功能会不起作用,如果需要保持删除重复记录的能力,则需要使用DISTINC关键字,例如:select distinct a.输出字段1, a.输出字段2, a.输出字段3, ...a.输出字段n from (select * ,1 ...

union all这样写为什么提示“使用 UNION、INTERSECT 或 EXCEPT 运算符...
union 关键字前后的查询返回的列数必须相同。你的这个查询前面返回了13列,后面的查询只返回了3列。缺少的列可以通过显示地指定Null来补充。例如:select B.ComplainNo,C.BgDate,A.TrueName,A.Tel,A.Company,A.Department,B.ProductName,B.LyDate,B.SgDate,D.ProductCategory,D.SupplyName,E.PF...

关于sql,为什么我数据库查完 union all 了结果集后 变成了一条数据...
rs.getint(1)取得是数据库第一列的值 rs(0)为3, rs(1)为45

mysql一条sql中用uninonall连接的两个子sql会产生不一
在一条SQL语句中使用UNION ALL连接的两个子查询,若执行过程中数据库有插入或删除操作,结果可能不一致。UNION ALL合并两查询结果集,不进行去重。执行过程为先执行第一个子查询,再执行第二个,最后合并结果返回。若在执行第一个子查询后、第二个前,数据库其他会话执行插入或删除,第二子查询结果受此...

sql 语句 用union合并表 但是我在前面加了个字段用来排序
在SQL语句中使用UNION合并表时,若希望在前面加入字段用于排序,需注意拼接字符串的格式。正确拼接应为: "' product '". 若你直接使用包含变量名的拼接方式,数据库执行时,变量值不会被替换进字符串。对于开发程序,确保在使用UNION时,合并的三个源表的列数量和列类型一致极为重要。在相同位置加上...

关于sql中的union问题?
UNION操作符用于结合两个或更多查询的结果集,UNION ALL则不移除重复项。而INTERSECT操作符用于找到两个查询结果集中的共同元素,而EXCEPT操作符用于从一个查询结果集中移除另一个查询结果集中的元素。通过这些操作符,我们可以构建复杂的查询来生成所需的数据集。例如,为了创建一个包含两个表中不重叠元素...

相似回答