SQLserver2008基本语句⼤全与提升语句SQL server 2008 常⽤语句
1.基础语句
##1、创建数据库
CREATE DATABASE database-name
on primary
(name=database_name,
filename='物理地址.mdf,
size=1,
maxsize=5,
filegrowth=1)
log
on
(name=database_name,
filename='D:\sql_file\database_name.ldf',
size=1,
maxsize=5,
filegrowth=10%
)
2、说明 删除数据库
drop database dbname
3、说明 备份sql server
— 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk','testBack','c:\mssql
7backup\MyNwind_1.dat'
— 开始 备份
BACKUP DATABASE pubs TO testBack
将数据库进⾏扩充
use master
go
alter database database_name
add file
(name='database_name1',
filename='D:\sql_file\database_name1.ndf',
size=5,
maxsize=5,
filegrowth==5,)
(name='database_name2',
filename='D:\sql_file\database_name2.ndf',
size=5,
maxsize=5,
filegrowth=10)
to filegrowth newgroup  /*将两个辅助⽂件添加到newgroup⽂件组中*/
go
4、创建新表
create table tabname(col1 type1 [not null][primar
y key],col2 type2 [not null],..)
根据已有的表创建新表
A create table tab_new like tab_old (使⽤旧表创建新表)
B create table tab_new as select col1,col2… from t
ab_old definition only
5、删除新表
drop table tabname
6、增加⼀个列
Alter table tabname add column col type
/
* 列增加后将不能删除。DB2中列加上后数据类型也不能改变唯⼀能改变的是增加varchar类型的长度。 */ 7、添加主键
Alter table tabname add primary key(col)
删除主键
Alter table tabname drop primary key(col)
8、创建索引
create[unique]index idxname on t
abname(col….)
删除索引
drop index idxname
//索引是不可更改的想更改必须删除重新建。
9、创建视图基本的sql语句有哪些
create view viewname as select statement
删除视图
drop view viewname
10、⼏个简单的基本的sql语句
选择select*from table1 where范围
插⼊insert intotable1(field1,field2)values(value1,value2)
删除delete from table1 where范围
更新update table1 set field1=value1 where范围
查select*from table1 where field1 like//-like的语法很精妙,查资料!
排序select*from table1 order by field1,field2 [desc]
总数select count as totalcount from table1
求和select sum(field1)as sumvalue from table1
平均select avg(field1)as avgvalue from table1
最⼤select max(field1)as maxvalue from table1
最⼩select min(field1)as minvalue from table1
11、⼏个⾼级查询运算词
A UNION 运算符
UNION 运算符通过组合其他两个结果表 例如 TABLE1 和 TABLE 并消去表中任何重复⾏⽽派⽣出⼀个结果表。当 ALL 随 UNION⼀起使⽤时即 UNION ALL 不消除重复⾏。两种情况下 派⽣表的每⼀⾏不是来⾃ TABLE1 就是来⾃TABLE2。
B EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的⾏并消除所有重复⾏⽽派⽣出⼀个结果表。当 ALL 随 EXCEPT ⼀起使⽤时 (EXCEPT ALL) 不消除重复⾏。
C INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的⾏并消除所有重复⾏⽽派⽣出⼀个结果表。当 ALL 随 INTERSECT ⼀起使⽤时 (INTERSECT ALL) 不消除重复⾏。 使⽤运算词的⼏个查询结果⾏必须是⼀致的。
12、使⽤外连接
A、left outer join
左外连接 左连接 结果集⼏包括连接表的匹配⾏ 也包括左连接表的所有⾏。
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B right outer join:
右外连接(右连接) 结果集既包括连接表的匹配连接⾏也包括右连接表的所有⾏。
C  full/cross outer join
全外连接 不仅包括符号连接表的匹配⾏ 还包括两个连接表中的所有记录。
12、分组:Group by:
⼀张表 ⼀旦分组 完成后 查询后只能得到组相关的信息。 组相关的信息 统计信息 count,sum,max,min,avg 分组的标准) 在SQLServer中分组时 不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段 不能和普通的字段放在⼀起
13、对数据库进⾏操作
分离数据库 sp_detach_db; 附加数据库 sp_attach_db 后接表明 附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb 'old_name','new_name'
2.sql语句提升
1、复制表(只复制结构,源表名 a 新表名 b) (Access可⽤)
法⼀select*into b from a where1<>1仅⽤于SQlServer
法⼆select top0*into b from a
2、拷贝表(拷贝数据,源表名 a ⽬标表名 b) (Access可⽤)
insert into b(a, b, c)select d,e,f from b;
3、跨数据库之间表的拷贝(具体数据使⽤绝对路径) (Access可⽤)
insert into b(a, b, c)select d,e,f from b in …具体数据库‟where条件
例:..from b in'"&Server.MapPath(".")&"\data.mdb
" &"'where..
4、⼦查询(表名1 a 表名2 b)
select a,b,c from a where a IN(select d from b )
或者: select a,b,c from a where a IN(1,2,3)
5、显⽰⽂章、提交⼈和最后回复时间
select a.title,a.username,b.adddate from table a,
(select max(adddate) adddate from table where tabl
e.title=a.title) b
6、外连接查询(表名1a 表名2b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、在线视图查询(表名1a )
select*from(SELECT a,b,c FROM a) T where t.a >1;
8、between的⽤法,between限制查询数据范围时包括了边界值,not between不包括
select*from table1 where time between time1 and time2
select a,b,c,from table1 where a not between数值1and数值26、
in 的使⽤⽅法
select*from table1 where a [not]in(…值1‟,‟值2‟,‟值4‟,‟值6‟)
10、两张关联表删除主表中已经在副表中没有的信息
delete from table1 where not exists(select*from table2 where table1.field1=table2.field1 )
11、四表联查问题
select*from a left inner join b on a.a=b.b right
inner join c on a.a=c.c inner join d on a.a=d.
12、⽇程安排提前五分钟提醒
SQL: select*from⽇程安排where datediff('minute',f开始时间,getdate())>5
13、⼀条sql 语句搞定数据库分页
select top10 b.*from(select top20主键字段,排序字段from表名order by排序字段desc) a,表名 b where b.
主键字段= a.主键字段order by a.排序字段
具体实现
关于数据库分页
declare@start int,@end int@sql  nvarchar(600)set@sql=‟select top‟+str(@end-@start+1)+‟+from T where rid not in(select top‟+str(@str-1)+‟Rid from T where Rid>-1)‟exec sp_executesql @sql
//在top后不能直接跟⼀个变量所以在实际应⽤中只有这样的进⾏特殊的处理。Rid为⼀个标识列 如果top后还有具体的字段这样做是⾮常有好处的。因为这样可以避免 top的字段如果是逻辑索引的 查询的结果后实际表中的不⼀致逻辑索引中的数据有可能和数据表中的不⼀致 ⽽查询时如果处在索引则⾸先查询索引14、前10条记录
select top10* form table1 where范围
15、选择在每⼀组b值相同的数据中对应的a最⼤的记录的
所有信息(类似这样的⽤法可以⽤于论坛每⽉排⾏榜,每⽉热销产品分析,按科⽬成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a)from tablename tb where tb.b=ta.b)
16、包括所有在 TableA 中但不在 TableB和TableC 中的⾏并消除所有重复⾏⽽派⽣出⼀个结果表
(select a from tableA )except(select a from tableB)except(select a from tableC)
17、随机取出10条数据
select top10*from tablename order by newid()
18、随机选择记录
select newid()
19、删除重复记录
1
delete from tablename where id not in(select max(id)from tablename group by col1,col2,...)
2
select distinct*into temp from tablename delete from tablename  insert into tablename select*from temp
\
//这种操作牵连⼤量的数据的移动这种做法不适合⼤容量
3
//例如在⼀个外部表中导⼊数据由于某些原因第⼀次只导⼊了⼀部分但很难判断具体位置这样只有在下⼀次全部导⼊这样也就产⽣好多重复的字段怎样删除重复字段
alter table tablename
//添加⼀个⾃增列
add  column_b int identity(1,1)delete from tablename where column_b not in(select max(column_b)from tablename group by column1,column2,...)alter table tablename drop column column_b
20、列出数据库⾥所有的表名
select name from sysobjects where type='U'// U代表⽤户
21、列出表⾥的所有的列名
select name from syscolumns where id=object_id('TableName')
22、列⽰type、vender、pcs字段以type字段排列case可以⽅便地实现多重选择类似select 中的case。
select type,sum(case vender when'A'then pcs else0end),sum(case vender when'C'then pcs else0end),sum(case vender when'B'then pcs else0end )FROM tablename group by type
显⽰结果
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2光盘 A 2
⼿机 B 3
⼿机 C 3
23、初始化表table1
TRUNCATE TABLE table1
24、选择从10到15的记录
select top5*from(select top15*from table order by id asc) table_别名order by id desc
#三、技巧
1
//1、1=1 1=2的使⽤在SQL语句组合时⽤的较多 “where 1=1” 是表⽰选择全部    “where 1=2”全部不选
//如:
if@strWhere!=''begin set@strSQL='select count(*) as Total from ['+@tblName+'] where '+@strWhere
end
else
begin set@strSQL='select count(*) as Total from ['+@tblName+']'
end
/
/我们可以直接写成
set@strSQL='select count(*) as Total from ['+@tblName+'] where 1=1 '+@strWhere
2、收缩数据库 重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
收缩数据和⽇志
DBCC SHRINKDB
DBCC SHRINKFILE

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。