数据库经典语句(新)_数据库经典语句

2020-02-27 其他范文 下载本文

数据库经典语句(新)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据库经典语句”。

创建数据库

创建之前判断该数据库是否存在 if exists(select * from sysdatabases where name='databaseName')drop database databaseName go Create DATABASE database-name 删除数据库

drop database dbname 备份sql server

---创建 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mql7backupMyNwind_1.dat'

---开始 备份

BACKUP DATABASE pubs TO testBack 创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:go

use 原数据库名

go

select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)

B:create table tab_new as select col1,col2„ from tab_old definition only 创建序列

create sequence SIMON_SEQUENCE minvalue 1--最小值

maxvalue ***999999999999 最大值 start with 1 开始值

increment by 1 每次加几 cache 20;删除新表

drop table tabname 增加一个列

Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。添加主键

Alter table tabname add primary key(col)

说明:删除主键: Alter table tabname drop primary key(col)创建索引

create [unique] index idxname on tabname(col„.)

删除索引:drop index idxname on tabname

注:索引是不可更改的,想更改必须删除重新建。创建视图

create view viewname as select statement

删除视图:drop view viewname 几个简单的基本的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%’(所有包含‘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[separator] 几个高级查询运算词

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),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。使用外连接

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.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

编辑本段

判断对象是否存在判断数据库是否存在if exists(select * from sys.databases where name = '数据库名')

drop database [数据库名] 判断表是否存在if not exists(select * from sysobjects where [name] = '表名' and xtype='U')

begin

--这里创建表

end 判断存储过程是否存在if exists(select * from sysobjects where id = object_id(N'[存储过程名]')and OBJECTPROPERTY(id, N'IsProcedure')= 1)

drop procedure [存储过程名] 判断临时表是否存在if object_id('tempdb..#临时表名')is not null

drop table #临时表名 判断视图是否存在--SQL Server 2000

IF EXISTS(SELECT * FROM sysviews WHERE object_id = '[dbo].[视图名]'

--SQL Server 2005

IF EXISTS(SELECT * FROM sys.views WHERE object_id = '[dbo].[视图名]' 判断函数是否存在if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[函数名]')and xtype in(N'FN', N'IF', N'TF'))

drop function [dbo].[函数名] 获取用户创建的对象信息

SELECT [name],[id],crdate FROM sysobjects where xtype='U'

/*

xtype 的表示参数类型,通常包括如下这些 C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K)RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K)V = 视图 X = 扩展存储过程 */ 判断列是否存在if exists(select * from syscolumns where id=object_id('表名')and name='列名')

alter table 表名 drop column 列名 判断列是否自增列

if columnproperty(object_id('table'),'col','IsIdentity')=1

print '自增列'

else

print '不是自增列' SELECT * FROM sys.columns WHERE object_id=OBJECT_ID('表名')AND is_identity=1 判断表中是否存在索引

if exists(select * from sysindexes where id=object_id('表名')and name='索引名')

print '存在'

else

print '不存在 查看数据库中对象

SELECT * FROM sys.sysobjects WHERE name='对象名' 编辑本段 提升

复制表

(只复制结构,源表名:a 新表名:b)(Acce可用)

法一:select * into b from a where 11

法二:select top 0 * into b from a 拷贝表

(拷贝数据,源表名:a 目标表名:b)(Acce可用)

insert into b(a, b, c)select d,e,f from b;跨数据库之间表的拷贝

(具体数据使用绝对路径)(Acce可用)

insert into b(a, b, c)select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in '“&Server.MapPath(”.“&”data.mdb“ &”' where..子查询

(表名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)显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate)adddate from table where table.title=a.title)b 外连接查询

(表名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.c 在线视图查询

(表名1:a

select * from(Select a,b,c FROM a)T where t.a > 1;between的用法

between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2 in 的使用方法

select * from table1 where a [not] in(‘值1’,’值2’,’值4’,’值6’)

删除主表中已经在副表中没有的信息

两张关联表delete from table1 where not exists(select * from table2 where table1.field1=table2.field1 四表联查问题

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.....日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 一条sql 语句搞定数据库分页

select top 10 b.* from(select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc)a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 前10条记录

select top 10 * form table1 where 范围 选择排名

选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a)from tablename tb where tb.b=ta.b)派生结果表

包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA except(select a from tableB)except(select a from tableC)随机取出10条数据

select top 10 * from tablename order by newid()随机选择记录

select newid()删除重复记录

Delete from tablename where id not in(select max(id)from tablename group by col1,col2,...)列出数据库里所有的表名

select name from sysobjects where type='U' 列出表里的所有的select name from syscolumns where id=object_id('TableName')列示排列

列示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 group by type

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2 光盘 A 2 手机 B 3 手机 C 3 初始化表table1

TRUNCATE TABLE table1 选择从10到15的记录

select top 5 * from(select top 15 * from table order by id asc)table_别名 order by id desc 数据类型转换

declare @numid int

declare @id varchar(50)

set @numid=2005

set @id=convert(varchar,@numid)

通过上述语句完成数据类型Int转换成varchar,其他转换类似,可参看convert函数

编辑本段 技巧

1=1,1=2的使用

在SQL语句组合时用的较多

“where 1=1” 是表示选择全部 “where 1=2”全部不选,如:

if @strWhere!=' begin

set @strSQL = 'select count(*)as Total from [' + @tblName + '] where ' + @strWhere

end

else

begin

set @strSQL = 'select count(*)as Total from [' + @tblName + ']'

end

我们可以直接写成set @strSQL = 'select count(*)as Total from [' + @tblName + '] where 1=1 and '+ @strWhere 收缩数据库

--重建索引

DBCC REINDEX DBCC INDEXDEFRAG--收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE 压缩数据库

dbcc shrinkdatabase(dbname)转移数据库给新用户以已存在用户权限

exec sp_change_users_login 'update_one','newname','oldname' go 检查备份集

RESTORE VERIFYONLY from disk='E:dvbbs.bak' 修复数据库

Alter DATABASE [dvbbs] SET SINGLE_USER GO DBCC CHECKDB('dvbbs',repair_allow_data_lo)WITH TABLOCK GO Alter DATABASE [dvbbs] SET MULTI_USER GO 日志清除

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 / initialize DECLARE @OriginalSize int Select @OriginalSize = size

FROM sysfiles

Where name = @LogicalFileName Select 'Original Size of ' + db_name()+ ' LOG is ' + CONVERT(VARCHAR(30),@OriginalSize)+ ' 8K pages or ' + CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+ 'MB' FROM sysfiles Where name = @LogicalFileName Create 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 neceary.WHILE @MaxMinutes > DATEDIFF(mi, @StartTime, GETDATE())--time has not expired

AND @OriginalSize =(Select size FROM sysfiles Where name = @LogicalFileName)

AND(@OriginalSize * 8 /1024)> @NewSize

BEGIN--Outer loop.Select @Counter = 0

WHILE((@Counter

BEGIN--update

Insert DummyTrans VALUES('Fill Log')

Delete DummyTrans

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),(size*8/1024))+ 'MB' FROM sysfiles Where name = @LogicalFileName Drop TABLE DummyTrans

SET NOCOUNT OFF 更改某个表

exec sp_changeobjectowner 'tablename','dbo' 存储更改全部表

Create PROCEDURE dbo.User_ChangeObjectOwnerBatch @OldOwner as NVARCHAR(128), @NewOwner as NVARCHAR(128)AS DECLARE @Name as NVARCHAR(128)DECLARE @Owner as NVARCHAR(128)DECLARE @OwnerName as NVARCHAR(128)DECLARE curObject CURSOR FOR select 'Name' = name, 'Owner' = user_name(uid)from sysobjects where user_name(uid)=@OldOwner order by name OPEN curObject FETCH NEXT FROM curObject INTO @Name, @Owner WHILE(@@FETCH_STATUS=0)BEGIN if @Owner=@OldOwner begin set @OwnerName = @OldOwner + '.' + rtrim(@Name)exec sp_changeobjectowner @OwnerName, @NewOwner end--select @name,@NewOwner,@OldOwner FETCH NEXT FROM curObject INTO @Name, @Owner END

close curObject

deallocate curObject

GO SQL SERVER中直接循环写入数据

declare @i int

set @i=1

while @i

begin

insert into test(userid)values(@i)

set @i=@i+1 end

--语 句 功 能--数据操作

SELECT--从数据库表中检索数据行和列 INSERT--向数据库表添加新数据行 DELETE--从数据库表中删除数据行 UPDATE--更新数据库表中的数据--数据定义

CREATE TABLE--创建一个数据库表 DROP TABLE--从数据库中删除表 ALTER TABLE--修改数据库表结构 CREATE VIEW--创建一个视图 DROP VIEW--从数据库中删除视图 CREATE INDEX--为数据库表创建一个索引 DROP INDEX--从数据库中删除索引 CREATE PROCEDURE--创建一个存储过程 DROP PROCEDURE--从数据库中删除存储过程 CREATE TRIGGER--创建一个触发器 DROP TRIGGER--从数据库中删除触发器 CREATE SCHEMA--向数据库添加一个新模式 DROP SCHEMA--从数据库中删除一个模式 CREATE DOMAIN--创建一个数据值域 ALTER DOMAIN--改变域定义

DROP DOMAIN--从数据库中删除一个域--数据控制

GRANT--授予用户访问权限 DENY--拒绝用户访问 REVOKE--解除用户访问权限--事务控制

COMMIT--结束当前事务 ROLLBACK--中止当前事务

SET TRANSACTION--定义当前事务数据访问特征--程序化SQL DECLARE--为查询设定游标 EXPLAN--为查询描述数据访问计划 OPEN--检索查询结果打开一个游标 FETCH--检索一行查询结果 CLOSE--关闭游标

PREPARE--为动态执行准备SQL 语句 EXECUTE--动态地执行SQL 语句 DESCRIBE--描述准备好的查询---局部变量

declare @id char(10)--set @id = '10010001' select @id = '10010001'---全局变量---必须以开头--IF ELSE declare @x int @y int @z int select @x = 1 @y = 2 @z=3 if @x > @y print 'x > y'--打印字符串'x > y' else if @y > @z print 'y > z' else print 'z > y'--CASE use pangu update employee set e_wage = case when job_level = ’1’ then e_wage*1.08 when job_level = ’2’ then e_wage*1.07 when job_level = ’3’ then e_wage*1.06 else e_wage*1.05 end--WHILE CONTINUE BREAK declare @x int @y int @c int select @x = 1 @y=1 while @x

stockname like '[a-zA-Z]%'---------([]指定值的范围)stockname like '[^F-M]%'---------(^排除指定范围)---------只能在使用like关键字的where子句中使用通配符)or stockpath = 'stock_path' or stocknumber

stockname =(select stockname from stock_information where stockid = 4)---------子查询

---------除非能确保内层select只返回一个行的值,---------否则应在外层where子句中用一个in限定符

select distinct column_name form table_name---------distinct指定检索独有的列值,不重复

select stocknumber ,“stocknumber + 10” = stocknumber + 10 from table_name select stockname , “stocknumber” = count(*)from table_name group by stockname---------group by 将表按行分组,指定列中有相同的值 having count(*)= 2---------having选定指定的组 select *

from table1, table2

where table1.id *= table2.id--------左外部连接,table1中有的而table2中没有得以null表示

table1.id =* table2.id--------右外部连接

select stockname from table1 union [all]-----union合并查询结果集,all-保留重复行 select stockname from table2 ***insert*** insert into table_name(Stock_name,Stock_number)value(“xxx”,“xxxx”)value(select Stockname , Stocknumber from Stock_table2)---value为select语句

***update*** update table_name set Stockname = “xxx” [where Stockid = 3] Stockname = default Stockname = null Stocknumber = Stockname + 4 ***delete*** delete from table_name where Stockid = 3 truncate table_name-----------删除表中所有行,仍保持表的完整性 drop table table_name---------------完全删除表 ***alter table***---修改数据库表结构

alter table database.owner.table_name add column_name char(2)null.....sp_help table_name----显示表已有特征

create table table_name(name char(20), age smallint, lname varchar(30))insert into table_name select.........-----实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default----删除Stockname的default约束

***function(/*常用函数*/)***----统计函数----AVG--求平均值 COUNT--统计数目 MAX--求最大值 MIN--求最小值 SUM--求和--AVG use pangu select avg(e_wage)as dept_avgWage from employee group by dept_id--MAX--求工资最高的员工姓名 use pangu select e_name from employee where e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/ SIN(float_expreion)--返回以弧度表示的角的正弦 COS(float_expreion)--返回以弧度表示的角的余弦 TAN(float_expreion)--返回以弧度表示的角的正切 COT(float_expreion)--返回以弧度表示的角的余切 /***反三角函数***/ ASIN(float_expreion)--返回正弦是FLOAT 值的以弧度表示的角 ACOS(float_expreion)--返回余弦是FLOAT 值的以弧度表示的角 ATAN(float_expreion)--返回正切是FLOAT 值的以弧度表示的角 ATAN2(float_expreion1,float_expreion2)

--返回正切是float_expreion1 /float_expres-sion2的以弧度表示的角 DEGREES(numeric_expreion)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型

RADIANS(numeric_expreion)--把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型 EXP(float_expreion)--返回表达式的指数值 LOG(float_expreion)--返回表达式的自然对数值

LOG10(float_expreion)--返回表达式的以10 为底的对数值 SQRT(float_expreion)--返回表达式的平方根 /***取近似值函数***/ CEILING(numeric_expreion)--返回>=表达式的最小整数返回的数据类型与表达式相同可为

--INTEGER/MONEY/REAL/FLOAT 类型

FLOOR(numeric_expreion)--返回

--INTEGER/MONEY/REAL/FLOAT 类型

ROUND(numeric_expreion)--返回以integer_expreion 为精度的四舍五入值返回的数据

--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型

ABS(numeric_expreion)--返回表达式的绝对值返回的数据类型与表达式相同可为

--INTEGER/MONEY/REAL/FLOAT 类型

SIGN(numeric_expreion)--测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型

--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型 PI()--返回值为π 即3.14***936 RAND([integer_expreion])--用任选的[integer_expreion]做种子值得出0-1 间的随机浮点数

----字符串函数----ASCII()--函数返回字符表达式最左端字符的ASCII 码值 CHAR()--函数用于将ASCII 码转换为字符

--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值 LOWER()--函数把字符串全部转换为小写 UPPER()--函数把字符串全部转换为大写 STR()--函数把数值型数据转换为字符型数据 LTRIM()--函数把字符串头部的空格去掉 RTRIM()--函数把字符串尾部的空格去掉

LEFT(),RIGHT(),SUBSTRING()--函数返回部分字符串

CHARINDEX(),PATINDEX()--函数返回字符串中某个指定的子串出现的开始位置 SOUNDEX()--函数返回一个四位字符码

--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值

DIFFERENCE()--函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同

QUOTENAME()--函数返回被特定字符括起来的字符串 /*select quotename('abc', '{')quotename('abc')运行结果如下

---{ {abc} [abc]*/ REPLICATE()--函数返回一个重复character_expreion 指定次数的字符串 /*select replicate('abc', 3)replicate('abc',-2)运行结果如下

----------------------abcabcabc NULL*/ REVERSE()--函数将指定的字符串的字符排列顺序颠倒 REPLACE()--函数返回被替换了指定子串的字符串 /*select replace('abc123g', '123', 'def')运行结果如下

----------------------abcdefg*/ SPACE()--函数返回一个有指定长度的空白字符串 STUFF()--函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST()函数语法如下

CAST()(AS [ length ])CONVERT()函数语法如下

CONVERT()([ length ], [, style])select cast(100+99 as char)convert(varchar(12), getdate())运行结果如下

------------------------------------------199 Jan 15 2000----日期函数----DAY()--函数返回date_expreion 中的日期值 MONTH()--函数返回date_expreion 中的月份值 YEAR()--函数返回date_expreion 中的年份值 DATEADD(, ,)

--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期 DATEDIFF(, ,)--函数返回两个指定日期在datepart 方面的不同之处

DATENAME(,)--函数以字符串的形式返回日期的指定部分 DATEPART(,)--函数以整数值的形式返回日期的指定部分 GETDATE()--函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME()--函数返回当前执行的应用程序的名称

COALESCE()--函数返回众多表达式中第一个非NULL 表达式的值

COL_LENGTH(,)--函数返回表中指定字段的长度值

COL_NAME(,)--函数返回表中指定字段的名称即列名 DATALENGTH()--函数返回数据表达式的数据的实际长度 DB_ID(['database_name'])--函数返回数据库的编号 DB_NAME(database_id)--函数返回数据库的名称 HOST_ID()--函数返回服务器端计算机的名称 HOST_NAME()--函数返回服务器端计算机的名称

IDENTITY([, seed increment])[AS column_name])--IDENTITY()函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中

/*select identity(int, 1, 1)as column_name into newtable from oldtable*/ ISDATE()--函数判断所给定的表达式是否为合理日期

ISNULL(,)--函数将表达式中的NULL 值用指定值替换

ISNUMERIC()--函数判断所给定的表达式是否为合理的数值 NEWID()--函数返回一个UNIQUEIDENTIFIER 类型的数值 NULLIF(,)--NULLIF 函数在expreion1 与expreion2 相等时返回NULL 值若不相等时则返回expreion1 的值

以上是本人收藏的,作者我也不记得了。

《数据库经典语句(新).docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
数据库经典语句(新)
点击下载文档
相关专题 数据库经典语句 语句 数据库 经典 数据库经典语句 语句 数据库 经典
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文