完整版经典SQL语句大全.docx
- 文档编号:30346741
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:15
- 大小:23.81KB
完整版经典SQL语句大全.docx
《完整版经典SQL语句大全.docx》由会员分享,可在线阅读,更多相关《完整版经典SQL语句大全.docx(15页珍藏版)》请在冰豆网上搜索。
完整版经典SQL语句大全
(完整版)经典SQL语句大全
一、基础
1、说明:
创建数据库
CRETEDTBSEdtbse-nme
2、说明:
删除数据库
dropdtbsedbnme
3、说明:
备份sqlserver
---创建备份数据的device
USEmster
EXECsp_ddumpdevice'disk','testBck','c:
\mssql7bckup\MyNwind_1.dt'
---开始备份
BCKUPDTBSEpubsTOtestBck
4、说明:
创建新表
cretetbletbnme(col1type1[notnull][primrykey],col2type2[notnull],..)
5、说明:
删除新表
droptbletbnme
6、说明:
增加一个列
ltertbletbnmeddcolumncoltype
注:
列增加后将不能删除。
DB2中列加上后数据类型也不能改变,唯一能改变的是增加vrchr类型的长度。
7、说明:
添加主键:
ltertbletbnmeddprimrykey(col)
说明:
删除主键:
ltertbletbnmedropprimrykey(col)
8、说明:
创建索引:
crete[unique]indexidxnmeontbnme(col….)删除索引:
dropindexidxnme
注:
索引是不可更改的,想更改必须删除重新建。
9、说明:
创建视图:
creteviewviewnmesselectsttement
删除视图:
dropviewviewnme
10、说明:
几个简单的基本的sql语句
选择:
select*fromtble1where范围
插入:
insertintotble1(field1,field2)vlues(vlue1,vlue2)
删除:
deletefromtble1where范围
更新:
updtetble1setfield1=vlue1where范围
查找:
select*fromtble1wherefield1like’%vlue1%’---like的语法很精妙,查资料!
排序:
select*fromtble1orderbyfield1,field2[desc]
总数:
selectcountstotlcountfromtble1
求和:
selectsum(field1)ssumvluefromtble1
平均:
selectvg(field1)svgvluefromtble1
最大:
selectmx(field1)smxvluefromtble1
最小:
selectmin(field1)sminvluefromtble1
11、说明:
几个高级查询运算词
:
UNION运算符
UNION运算符通过组合其他两个结果表(例如TBLE1和TBLE2)并消去表中任何重复行而派生出一个结果表。
当LL随UNION一起使用时(即UNIONLL),不消除重复行。
两种情况下,派生表的每一行不是来自TBLE1就是来自TBLE2。
B:
EXCEPT运算符
EXCEPT运算符通过包括所有在TBLE1中但不在TBLE2中的行并消除所有重复行而派生出一个结果表。
当LL随EXCEPT一起使用时(EXCEPTLL),不消除重复行。
C:
INTERSECT运算符
INTERSECT运算符通过只包括TBLE1和TBLE2中都有的行并消除所有重复行而派生出一个结果表。
当LL随INTERSECT一起使用时(INTERSECTLL),不消除重复行。
注:
使用运算词的几个查询结果行必须是一致的。
12、说明:
使用外连接
、left(outer)join:
左外连接(左连接):
结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL:
select.,.b,.c,b.c,b.d,b.ffromLEFTOUTJOINbON.
=b.c
B:
right(outer)join:
右外连接(右连接):
结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:
full/cross(outer)join:
全外连接:
不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:
Groupby:
一张表,一旦分组完成后,查询后只能得到组相关的信息。
组相关的信息:
(统计信息)count,sum,mx,min,vg分组的标准)
在SQLServer中分组时:
不能以text,ntext,imge类型的字段作为分组依据
在selecte统计函数中的字段,不能和一般的字段放在一起;
13、对数据库进行操作:
分离数据库:
sp_detch_db;附加数据库:
sp_ttch_db后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renmedb'old_nme','new_nme'
二、提升
1、说明:
复制表(只复制结构,源表名:
新表名:
b)(ccess可用)
法一:
select*intobfromwhere11(仅用于SQlServer)
法二:
selecttop0*intobfrom
2、说明:
拷贝表(拷贝数据,源表名:
目标表名:
b)(ccess可用)
insertintob(,b,c)selectd,e,ffromb;
3、说明:
跨数据库之间表的拷贝(具体数据使用绝对路径)(ccess可用)insertintob(,b,c)selectd,e,ffrombin‘具体数据库’where条件
例子:
..frombin'"
8、说明:
between的用法,between限制查询数据范围时包括了边界值,notbetween不包括
select*fromtble1wheretimebetweentime1ndtime2
select,b,c,fromtble1wherenotbetween数值1nd数值2
9、说明:
in的使用方法
select*fromtble1where[not]in(‘值1’,’值2’,’值4’,’值6’)
10、说明:
两张关联表,删除主表中已经在副表中没有的信息
deletefromtble1wherenotexists(select*fromtble2wheretble1.field1=tble2.field1)
11、说明:
四表联查问题:
select*fromleftinnerjoinbon.=b.brightinnerjoincon.=c.cinnerjoindon.=d.dwhere.....
12、说明:
日程安排提前五分钟提醒
SQL:
select*from日程安排wheredtediff('minute',f开始时间,getdte())>5
13、说明:
一条sql语句搞定数据库分页
selecttop10b.*from(selecttop20主键字段,排序字段from表名orderby排序字段desc),表名bwhereb.主键字段=.主键字段orderby.排序字段
具体实现:
关于数据库分页:
declre@strtint,@endint
@sqlnvrchr(600)
set@sql=’selecttop’+str(@end-@strt+1)+’+fromTwhereridnotin(selecttop’+str(@str-1)+’RidfromTwhereRid>-1)’
execsp_executesql@sql
注意:
在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特别的处理。
Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。
因为这样可以幸免top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
14、说明:
前10条记录
selecttop10*formtble1where范围
15、说明:
选择在每一组b值相同的数据中对应的最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,
等等.)
select,b,cfromtblenmetwhere=(selectmx()fromtblenmetbwheretb.b=t.b)
16、说明:
包括所有在Tble中但不在TbleB和TbleC中的行并消除所有重复行而派生出一个结果表
(selectfromtble)except(selectfromtbleB)except(selectfromtbleC)
17、说明:
随机取出10条数据
selecttop10*fromtblenmeorderbynewid()
18、说明:
随机选择记录
selectnewid()
19、说明:
删除重复记录
1),deletefromtblenmewhereidnotin(selectmx(id)fromtblenmegroupbycol1,col2,...)
2),selectdistinct*intotempfromtblenme
deletefromtblenme
insertintotblenmeselect*fromtemp
评价:
这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作3),例如:
在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但
很难推断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段
ltertbletblenme
--添加一个自增列
ddcolumn_bintidentity(1,1)
deletefromtblenmewherecolumn_bnotin(
selectmx(column_b)fromtblenmegroupbycolumn1,column2,...)ltertbletblenmedropcolumncolumn_b
20、说明:
列出数据库里所有的表名
selectnmefromsysobjectswheretype='U'//U代表用户
21、说明:
列出表里的所有的列名
selectnmefromsyscolumnswhereid=object_id('TbleNme')
22、说明:
列示type、vender、pcs字段,以type字段排列,cse可以方便地实现多重选择,类似select中的cse。
selecttype,sum(csevenderwhen''thenpcselse0end),sum(csevenderwhen'C'thenpcselse0end),sum(csevenderwhen'B'thenpcselse0end)FROMtblenmegroupbytype
显示结果:
typevenderpcs
电脑1
电脑1
光盘B2
光盘2
XXB3
XXC3
23、说明:
初始化表tble1
TRUNCTETBLEtble1
24、说明:
选择从10到15的记录
selecttop5*from(selecttop15*fromtbleorderbyidsc)tble_别名orderbyiddesc
三、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
“where1=1”是表示选择全部“where1=2”全部不选,
如:
if@strWhere!
=''
begin
set@strSQL='selectcount(*)sTotlfrom['+@tblNme+']where'+@strWhere
end
else
begin
set@strSQL='selectcount(*)sTotlfrom['+@tblNme+']'end
我们可以直接写成
错误!
未找到目录项。
set@strSQL='selectcount(*)sTotlfrom['+@tblNme+']where1=1安定'+@strWhere2、收缩数据库
--重建索引
DBCCDBREINDEX("HumnResources.Employee",PK_Employee_EmployeeID,80);DBCCINDEXDEFRG
--收缩数据和日志
DBCCSHRINKDB
DBCCSHRINKFILE
3、压缩数据库
dbccshrinkdtbse(dbnme)
4、转移数据库给新用户以已存在用户权限
execsp_chnge_users_login'updte_one','newnme','oldnme'
go
5、检查备份集
RESTOREVERIFYONLYfromdisk='E:
\dvbbs.bk'
6、修复数据库
LTERDTBSE[dvbbs]SETSINGLE_USER
GO
DBCCCHECKDB('dvbbs',repir_llow_dt_loss)WITHTBLOCK
GO
LTERDTBSE[dvbbs]SETMULTI_USER
GO
7、日志清除
SETNOCOUNTON
DECLRE@LogiclFileNmesysnme,
@MxMinutesINT,
@NewSizeINT
USEtblenme--要操作的数据库名
SELECT@LogiclFileNme='tblenme_log',--日志文件名
@MxMinutes=10,--Limitontimellowedtowrplog.
@NewSize=1--你想设定的日志文件的大小(M)
Setup/initilize
DECLRE@OriginlSizeint
SELECT@OriginlSize=size
FROMsysfiles
WHEREnme=@LogiclFileNme
SELECT'OriginlSizeof'+db_nme()+'LOGis'+
CONVERT(VRCHR(30),@OriginlSize)+'8Kpgesor'+
CONVERT(VRCHR(30),(@OriginlSize*8/1024))+'MB'
FROMsysfiles
WHEREnme=@LogiclFileNme
CRETETBLEDummyTrns
(DummyColumnchr(8000)notnull)
DECLRE@CounterINT,
@StrtTimeDTETIME,
@TruncLogVRCHR(255)
SELECT@StrtTime=GETDTE(),
@TruncLog='BCKUPLOG'+db_nme()+'WITHTRUNCTE_ONLY'
DBCCSHRINKFILE(@LogiclFileNme,@NewSize)
EXEC(@TruncLog)
--Wrpthelogifnecessry.
WHILE@MxMinutes>DTEDIFF(mi,@StrtTime,GETDTE())--timehsnotexpired
ND@OriginlSize=(SELECTsizeFROMsysfilesWHEREnme=@LogiclFileNme)
ND(@OriginlSize*8/1024)>@NewSize
BEGIN--Outerloop.
SELECT@Counter=0
WHILE((@Counter-1
例2:
查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。
set@s='selecttop1*fromTwherepidnotin(selecttop'+str(@count-1)+'pidfromT)'
print@sexecsp_executesql@s
9:
猎取当前数据库中的所有用户表
selectNmefromsysobjectswherextype='u'ndsttus>=0
10:
猎取某一个表的所有字段
selectnmefromsyscolumnswhereid=object_id('表名')
selectnmefromsyscolumnswhereidin(selectidfromsysobjectswheretype='u'ndnme='表名')
两种方式的效果相同
11:
查看与某一个表相关的视图、存储过程、函数
select.*fromsysobjects,syscommentsbwhere.id=b.idndb.textlike'%表名%'
12:
查看当前数据库中所有存储过程
selectnmes存储过程名称fromsysobjectswherextype='P'
13:
查询用户创建的所有数据库
select*frommster..sysdtbsesDwheresidnotin(selectsidfrommster..sysloginswherenme='s')
或者
selectdbid,nmeSDB_NMEfrommster..sysdtbseswheresid0x01
14:
查询某一个表的字段和数据类型
selectcolumn_nme,dt_typefrominformtion_schem.columns
wheretble_nme='表名'
15:
不同服务器数据库之间的数据操作
--创建链接服务器
execsp_ddlinkedserver'ITSV','','SQLOLEDB','远程服务器名或ip地址'
execsp_ddlinkedsrvlogin'ITSV','flse',null,'用户名','密码'
--查询示例
select*fromITSV.数据库名.dbo.表名
--导入示例
select*into表fromITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
execsp_dropserver'ITSV','droplogins'
--连接远程/局域XX数据(openrowset/openquery/opendtsource)
--1、openrowset
--查询示例
select*fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
--生成本地表
select*into表fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
--把本地表导入远程表
insertopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
select*from本地表
--更新本地表
updteb
setb.列=.列
fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)sinnerjoin本地表b
on.column1=b.column1
--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
execsp_ddlinkedserver'ITSV','','SQLOLEDB','远程服务器名或ip地址'
--查询
select*
FROMopenquery(ITSV,'SELECT*FROM数据库.dbo.表名')
--把本地表导入远程表
insertopenquery(ITSV,'SELECT*FROM数据库.dbo.表名')
select*from本地表
--更新本地表
updteb
setb.列B=.列B
FROMopenquery(ITSV,'SELECT*FROM数据库.dbo.表名')s
innerjoin本地表bon.列=b.列
--3、opendtsource/openrowset
SELECT*
FROMopendtsource('SQLOLEDB','DtSource=ip/ServerNme;UserID=登陆名;Pssword=密码').test.dbo.roy_t
--把本地表导入远程表
insertopendtsource('SQLOLEDB','DtSource=ip/ServerNme;UserID=登陆名;Pssword=密码').数据库.dbo.表名
select*from本地表
SQLS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 经典 SQL 语句 大全