1、SQL语句大全数据库管理系统,database management system,简称dbms数据定义语言DDL(Data Definition Language)数据操作语言DML(Data Manipulation LanguageStructured Query Language(结构化查询语言Database Engine数据库引擎 Analysis Services 分析服务Integration Services集成服务 Replication 复制Reporting Services 报表服务Notification Services 通知服务 Service Broker 服
2、务代理 Full Text Search 全文搜索OLTP 联机事务处理OLAP联机分析处理联机处理OLTP(on-linetransactionprocessing)、联机分析处理OLAP(On-LineAnalyticalProcessing)OLAP和OLTP的区别OLTPOLAP用户操作人员低层管理人员决策人员高级管理人员功能日常操作处理分析决策DB设计面向应用面向主题数据当前的最新的细节的二维的分立的历史的聚集的多维的集成的统一的存取读/写数十条记录读上百万条记录工作单位简单的事务复杂的查询用户数上千个上百个DB大小100MB-GB100GB-TB升级 :in-place side-
3、by-side TCP:Transmission Control Protocol IP是英文Internet Protocol(网络之间互连的协议)的缩写 Protocol 协议,草约,草案 TIME protocol 时间协议 cryptographic protocol 安全协议,密码协议,加密协定 cryptographic 密码,暗码,用密码写的 cryptographic protocol 安全协议,密码协议,加密协定 cryptographic algorithm 密码算法,加密算法,密码演算法SQL语句大全本词条从基础知识、判断对象和应用技巧等方面,介绍了SQL(Structu
4、red Query Language)结构化查询语言的应用方法。 2基本术语2.1创建数据库创建之前判断该数据库是否存在if exists (select * from sysdatabases where name=databaseName)drop database databaseNamegoCreate DATABASE databasename2.2删除数据库Drop DATABASE databasename2.3备份sql server- 创建备份数据的 deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:mssql7ba
5、ckupMyNwind_1.dat- 开始备份BACKUP DATABASE pubs TO testBack2.4创建新表create table tabname(col1 type1 not null primary key,col2 type2 not null,.)根据已有的表创建新表:A:gouse 原数据库名goselect * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)B:create table tab_new as select col1,col2 from tab_old definition only2.5创建序列create sequ
6、ence SIMON_SEQUENCEminvalue 1 - 最小值maxvalue 999999999999999999999999999 - 最大值start with 1 - 开始值increment by 1 - 每次加几cache 20;2.6删除新表drop table tabname2.7增加一个列Alter table tabname add colname coltype2.8删除一个列Alter table tabname drop column colname2.9添加主键Alter table tabname add primary key(col)说明:删除主键:A
7、lter table tabname drop primary key(col)2.10创建索引create unique index idxname on tabname(col。)删除索引:drop index idxname on tabname注:索引是不可更改的,想更改必须删除重新建。2.11创建视图create view viewname as select statement删除视图:drop view viewname2.12简单基本的sql语句(1) 数据记录筛选:sql=select * from 数据表 where 字段名=字段值 order by 字段名 descsql
8、=select * from 数据表 where 字段名 like %字段值% order by 字段名 descsql=select top 10 * from 数据表 where 字段名=字段值 order by 字段名 descsql=select top 10 * from 数据表 order by 字段名 descsql=select * from 数据表 where 字段名 in (值1,值2,值3)sql=select * from 数据表 where 字段名 between 值1 and 值2(2) 更新数据记录:sql=update 数据表 set 字段名=字段值 where
9、 条件表达式sql=update 数据表 set 字段1=值1,字段2=值2 字段n=值n where 条件表达式(3) 删除数据记录:sql=delete from 数据表 where 条件表达式sql=delete from 数据表 (将数据表所有记录删除)(4) 添加数据记录:sql=insert into 数据表 (字段1,字段2,字段3 ) values (值1,值2,值3 )sql=insert into 目标数据表 select * from 源数据表 (把源数据表的记录添加到目标数据表)(5) 数据记录统计函数:AVG(字段名) 得出一个表格栏平均值COUNT(*;字段名) 对
10、数据行数的统计或对某一栏有值的数据行数统计MAX(字段名) 取得一个表格栏最大的值MIN(字段名) 取得一个表格栏最小的值SUM(字段名) 把数据栏的值相加引用以上函数的方法:sql=select sum(字段名) as 别名 from 数据表 where 条件表达式set rs=conn.excute(sql)用 rs(别名) 获取统计的值,其它函数运用同上。查询去除重复值:select distinct * from table1(5) 数据表的建立和删除:CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) )(6) 单列求和:SELECT SUM(字段名
11、) FROM 数据表2.13几个高级查询运算词A:UNION 运算符UNION 运算符通过组合其他两个结果表(例如TABLE1 和TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随UNION 一起使用时(即UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1 就是来自TABLE2。B: EXCEPT 运算符EXCEPT 运算符通过包括所有在TABLE1 中但不在TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。C:INTERSECT 运算符INTERSECT 运算符
12、通过只包括TABLE1 和TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当ALL 随INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。注:使用运算词的几个查询结果行必须是一致的。2.14使用外连接A、left outer join:左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.cB:right outer join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表
13、的所有行。C:full outer join:全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。3使用方法3.11=1,1=2的使用在SQL语句组合时用的较多SQL语句大全“where 1=1”是表示选择全部 “where 1=2”全部不选,如:if strWhere !=beginset strSQL = select count(*) as Total from + tblName + where + strWhereendelsebeginset strSQL = select count(*) as Total from + tblName + end我们可以直接写成
14、set strSQL = select count(*) as Total from + tblName + where 1=1 and + strWhere3.2收缩数据库-重建索引DBCC REINDEXDBCC INDEXDEFRAG-收缩数据和日志DBCC SHRINKDBDBCC SHRINKFILE3.3压缩数据库dbcc shrinkdatabase(dbname)转移数据库给新用户以已存在用户权限exec sp_change_users_login update_one,newname,oldnamego3.4检查备份集RESTORE VERIFYONLY from disk=
15、E:dvbbs.bakSQL语句大全3.5修复数据库Alter DATABASE dvbbs SET SINGLE_USERGODBCC CHECKDB(dvbbs,repair_allow_data_loss) WITH TABLOCKGOAlter DATABASE dvbbs SET MULTI_USERGO3.6日志清除SET NOCOUNT ONDECLARE LogicalFileName sysname,MaxMinutes INT,NewSize INTUSE tablename - 要操作的数据库名Select LogicalFileName = tablename_log,
16、 - 日志文件名MaxMinutes = 10, - Limit on time allowed to wrap log.NewSize = 1 - 你想设定的日志文件的大小(M)- Setup / initializeDECLARE OriginalSize intSelect OriginalSize = sizeFROM sysfilesWhere name = LogicalFileNameSelect Original Size of + db_name() + LOG is +CONVERT(VARCHAR(30),OriginalSize) + 8K pages or +CONV
17、ERT(VARCHAR(30),(OriginalSize*8/1024) + MBFROM 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_ONLYDBCC SHRINKFILE (
18、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) NewSizeBEGIN - Outer loop.Select Counter = 0WHILE (Cou
19、nter 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) + MBFROM sysfilesWhere n
20、ame = LogicalFileNameDrop TABLE DummyTransSET NOCOUNT OFF3.7更改某个表exec sp_changeobjectowner tablename,dbo3.8存储更改全部表Create PROCEDURE dbo.User_ChangeObjectOwnerBatchOldOwner as NVARCHAR(128),NewOwner as NVARCHAR(128)ASDECLARE Name as NVARCHAR(128)DECLARE Owner as NVARCHAR(128)DECLARE OwnerName as NVARC
21、HAR(128)DECLARE curObject CURSOR FORselect Name = name,Owner = user_name(uid)from sysobjectswhere user_name(uid)=OldOwnerorder by nameOPEN curObjectFETCH NEXT FROM curObject INTO Name, OwnerWHILE(FETCH_STATUS=0)BEGINif Owner=OldOwnerbeginset OwnerName = OldOwner + . + rtrim(Name)exec sp_changeobject
22、owner OwnerName, NewOwnerend- select name,NewOwner,OldOwnerFETCH NEXT FROM curObject INTO Name, OwnerENDclose curObjectdeallocate curObjectGO3.9SERVER中循环写入数据declare i intset i=1while i30begininsert into test (userid) values(i)set i=i+1end 4其他资料4.1判断对象是否存在4.2判断数据库是否存在if exists (select*fromsysdatabase
23、swherename= 数据库名)dropdatabase数据库名4.3判断表是否存在if not exists (select * from sysobjects where name = 表名 and xtype=U)begin-这里创建表end4.4判断存储过程是否存在if exists (select*fromsysobjectswhereid = object_id(N存储过程名) and OBJECTPROPERTY(id, NIsProcedure) = 1)dropprocedure存储过程名4.5判断临时表是否存在if object_id(tempdb.#临时表名)isnot
24、 nulldroptable#临时表名4.6判断视图是否存在-SQL Server 2000IF EXISTS (SELECT*FROMsysviewsWHEREobject_id = dbo.视图名-SQL Server 2005IF EXISTS (SELECT*FROMsys.viewsWHEREobject_id = dbo.视图名4.7判断函数是否存在if exists (select*fromdbo.sysobjectswhereid = object_id(Ndbo.函数名) and xtype in (NFN, NIF, NTF)dropfunctiondbo.函数名4.8获取
25、创建信息SELECTname,id,crdateFROMsysobjectswherextype=U/*xtype 的表示参数类型,通常包括如下这些 C =CHECK约束 D = 默认值或DEFAULT约束 F =FOREIGNKEY约束 L =日志FN = 标量函数 IF = 内嵌表函数 P =存储过程PK =PRIMARYKEY约束(类型是K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器U = 用户表 UQ =UNIQUE约束(类型是K) V = 视图 X = 扩展存储过程 */4.9判断列是否存在if exists(select*fromsyscolu
26、mnswhereid=object_id(表名) andname=列名)altertable表名dropcolumn列名4.10判断列是否自增列if columnproperty(object_id(table),col,IsIdentity)=1print 自增列elseprint 不是自增列SELECT*FROMsys.columnsWHEREobject_id=OBJECT_ID(表名)AND is_identity=14.11判断表中是否存在索引if exists(select*fromsysindexeswhereid=object_id(表名) andname=索引名)print
27、存在elseprint 不存在4.12查看数据库中对象SELECT*FROMsysobjectsWHEREname=对象名select * from table(所要查询的表名) where coloum(条件)4.13提升4.14复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 11法二:select top 0 * into b from a4.15拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)insert into b(x, y, z) select d,e,f from a;4.16跨数
28、据库之间表的拷贝(具体数据使用绝对路径) (Access可用)insert into b(x, y, z) select d,e,f from a in 具体数据库 where 条件例子:。.from b in &Server.MapPath(.&data.mdb & where.4.17子查询(表名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)4.18显示文章最后时间select a.title,a.username,b.adddate f
29、rom table a,(select max(adddate) adddate from table where table.title=a.title) b4.19外连接查询(表名1:a 表名2:b)select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c4.20在线视图查询(表名1:aselect * from (Select a,b,c FROM a) T where t.a 1;4.21between的用法between为查询某字段的指定范围,限制查询数据范围时包括了边界值,not between不包括边界值select * from table1 where time between time1 and time2select a,b,c, from table1 where a not between 数值1 and 数值24.22in 的使用方法select * from table1 where a not in (值1,值2,值4,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1