Union
把多次查询的结果合并成一个表返回。
如
Select [ID],[Name] From [T1]
Union
Select [ID],[Name] From [T2]
[T1]和[T2]的结构可以不一样,但查询的字段类型要一样。
Union:不用 Order By 时,自动对返回结果排序。
Union All:不用 Order By 时,不对返回结果排序。
例子
如 [T1] 表记录很多,在查询时,如果使用 Order By 会严重影响查询速度
方法1
Select [ID],[Name] From [T1] Where [ClassID]=1 Order By [IsPayment] Desc
方法2
创建一个视图
Create View [V_T1_IsPayment] As Select * From [T1] Where [IsPayment]=1
Select [ID],[Name] From [V_T1_IsPayment] Where [ClassID]=1
Union All
Select [ID],[Name] From [T1] Where [ClassID]=1 And [IsPayment]=0
这样,就不用 Order By 使 IsPayment=1 的排在前面
方法1和方法2查询的结果是一样的,但方法2速度会快,省了排序的时间。
ClassID、IsPayment 都要建索引。
删除主键
Alter Table 表名 Drop Constraint 主键名
创建主键
Alter Table 表名 Add Constraint 主键名 Primary Key(主键字段)
修改字段
Alter Table 表名 Alter Column 字段 数据类型 NULL | NOT NULL Default "默认值"
Company_Name 表中有三千万条数据。
创建一个聚集索引用了20分钟。
Create Clustered Index Company_Name_Name
On [Company_Name]([Name])
创建一个非聚集索引用了7分钟。
Create NonClustered Index Company_Name_ID
On [Company_Name]([ID])
一、DBCC SHOWCONTIG
显示指定的表或视图的数据和索引的碎片信息。
语法
DBCC SHOWCONTIG
[(
{ 'table_name' | table_id| 'view_name' | view_id }
[ , 'index_name' | index_id ]
)]
参数
1. 'table_name'|table_id|'view_name'|view_id
指定要检查碎片信息的表或视图。
如果未指定,则检查当前数据库中的所有表和索引视图。
2.'index_name'|index_id
指定要检查其碎片信息的索引。
如果未指定,将处理指定表或视图的聚集索引。
例子
DBCC SHOWCONTIG('Book')
DBCC SHOWCONTIG('Book', 'Book_BookName')
二、DBCC INDEXDEFRAG
指定表或视图的索引碎片整理。
语法
DBCC INDEXDEFRAG
(
{ 'database_name' | database_id | 0 }
, { 'table_name' | table_id | 'view_name' | view_id }
[ , { 'index_name' | index_id } [ , { partition_number | 0 } ] ]
)
参数
1.'database_name' | database_id | 0
对其索引进行碎片整理的数据库。如果指定 0,则使用当前数据库。
2.'table_name' | table_id | 'view_name' | view_id
对其索引进行碎片整理的表或视图。
3.'index_name' | index_id
要进行碎片整理的索引的 ID 的名称。如果未指定,该语句就对指定表或视图的所有索引进行碎片整理。
例子
DBCC INDEXDEFRAG(0, 'Book', 'Book_BookName')
CONVERT
将一种数据类型的表达式转换为另一种数据类型的表达式。
语法:
CONVERT(data_type[(length)], expression [,style])
参数:
1.data_type
目标数据类型。
length:指定目标数据类型长度的可选整数。 默认值为 30。
2.expression
要转换数据类型的表达式
3.style
可选参数。是一个整数表达式。
指定 CONVERT 函数如何转换 expression 的整数表达式。
如 data_type 为 date 或 time 数据类型,则 style 可以为下表中显示的值之一
值 输出格式
1 mm/dd/yyyy
2 yy.mm.dd
3 dd/mm/yyyy
10 mm-dd-yy
20 yyyy-mm-dd hh:mi:ss
21 yyyy-mm-dd hh:mi:ss.mmm
......
不同的数据类型,style 会不一样。
一个例子
把时间格式转成字符串格式。
declare @datetime1 datetime;
set @datetime1 = '2008-1-1 10:10:10';
print convert(nvarchar, @datetime1);
print convert(nvarchar, @datetime1, 20);
print convert(nvarchar(10), @datetime1, 20);
1.查询每个月加入的记录总数
Select convert(varchar(7), [AddTime], 20) as [AddTime],count(*) as [Count]
From [Article] Group By convert(varchar(7), [AddTime], 20)
Order By [AddTime] Desc
每天的记录数:convert(varchar(10), [AddTime], 20)
每年的记录数:convert(varchar(4), [AddTime], 20)
2.A表和B表有关联外键,可以相互对换数据
Update [Article] Set [ClassName]=C.[ClassName]
From [Class] C Inner Join [Article] A On C.[ClassID]=A.[ClassID]
3.从一个表查询一些记录,导入另一个表
Insert Into [Tag]([TagName]) (Select [TagName] From [Tag])
重复一遍表的内容