经典SQL语句大全(绝对的经典)适用SQL Sever

所需积分/C币:16 2017-06-09 14:11:55 653KB PDF

经典SQL语句大全(绝对的经典)适用SQL Sever
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) select aa, ab, ac, b.c, b d, b f from a LEFT oUT join b on a. a=bc 7、说明:在线视图查询(表名1:a) select x from (sELECT a, b, c FRoM a)T where ta>1 8、说明: between的用法, between限制查询数据范围时包括了边界值, not between不包括 sclcct x from tablcl whore time bctwccn timcl and timc 2 select a,b,c, from tablel where a not between数值land数值2 9、说明:in的使用方法 select* from tablel where a not]in(‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from tablel where not exists select ak from table2 where tablel. field1=tabl e2. field1 11、说明:四表联查问题: sclcct x from a left inner join b on aa=bb right inner join c on aa=. c inner jo in d on a. a=d. d where 12、说明:日程安排提前五分钟提醒 sQL: select*rom日程安排 where datediff( minute',f开始时间, get O)>5 、说明:一条语句搞定数据库分页 主键字段排序字段 表名 排序 字段 表名 主键字段主键字段 排序字段 具体实现: 关于数据库分页: declare @start int, @end int @sql nvarchar(600) set@sq1=’ 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 tab) 16、说明:包括所有在Tab1eA中但不在 TableB和 Table中的行并消除所有重复行而派生出 一个结果表 (select a from tableA except (select a from tableB) except (select a from table 17、说明:随机取出10条数据 select top 10 k from tablename order by newido 18、说明:随机选择记录 select newid( 19、说明:删除重复记录 1), delete from tablename where id not in (select max(id) from tablename group by co 2), select distinct *k into temp from tablename dclcto from tablcnamc insert into tablename select from temp 评价:这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作 3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位 置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 al ter 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 columnl, 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( Table Name') 22、说明:列示type、 vender、pcs字段,以type字段排列,case可以方便地实现多重选择, 类似 select中的 case。 select type, sum(case vender when 'A' then pcs else 0 end), sum(case vender when'C then pcs else 0 end), sum(case vender when 'B' then pcs else 0 end)FROM tablename g roup by type 显示结果: type vender pcs 电脑A1 电脑A1 光盐B2 光盘A2 于机B3 手机C3 23、说明:初始化表 table1 TRUNCATE TABLE table1 24、说明:选择从10到15的记录 select top5.from( select top15来 from table order by id asc) table别名 y id desc 三、 1、1=1,1=2的使用,在SQL语句组合时用的较多 “ where1=1”是表示选择全部 “ where1=2”全部不选, If @strWhere = begin set @strSQL select count(*) as Total from[+ @tblName - where +@strWhere else begin set @strSQl = select count(*) as Total from [+ @tblName -'] 我们可以直接写成 错误!未找到目录项。 set@ strSQL=' select count(*) as Total from[’十@tb1Name+’] where1=1安定’+ @ strWhere2、收缩数据库 重建索引 DBCC REINDEX DBCC INDEXDEFRAG 收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE 3、压缩数据库 dbcc shrinkdatabase(dbname 4、转移数据库给新用户以已存在用户权限 exec sp change users login update one, newname, oldname 5、检查备份集 RESTORE VERIFYONLY from disk=E: \dvbbs. bak 6、修复数据库 ALTER dATABASE dvbbs SET SINGLE USER GO DBCC CHECKDB( dvbbs, repair allow data loss)WITH TABLOCK GO ALTER DATABASE [dvbbs SET MULTI USER GO 7、日志清除 SET NOCOUNT ON DECLARE OLogicalfileName sysname @MaxMinutcs INt @NewSize int UsE tablename—要操作的数据库名 SELECT@ LogicalfileName-' tablename log’,-日志文件名 MaxMinutes=10, --Limit on time al lowed to wrap log @Newsize =1 你想设定的凵志文件的大小(M Setup initialize DECLARE OOriginalSize int SELECT @Originalsize= size FROM sySfiles WhERE name @LogicalfileName SELECT' Original size of’+ db name(+’OGis’+ CONVERT (VARCHAR (30), @OriginalSize)+8K pages or '+ CONVERT (VARCHAR (30),(@OriginalSizc*8/1021))+ MB FROM sysfiles WHERE name= @LogicalFileName CREATE TABLE Dummy Trans (Dummy Column char(8000)not null) DECLARE @Counter INT @StartTime dAtetime Tr VARCHAR (255) seLECT @Start Time GETDATE O Trunc Log=’ BACKUP.OG’+ db name()+’ WITH TRUNCATE ONLY DBCC SHRINKFILE (@LogicalFilcNamc, @NcwSizc) eXec (a Trunclog Wrap the log if necessar WHILE @MaxMinutes> DATEDIFF (mi, @StartTime, GETDATE ()--time has not expired AND @OriginalSize=(SELECT size FROM sysfiles WHERE name =@LogicalFileName) and(@OriginalSize *8/1024)>GNew Size BEGIN Outer loop seLeCt @Counter=0 WHIle ((@Countor @OriginalSizc /16) AND(@Counter 50000) BEGIN INSERT Dummy Trans VaLUES Fill Log)DELEtE Dummy Trans seLECt @Counter ( Counter +1 END eXEC(@TruncLog) END SELECT' Final size of’+ db name(+’ LOG is’+ CONVERT (VARCHAR (30), size)+8K pages or CONVERT (VARCHAR (30), (size8/1024))+ MB FROM sysfiles WHERE name= @LogicalFileName DROP TABLE Dummy Trans SET NOCOUⅥTOFF 8、说明:更改某个表 exec sp changcobjcctowncr’ tablcnamc’,dbo 9、存储更改全部表 CREATE PROCEDURE dbo. User Change ObjectOwner Batch @0ldOwner as NVARCHAR(128) @NewOwner as NVARCHAR (128) DECLARE @Name as NVARCHAR(128) DECLARE OWner as NVARCHAR(128) DECLARE @Owner Namc as NVARChAR(128) select Nam, ect CURSOR FOR DECLARE CurB amo user name (uid object where user name(uid)=@01dOwner order by name OPEN curOhject FETCH NEXT FROM curB ject INTo @Name, @Owner WHILE (C@FETCH STATUS=0) BEG f @Owner=@oldOwner begin t @OwnerName =@0ldOwner +rtrim(@Name ccc sp changcobjcctowner @OwncrName, @Ncw Owner select @name, @NewOwner, @0l downer FETCH NEXT FROM curOb ject INTO @Name, @Owner END ec deallocate curB jcct 10、 SQL SERVER中直接循环写入数据 declare @i int set @i=1 while @i30 begin insert into test (userid) values(@i set @ i=@i+1 en 案例 有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎上,使他們剛好及格: Name score Zhangs han 80 Lishi 59 Wangyu 50 Songquan 69 while((select min(score)from tb table)<60 begin update t table set score =scorel. 01 where score(60 f (select min(score) from tb table)>60 break else continue end 敷据开发经翦 按姓氏笔画排序 Select From Table Name Order By CustomerName Collate Chinese PRC Stroke ci as //M 少到多 2.数据库加密: select encrypt(原始密码”) select pwdencrypt(原始密码”) select pwdcompare('原始密码’,’加密后窣码’)=1--相同:否则不相同 encrypt(原始密码’) select pwdencrypt(’原始密码’) select pwdcomparc(原始密码’,’加密后密码)=1-相同:否则不相同 3.取回表中字段: declare @list varchar(1000) @sql nvarchar(1000) select @list-@list+, -b name from sysobjects a, syscolumns b where a. id-b id and a name=’表A set @sql=' select '+right(@list, len(@list)-1)+ from* A ccc (@sql) 4.查看硬盘分区 EXEC master. xp fixeddrives 5比较A,B表是否相等 f (select checksum agg(binary check sum(*)) from A (select checksum agg(binary checksum(*) from B) print’相等 else print’不相等 6杀掉所有的事件探察器进程 DECLARE hcforeach CURSOR GLOBAL FOR SELECT kill+RTRIM(spid) FROM master dbo. sysp rocesses WherE program name IN( SQL profiler',NSQL事件探查器’) EXEC sp ms foreach worker? 记录搜索 开头到条记录 表 到条记录要有主索引 Select Top M-N*From表 表 到结尾记录 表 案例 例如1:一张表有一万多条记录,表的第一个字段 Recld是自增长字段,写一个SQL语句,找 出表的第31到第40个记录。 select top 10 recid from A where recid not in(select top 30 recid from A) 分析:如果这样写会产生某些问题,如果 recid在表中存在逻辑索引 select top10 recid from a where……是从索引中查找,而后面的 select top30 recid from A则在数据表中查找,这样由于索引中的顺序有可能和数据表中的不一致,这样就导致查询到的 不是本来的欲得到的数据。 解决方案 ,用 order by select top30 recid from A order by ricid如果该字段不是自增 长,就会出现问题 在那个子查询中也加条件 例:查询表中的最后以条记录,并不知道这个表共有多少数据以及表结构 9:获取当前数据库中的所有用户表 select Name from sysobjects where xtype=u and status>=0 0:获取某一个表的所有字段 select name from syscolumns where id= object id('表名’) select name from syscolumns where id in (select id from sysobjects where type =u and name=’表名’) 两种方式的效果相同 11:查看与某一个表相关的视图、存储过程、函数 sclcct a from sysobjccts a, syscomments b whore a id= b id and b text like%=e 名% 12:查看当前数据库中所有存储过程 select name as存储过程名称 from sysobjects where xtype=P 13:查询用户创建的所有数据库 select from master. sysdatabases d where sid not in (select sid from master. syslogins wher e name- sa 或者 select dbid, name As dB name from master,, svsdatabases where sid 0x01 14:查询某一个表的字段和数据类型 select column name, data type from information schema. columns where table name=’表名 15:不同服务器数据库之间的数据操作 一创建链接服务器 exec sp addlinkedserver'ITS’,’’,’ SQLOLEDB’,’远程服务器名或i地址 exec sp addlinkedsrv login'ITSv’,’ false',nu1l,用户名',’密码’ 一查询小例 select* from Tsv.数据库名.dbo.表名

...展开详情
试读 16P 经典SQL语句大全(绝对的经典)适用SQL Sever

评论 下载该资源后可以进行评论 2

ai1156250555 很不错,挺有用的。比较全。
2018-09-19
回复
qwertycgf 不错的资料的
2017-08-17
回复
img

关注 私信 TA的资源

上传资源赚积分,得勋章
    最新推荐
    经典SQL语句大全(绝对的经典)适用SQL Sever 16积分/C币 立即下载
    1/16
    经典SQL语句大全(绝对的经典)适用SQL Sever第1页
    经典SQL语句大全(绝对的经典)适用SQL Sever第2页
    经典SQL语句大全(绝对的经典)适用SQL Sever第3页
    经典SQL语句大全(绝对的经典)适用SQL Sever第4页
    经典SQL语句大全(绝对的经典)适用SQL Sever第5页

    试读已结束,剩余11页未读...

    16积分/C币 立即下载 >