sql使用UNION
创建组合查询
可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。
16.2.1 使用UNION
UNION的使用很简单。所需做的只是给出每条SELECT语句,在各条语句之间放上关键字UNION。
举一个例子,假如需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的所有物品(不考虑价格)。当然,可以利用WHERE子句来完成此工作,不过这次我们将使用UNION。
正如所述,创建UNION涉及编写多条SELECT语句。首先来看单条语句:
第一条SELECT,检索价格不高于5的所有物品所有行。第二条SELECT使用IN找出供应商1001和1002生产的所有物品。
为了组合这两条语句,按如下进行:
这条语句由前面的两条SELECT语句组成,语句中用UNION关键字分隔。UNION指示SQL Server执行两条SELECT语句,并把输出组合成单个查询结果集。
作为参考,这里给出使用多条WHERE子句而不是使用UNION的相同查询:
在这个简单的例子中,使用UNION可能比使用WHERE子句更为复杂。但对于更复杂的过滤条件,或者从多个表(而不是单个表)中检索数据的情形,使用UNION可能会使处理更简单。
16.2.2 UNION规则
正如所见,并是非常容易使用的。但在进行并时有几条规则需要注意。
● UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个UNION关键字)。
● UNION中的每个查询必须包含相同的列、表达式或聚集函数,而且各个列必须以相同的次序列出(对其他DBMS则没有这种限制,只要各个列都出现,它们以任意次序出现都可以)。
● 列数据类型必须兼容:类型不必完全相同,但必须是SQL Server可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。
如果遵守了这些基本规则或限制,则可以将并用于任何数据检索任务。
16.2.3 包含或取消重复的行
请返回到16.2.1节,考察一下所用的样例SELECT语句。我们注意到,在分别执行时,第一条SELECT语句返回4行,第二条SELECT语句返回5行。但在用UNION组合两条SELECT语句后,只返回了8行而不是9行。
UNION从查询结果集中自动去除了重复的行(换句话说,它的行为与单条SELECT语句中使用多个WHERE子句条件一样)。因为供应商1002生产的一种物品的价格也低于5,所以两条SELECT语句都返回该行。在使用UNION
相关文档:
最近由于系统的需求,所以要了解一下如何优化sql server,下面是我的一些总结,不足的地方希望大家批评指正。说要优化大家一定会想到索引,那我们就从索引开始吧。 微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引),下面 ......
1.字符串函数
长度与分析用
datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格
substring(expression,start,length) 不多说了,取子串
right(char_expr,int_expr) 返回字符串右边int_expr个字符
字符操作类
upper(char_expr) 转为大写
lower(char_expr) 转为小写
space(int_expr) 生成int_exp ......
为每个表对象返回一行。当前仅用于 sys.objects.type = U 的表对象。
列名 数据类型 说明
<继承的列>
有关此视图所继承的列的列表,请参阅 sys.objects
lob_data_space_id
int
一个非零值,是保存此表的 text、ntext 和 image 数据的磁盘空间(文件组或分区架构)的 ID。
0 = 表不包含 text、ntext ......
a.数据库基础
i.概念:表及相关操作对象的集合(主数据文件mdf,二级数据文件ndf,日志ldf)
ii.组成:系统: master(记录了所有的服务器系统信息)
,model(记录了所有临时记录,链接断开时,数据丢失)
Tempdb(数据模板库,含创建库时的缺省数据)
, ......
查询速度慢的原因很多,常见如下几种:
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足
5、网络速度慢
6、查询出的数据量过大(可以采用多 ......