UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复 union 是取唯一值,记录没有重复
1、UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
2、UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
效率:
UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。
各位大神,怎么在sql语句union中使用order by?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各位大神,怎么在sql语句union中使用order by?相关的知识,希望对你有一定的参考价值。
select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待维修'
order by U.RepairDate desc
union
select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待检测'
order by u.RepairDate desc
使这个语句执行通就行
(select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待维修'
union
select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待检测')
order by u.RepairDate desc 参考技术A select * from (
select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待维修'
union
select u.*, r.statusname, p.*, c.*
from UserLogin U, RepairStatus R, Product P, Customer C
where U.status = R.statusid
and U.ProductName = P.ProductName
and U.BoatName = C.BoatName
and U.RepairDate <= '2011-05-25'
and R.statusname = '待检测'
) a
order by RepairDate desc追问
最外面的select * ,提示为明确定义的列
数据库是oralce
我想这个应该不是问题,
sql语句该是一样的
可能是你的几个表,列名有重复导致的,
比如UserLogin 表有RepairDate 字段,Product 表也有RepairDate 字段造成的
在内层的select不要用*,改用具体的列名
--我举个例子你就懂了
CREATE TABLE ts
(
id INT,
VALUE INT
)
GO
INSERT ts
SELECT 1,2 UNION ALL
SELECT 1,3 UNION ALL
SELECT 1,2 UNION ALL
SELECT 2,4 UNION ALL
SELECT 2,21 UNION ALL
SELECT 3,2 UNION ALL
SELECT 3,2
GO
SELECT id ,sum(value) AS s_v
FROM ts
GROUP BY id
ORDER BY sum(VALUE)
/*
id s_v
---- ----
3 4
1 7
2 25*/
就是通过分组聚合后 对分组元素进行排序
本例中就是对ID分组 然后按照id对应的value总和进行排序
SQL语句中:UNION与UNION ALL的区别
以上是关于各位大神,怎么在sql语句union中使用order by?的主要内容,如果未能解决你的问题,请参考以下文章
求助各位大神,小弟初学IBM DB2,求助关于数据库创建问题,多谢!!