一、基础

1、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创建备份数据的device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dak'
--- 开始备份
BACKUP DATABASE pubs TO testBack
*bak文件在SQLServer 中只需要还原即可;挺好用的。

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、几个高级查询运算词

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 ALL),不消除重复行。注:使用运算词的几个查询结果行必须是一致的。

11、连接

实例
==========================
a表                      b表
name sex              name age
张三 男                李四 30
李四 女                王五 23
==========================
交叉链接:
张三 男 李四 30
李四 女 王五 23
张三 男 王五 23
李四 女 李四 30左联结:
selece * from a left join b on a.name=b.name
张三 男  null null
李四 女  李四 30 内链接  selece * from a inner  join b on a.name=b.name
李四 女  李四 30 外链接 select *  from   a full outer join  b on a.name=b.name
张三 男 NULL NULL
李四 女 李四 30
NULL NULL 王五 23

12、对数据库进行操作:

分离数据库: sp_detach_db;  附加数据库:sp_attach_db 后接表名,附加需要完整的路径名如何修改数据库的名称:sp_renamedb 'old_name', 'new_name'

13、CTE 用法

二、技巧  

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、说明:子查询(表名:a 表名: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)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
5、说明:一条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的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
6、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
7、说明:随机取出条数据
select top 10 * from tablename order by newid()
8、说明:删除重复记录1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)2),select distinct * into temp from tablenamedelete from tablenameinsert 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
9、说明:列出数据库里所有的表名
select name from sysobjects where type='U' // U代表用户
10、说明:列出表里的所有的列名
select name from syscolumns where id=object_id('TableName')
11、说明:选择从到的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、高级

1、1=1,1=2的使用,在SQL语句组合时用的较多
“where 1=1” 是表示选择全部    “where 1=2”全部不选。
2、收缩数据库
--重建索引
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
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
ALTER DATABASE [dvbbs] SET MULTI_USER
7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,@MaxMinutes INT,@NewSize INT
USE tablename -- 要操作的数据库名
SELECT  @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.@NewSize = 1  -- 你想设定的日志文件的大小(M)Setup / initializeDECLARE @OriginalSize intSELECT @OriginalSize = size FROM sysfilesWHERE name = @LogicalFileNameSELECT 'Original Size of ' + db_name() + ' LOG is ' + CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'FROM sysfilesWHERE name = @LogicalFileNameCREATE TABLE DummyTrans(DummyColumn char (8000) not null)DECLARE @Counter    INT,@StartTime DATETIME,@TruncLog   VARCHAR(255)SELECT @StartTime = GETDATE(),@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'DBCC SHRINKFILE (@LogicalFileName, @NewSize)EXEC (@TruncLog)-- Wrap the log if necessary.WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expiredAND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  AND (@OriginalSize * 8 /1024) > @NewSize  BEGIN -- Outer loop.SELECT @Counter = 0WHILE   ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))BEGIN -- updateINSERT DummyTrans VALUES ('Fill Log') DELETE DummyTransSELECT @Counter = @Counter + 1ENDEXEC (@TruncLog)  ENDSELECT 'Final Size of ' + db_name() + ' LOG is ' +CONVERT(VARCHAR(30),size) + ' 8K pages or ' + CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'FROM sysfiles WHERE name = @LogicalFileNameDROP TABLE DummyTransSET NOCOUNT OFF
8、说明:更改某个表
exec sp_changeobjectowner 'tablename','dbo'

  

转载于:https://www.cnblogs.com/java-oracle/p/5382207.html

Sql Server专题三:SQL操作与技巧相关推荐

  1. sql crud_使用适用于SQL Server的Python SQL库执行CRUD操作

    sql crud This article covers how to connect a Python application to Microsoft SQL Server using a 3rd ...

  2. SQL Server管理相关的注册表技巧

    SQL Server管理相关的注册表技巧 2010-10-20 17:14 佚名 SQL Server的管理和Windows的管理是息息相关的,通过Windows的注册表可以让SQL Server管理 ...

  3. 适用于SQL Server生产环境DBA的七大技巧

    摘自:http://database.ctocio.com.cn/452/8976452.shtml 1.使用forfiles命令删除陈旧的数据库备份文件 从Windows Server 2003开始 ...

  4. 在SQL Server中使用SQL Coalesce函数

    This article explores the string manipulation using SQL Coalesce function in SQL Server. 本文探讨了在SQL S ...

  5. SQL server 常见的SQL语句总结(最全的)

    ---------------------------------日常学习笔记记录--------------------------------- 总结了大量的SQL语句,没有你不会的,只有你不知道 ...

  6. SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引 @邀月

    邀月 的数据库学习 http://www.cnblogs.com/downmoon/archive/2011/03/10/1980172.html SQL Server 2008中SQL应用系列及BI ...

  7. SQL Server 127个SQL server热门资料汇总

    SQL Server 127个SQL server热门资料汇总 最近有许多关于如何学习SQLSERVER的问题,其实新手入门的资源和贴子很多,现在向大家隆重推荐经过精心整理的[SQLServer]12 ...

  8. 【转】在SQL Server中通过SQL语句实现分页查询

    在SQL Server中通过SQL语句实现分页查询 2008年01月06日 星期日 12:28 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY ...

  9. SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)

    SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MS ...

  10. 推荐优秀的SQL脚本调试工具Embarcadero DBArtisan 可以调试SQL Server 2000/2005 SQL调试工具汇总...

    调试SQL语句是经常会碰到的需求,常常为了查找报表的数据是否正确,SQL脚本为什么取不到预想中的数据,一般都可以通过调试SQL语句来解决问题,找到原因.问题不一定是系统的Bug,可能是设置不正确,可能 ...

最新文章

  1. linux内核用什么调试,什么是开发/调试Linux内核最有效和最优雅的方式
  2. hdu2.1.1 最小公倍数
  3. 程序员如何更快的工作之 SQL Server
  4. Android 让图片等比例缩放的三种方法
  5. shell 脚本编写 if else then
  6. 如何解决SVN 清理失败
  7. ftp 根据特定正则匹配文件名 下载到本地 并且上传文件到ftp java *** 最爱那水货...
  8. 地图分幅组件的实现(一) ——图号和经纬度转换组件
  9. Android UI设计中一些不错的示例及第三方控件
  10. Overleaf 中文硕博论文LaTex模板
  11. python 菜鸟教程 xml-【读书】Django教程(菜鸟教程)
  12. Linux登录公开ftp命令,linux下登录ftp, lftp命令详解
  13. Word章节自动编号+公式编号
  14. 实验三-RIPv2基本配置实验
  15. Talk预告 | 上海交通大学计算机系博士生李杰锋方浩树:多人场景,全身136关键点检测与跟踪框架AlphaPose技术讲解
  16. 华为帐号登录游戏显示无法连接服务器,玩手机游戏提示无法连接服务器
  17. Kali使用Metasploit内、外网渗透windows系统
  18. Windows 10 最新版壁纸下载
  19. 单周期CPU设计【Verilog】
  20. 连接数据库SSL警告: Establishing SSL connection without server’s identity verification is not recommended.

热门文章

  1. 红米note3总显示无服务器,红米note3死机了怎么办 具体解决措施【图文】
  2. matlab读取hpf文件,chpf
  3. 随便举个例子,说明单线程比多线程编程提高性能
  4. classic shell_使用Classic Shell将Windows 7开始菜单带到Windows 10
  5. matlab ols regress,计量经济学简单线性回归OLS的Matlab程序.pdf
  6. vault安装及springboot,springcloud整合vault
  7. 《第三节》解读Logback的配置文件
  8. 基于Amos路径分析的模型修正与调整
  9. Python爬虫--- 1.5 爬虫实践: 获取百度贴吧内容
  10. 阿里云视频点播一站式解决解决方案怎么样?