常⽤的SQL语句⼤全总结
经典SQL语句⼤全(绝对的经典)
⼀、基础篇
1、创建数据库
语法:
create database database-namek
2、说明:删除数据库
drop database dbname
3、备份sql server
—创建备份数据的 device
USE master
EXEC sp_addumpdevice 'disk','testBack',
'c:\mssql7backup\MyNwind_1.dat'
— 开始备份
backup database pubs to testBack
4、创建新表
create table tabname(col1 type1 [not null][primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使⽤旧表创建新表)
B:create table tab_new as select col1,col2… from tab_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 tabname(col….)
删除索引:
drop index idxname
== 注:索引是不可更改的,想更改必须删除重新建。==
9、创建视图
语法:
create view viewname as select statement
删除视图:
drop view viewname
10、⼏个简单的基本的sql语句
选择:select * from table1 where 范围
插⼊:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查:select * from table1 where field1 like ’%value1%’ —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 和 TABLE2)并消去表中任何重复⾏⽽派⽣出⼀个结果表。
当 ALL 随 UNION⼀起使⽤时(即 UNION ALL),不消除重复⾏。两种情况下,派⽣表的每⼀⾏不是来⾃ TABLE1 就是来⾃ TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的⾏并消除所有重复⾏⽽派⽣出⼀个结果表。当 ALL 随 EXCEPT ⼀起使⽤时 (EXCEPT ALL),不消除重复⾏。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的⾏并消除所有重复⾏⽽派⽣出⼀个结果表。当 ALL 随 INTERSECT ⼀起使⽤时 (INTERSECT AL L),不消除重复⾏。
注:使⽤运算词的⼏个查询结果⾏必须是⼀致的。
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:
全外连接:不仅包括符号连接表的匹配⾏,还包括两个连接表中的所有记录。
13、分组:Group by:
⼀张表,⼀旦分组完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在⼀起;
14、对数据库进⾏操作:
分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名
15.如何修改数据库的名称
sp_renamedb 'old_name','new_name'
⼆、提⾼篇
1、复制表(只复制结构,源表名:a 新表名:b) (Access可⽤)
⽅法⼀:select * into b from a where 1<>1(仅⽤于SQlServer)
⽅法⼆:select top 0* 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 table.title=a.title) b
6、外连接查询(表名1:a 表名2:b)
sql中delete用法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、在线视图查询(表名1:a )
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数值2
9、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.d where .....
12、⽇程安排提前五分钟提醒
select *from⽇程安排 where datediff('minute',f开始时间,getdate())>5
13、⼀条sql 语句搞定数据库分页
语法:
select top 10 b.*from(select top 20主键字段,排序字段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 top 10* 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 top 10*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 else0 end),
sum(case vender when 'C' then pcs else0 end),
sum(case vender when 'B' then pcs else0 end)
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 top 5*from(select top 15*from table order by id asc) table_别名 order by id desc
三、常识
在SQL查询中:from后最多可以跟多少张表或视图:256
在SQL语句中出现 Order by,查询时,先排序,后取
在SQL中,⼀个字段的最⼤容量是8000,⽽对于nvarchar(4000),由于nvarchar是Unicode码。

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