end
SQL 语句大全
一、基础
1 说明:创建数据库
Creat DATABASE database-nam
2 说明:删除数据库
drop databas dbname
3 说明:备份 sql server
--- 创立 备份数据的 devic
USE master
'testBack',EXEC sp_addumpdevic 'disk'. 'c:/mssql7backup/MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pub TO testBack
4 说明:创建新表
col2 type2 [not null],creat tabl tabnam col1 type1 [not null] [primari key]...
根据已有的表创建新表:
A creat tabl tab_new like tab_old 使用旧表创建新表 )
col2 from tab_old definit onli B creat tabl tab_new as select col1.
5 说明:删除新表
drop tabl tabnam
6 说明:增加一个列
Alter tabl tabnam add column col type
唯一能改变的增加 varchar 类型的长度。 注:列增加后将不能删除。 DB2 中列加上后数据类型也不能改变。
7 说明:添加主键: Alter tabl tabnam add primari kei col
说明:删除主键: Alter tabl tabnam drop primari kei col
8 说明:创建索引: creat [unique] index idxnam on tabnam col .
删除索引: drop index idxnam
注:索引是不可更改的想更改必需删除重新建。
9 说明:创建视图: creat view viewnam as select statement
删除视图: drop view viewnam
10 说明:几个简单的基本的 sql 语句
选择: select * from table1 where 范围
field2 valu value1, 拔出: insert into table1 field1.value2
删除: delet from table1 where 范围
更新: updat table1 set field1=value1 where 范围
查资料 ! 查找: select * from table1 where field1 like %value1% ---like 语法很精妙。
field2 [desc] 排序: select * from table1 order by field1.
总数: select count as totalcount from table1
求和: select sum field1 as sumvalu from table1
平均: select avg field1 as avgvalu from table1
最大: select max field1 as maxvalu from table1
最小: select min field1 as minvalu from table1
11 说明:几个高级查询运算词
A UNION 运算符
派生表的每一行不是来自 TABLE1 就是来自 TABLE2 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2 并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL 不消除重复行。两种情况下。
B EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 EXCEPT ALL 不消除重复行。
C INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 INTERSECT ALL 不消除重复行。
注:使用运算词的几个查询结果行必须是一致的
12 说明:使用外连接
A left outer join
也包括左连接表的所有行。 左外连接(左连接)结果集几包括连接表的匹配行。
a.b,SQL: select a.a. 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 outer join
还包括两个连接表中的所有记录。 全外连接:不只包括符号连接表的匹配行。
二、提升
源表名: a 新表名: b Access 可用 ) 1 说明:复制表 ( 只复制结构 .
法一: select * into b from a where 1<>1
法二: select top 0 * into b from a
源表名: a 目标表名: b Access 可用 ) 2 说明:拷贝表 ( 拷贝数据 .
b,insert into b a. c select d,e,f from b;
3 说明:跨数据库之间表的拷贝 ( 具体数据使用绝对路径 ) Access 可用 )
b,insert into b a. c select d,e,f from b in 具体数据库 ’ where 条件
例子: ..from b in '"&Server.MapPath "."&"/data.mdb" &"' where..
4 说明:子查询 ( 表名 1 a 表名 2 b
b,select a.c from a where a IN select d from b 或者 : b,c from a where a IN 1,2,3
5 说明:显示文章、提交人和最后回复时间
a.username,select a.title.b.addd from tabl a, select max adddat adddat from tabl where table.title=a.titl b
6 说明:外连接查询 ( 表名 1 a 表名 2 b
a.b,select a.a. a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7 说明:线视图查询 ( 表名 1 a
b,select * from Select a.c FROM a T where t.a > 1;
between 限制查询数据范围时包括了边境值 ,8 说明: between 用法 .not between 不包括
select * from table1 where time between time1 and time2
b,select a.c, from table1 where a not between 数值 1 and 数值 2
9 说明: in 使用方法
值 2 ,select * from table1 where a [not] in 值 1 . 值 4 , 值 6
删除主表中已经在副表中没有的信息 10 说明:两张关联表。
delet from table1 where not exist 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.d where .....
12 说明:日程安排提前五分钟提醒
f 开始时间 ,SQL: select * from 日程布置 where datediff 'minute'.getdat >5
13 说明:一条 sql 语句搞定数据库分页
排序字段 from 表名 order by 排序字段 desc a,select top 10 b.* from select top 20 主键字段 . 表名 b where b. 主键字段 = a. 主键字段 order by a. 排序字段
14 说明:前 10 条记录
select top 10 * form table1 where 范围
每月热销产品分析 ,15 说明:选择在每一组 b 值相同的数据中对应的 a 最大的记录的所有信息 ( 类似这样的用法可以用于论坛每月排行榜 . 按科目效果排名 , 等等 .
b,select a.c from tablenam ta where a= select max a from tablenam 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 top 10 * from tablenam order by newid
18 说明:随机选择记录
select newid
19 说明:删除重复记录
col2,Delet from tablenam where id not in select max id from tablenam group by col1....
20 说明:列出数据库里所有的表名
select name from sysobject where type='U'
21 说明:列出表里的所有的
select name from syscolumn where id=object_id 'TableName'
以 type 字段排列,22 说明:列示 type vender pc 字段。 case 可以方便地实现多重选择,类似 select 中的 case
sum case vender when 'A' then pc els 0 end ,select type.sum case vender when 'C' then pc els 0 end ,sum case vender when 'B' then pc els 0 end FROM tablenam group by type
显示结果:
type vender pc
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23 说明:初始化表 table1
PUNCATE TABLE table1
24 说明:选择从 10 15 记录
select top 5 * from select top 15 * from tabl order by id asc table_ 别名 order by id desc
三、技巧
SQL 语句组合时用的较多 1 1=1 1=2 使用。
where 1=1 表示选择全部 where 1=2 全部不选。
如:
if @strWhere !='
begin
set @strSQL = 'select count * as Total from [' + @tblName + '] where ' + @strWhere
end
els
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
3 压缩数据库
dbcc shrinkdatabas dbname
4 转移数据库给新用户以已存在用户权限
'newname',exec sp_change_users_login 'update_one'.'oldname'
go
5 检查备份集
RESTORE VERIFYONLY from disk='E:/dvbbs.bak'
6 修复数据库
Alter DATABASE [dvbbs] SET SINGLE_USER
GO
repair_allow_data_loss WITH TABLOCK DBCC CHECKDB 'dvbbs'.
GO
Alter DATABASE [dvbbs] SET MULTI_USER
GO
7 日志清除
SET NOCOUNT ON
DECLARE @LogicalFileNam sysname.
@MaxMinut INT.
@NewSiz INT
USE tablenam -- 要操作的数据库名
-- 日志文件名 Select @LogicalFileNam = 'tablename_log'.
-- Limit on time allow to wrap log. @MaxMinut = 10.
@NewSiz = 1 -- 想设定的日志文件的大小 ( M
-- Setup / initi
DECLARE @OriginalS int
Select @OriginalS = size
FROM sysfil
Where name = @LogicalFileNam
Select 'Origin Size of ' + db_name + ' LOG is ' +
@OriginalS + ' 8K page or ' + CONVERT VARCHAR 30 .
@OriginalSize*8/1024 + 'MB' CONVERT VARCHAR 30 .
FROM sysfil
Where name = @LogicalFileNam
Creat TABLE DummyTran
DummyColumn char 8000 not null
DECLARE @Counter INT.
@StartTim DATETIME.
@TruncLog VARCHAR 255
Select @StartTim = GETDATE .
@TruncLog = 'BACKUP LOG ' + db_name + ' WITH PUNCATE_ONLY'
@NewSiz DBCC SHRINKFILE @LogicalFileName.
EXEC @TruncLog
-- Wrap the log if necessary.
@StartTime,WHILE @MaxMinut > DATEDIFF mi. GETDATE -- time ha not expir
AND @OriginalS = Select size FROM sysfil Where name = @LogicalFileNam
AND @OriginalS * 8 /1024 > @NewSiz
BEGIN -- Outer loop.
Select @Counter = 0
WHILE @Counter < @OriginalS / 16 AND @Counter < 50000
BEGIN -- updat
Insert DummyTran VALUES 'Fill Log'
Delet DummyTran
Select @Counter = @Counter + 1
END
EXEC @TruncLog
END
Select 'Final Size of ' + db_name + ' LOG is ' +
size + ' 8K page or ' + CONVERT VARCHAR 30 .
size*8/1024 + 'MB' CONVERT VARCHAR 30 .
FROM sysfil
Where name = @LogicalFileNam
Drop TABLE DummyTran
SET NOCOUNT OFF
8 说明:更改某个表
'dbo' exec sp_changeobjectown 'tablename'.
9 存储更改全部表
Creat PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR 128 .
@NewOwner as NVARCHAR 128
AS
DECLARE @Name as NVARCHAR 128
DECLARE @Owner as NVARCHAR 128
DECLARE @OwnerNam as NVARCHAR 128
DECLARE curObject CURSOR FOR
select 'Name' = name.
'Owner' = user_nam uid
from sysobject
where user_nam uid =@OldOwner
order by name
OPEN curObject
@Owner FETCH NEXT FROM curObject INTO @Name.
WHILE @@FETCH_STATUS=0
BEGIN
if @Owner=@OldOwner
begin
set @OwnerNam = @OldOwner + '.' + rtrim @Name
@NewOwner exec sp_changeobjectown @OwnerName.
end
@NewOwner,-- select @name.@OldOwn
@Owner FETCH NEXT FROM curObject INTO @Name.
END
close curObject
dealloc curObject
GO
10 SQL SERVER 中直接循环写入数据
declar @i int
set @i=1
while @i<30
begin
insert into test userid valu @i
set @i=@i+1