当前位置:首页 » 编程语言 » sql使用union陷阱
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql使用union陷阱

发布时间: 2022-06-17 10:36:56

‘壹’ sql中 union问题

UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。

UNION 的语法如下:

[SQL 语句 1]
UNION
[SQL 语句 2]

假设我们有以下的两个表格,

Store_Information 表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

Internet Sales 表格
Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750

而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句:

SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales

结果:

Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

有一点值得注意的是,如果我们在任何一个 SQL 语句 (或是两句都一起) 用 "SELECT DISTINCT Date" 的话,那我们会得到完全一样的结果。

‘贰’ sql server 中union的用法

select * from student 专业='计算机'
union
select * from student 专业='英语'

--上面这个命令中的union表示将两个select查询结果合并。

‘叁’ SQL中union 关键字的使用方法是详细...!

搂主你好,使用UNION是将多个查询结果合并起来,形成一个完整的查询结果时,系统会自动去重复的元组,但需要注意的是,参加Union操作的各数据项数目必须相同;对应项的数据类型也必须相同。

‘肆’ sql server 中union的用法

工具/原料

SQL SERVER 2014 电脑

方法/步骤

1、首先来准备两个select查询,分别查询一个表。

‘伍’ SQl语句的union问题

你想象的是什么样的?

看一下帮助吧:
UNION 运算符
将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。

使用 UNION 组合两个查询的结果集的两个基本规则是:

所有查询中的列数和列的顺序必须相同。

数据类型必须兼容。
语法
{ < query specification > | ( < query expression > ) }
UNION [ ALL ]
< query specification | ( < query expression > )
[ UNION [ ALL ] < query specification | ( < query expression > )
[ ...n ] ]

参数
< query_specification > | ( < query_expression > )

是查询规范或查询表达式,用以返回与另一个查询规范或查询表达式所返回的数据组合的数据。作为 UNION 运算一部分的列定义可以不相同,但它们必须通过隐性转换实现兼容。

下表说明数据类型与相应 (ith) 列的选项的比较规则。

ith 列的数据类型 结果表中 ith 列的数据类型
非数据兼容类型(数据转换不由 Microsoft® SQL Server™ 隐性处理)。 SQL Server 返回的错误。
长度为 L1 和 L2 的固定长度 char。 长度与 L1 和 L2 中较长的那个相等的固定长度 char。
长度为 L1 和 L2 的固定长度 binary。 长度与 L1 和 L2 中较长的那个相等的固定长度 binary。
任一列或两列都是可变长度 char。 长度与为 ith 列指定的最大长度相等的可变长度 char。
任一列或两列都是可变长度 binary。 长度与为 ith 列指定的最大长度相等的可变长度 binary。
两列都是数字数据类型(如 smallint、int、float、money)。 与两列的最大精度相等的数据类型。例如,如果表 A 的 ith 列是 int 类型,表 B 的 ith 列是 float 类型,则 ith 列在结果表中的数据类型是 float,因为 float 比 int 更精确。
两列的描述都指定 NOT NULL。 指定 NOT NULL。

UNION

指定组合多个结果集并将其作为单个结果集返回。

ALL

在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。

‘陆’ sql语句中的 union 有问题 求解释

select top 2 * from
(select s.*,score,cname from student s
inner join sc on sc.s#= s.s# and sc.c#='01'
inner join course on sc.c# = course.c#) aa
union all
select top 2 * from
(select s.*,score,cname from student s
inner join sc on sc.s#= s.s# and sc.c#='02'
inner join course on sc.c# = course.c#) aa
union all
select top 2 * from
(select s.*,score,cname from student s
inner join sc on sc.s#= s.s# and sc.c#='03'
inner join course on sc.c# = course.c#) aa
order by score desc

‘柒’ SQL语句中为什么union有问题,求解释

你这个语句运行不了,UNION语句不允许和ORDER BY 一起使用。

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

由于Union需要对查询结果集进行排序操作,当数据量较大时,若非特殊需要,尽量不要使用Union操作,
用UnionAll操作,然后对UnionAll出来的结果执行去重操作即可,所以结果不一样
--unionall
select'张三'name
unionall
select'李四'
unionall
select'王五'
unionall
select'王五'
unionall
select'苹果'address
unionall
select'香蕉'
unionall
select'橘子'
--result
张三
李四
王五
王五
苹果
香蕉
橘子
--union
select'张三'name
unionall
select'李四'
unionall
select'王五'
unionall
select'王五'
union
select'苹果'address
unionall
select'香蕉'
unionall
select'橘子'
--result
李四
苹果
王五
张三
香蕉
橘子

‘玖’ SQL语句 用union时的问题

------修改----------------------
select * into a2 from
(select * from (select top 2 * from tb_Questions where que_type='单选题' order by newid()) A
union
select * from (select top 1 * from tb_Questions where que_type='多选题' order by newid()) B) T

前提是这张表里的字段不包含text、ntext、image类型的

‘拾’ sql语句union

sql中union用于合并两个或多个 SELECT 语句的结果集。


需要注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。


SQL UNION 语法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2


以图中表格为例:

列出所有在中国和美国的不同的雇员名:


SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA

结果

E_Name

Zhang, Hua

Wang, Wei

Carter, Thomas

Yang, Ming

Adams, John

Bush, George

Gates, Bill


这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。

如果需要显示全部值,则使用UNION all。


列出在中国和美国的所有的雇员:

SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA