- 浏览: 14546 次
- 性别:
- 来自: 北京
最新评论
Xml代码
- SQL 语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作。
- 一、 基础
- 1、说明:创建数据库
- CREATE DATABASE database-name
- 2、 说明:删除数据库
- drop database dbname
- 3、 说明:备份sql server
- --- 创建 备份数据的 device
- USE master
- EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
- --- 开 始 备份
- BACKUP DATABASE pubs TO testBack
- 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、说明:几个简单的基本的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%' ---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
- 11、说 明:几个高级查询运算词
- 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),不消除重复行。
- 注: 使用运算词的几个查询结果行必须是一致的。
- 12、说明:使用外连接
- 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:
- 全 外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
- 二、提升
- 1、 说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
- 法 一:select * into b from a where 1< > 1
- 法 二: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、 说明:子查询(表名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)
- 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 a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b .c
- 7、 说明:在线视图查询(表名1:a )
- select * from (SELECT a,b,c FROM a) T where t.a > 1;
- 8、说 明: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
- 9、说明:in 的使用方法
- select * from table1 where a [not] in (' 值1','值2','值4','值6')
- 10、说明:两张关联表,删除主表中已经在副表中没有的信 息
- delete from table1 where not exists ( select * from table2 where table1.field1 = table2 .field1 )
- 11、 说明:四表联查问题:
- 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 .....
- 12、 说明:日程安排提前五分钟提醒
- SQL: select * from 日程安 排 where datediff('minute',f开始时间,getdate())> 5
- 13、 说明:一条sql 语句搞定数据库分页
- select top 10 b.* from (select top 20 主 键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字 段 order by a.排序字段
- 14、说明:前10条记录
- select top 10 * form table1 where 范 围
- 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论 坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
- select a,b,c from tablename ta where a =(select max(a) from tablename tb where tb.b = ta .b)
- 16、 说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
- (select a from tableA ) except (select a from tableB) except (select a from tableC)
- 17、 说明:随机取出10条数据
- select top 10 * from tablename order by newid()
- 18、 说明:随机选择记录
- select newid()
- 19、 说明:删除重复记录
- Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
- 20、 说明:列出数据库里所有的表名
- select name from sysobjects where type = 'U'
- 21、 说明:列出表里的所有的
- select name from syscolumns where id = object_id ('TableName')
- 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 group by type
- 显 示结果:
- type vender pcs
- 电 脑 A 1
- 电脑 A 1
- 光盘 B 2
- 光 盘 A 2
- 手机 B 3
- 手机 C 3
- 23、 说明:初始化表table1
- TRUNCATE TABLE table1
- 24、 说明:选择从10到15的记录
- select top 5 * from (select top 15 * from table order by id asc) table_ 别名 order by id desc
- 三、技巧
- 1、1 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 =1 安 定 '+ @strWhere
- 2、收缩数据库
- -- 重建索引
- DBCC REINDEX
- DBCC INDEXDEFRAG
- -- 收缩数据和日志
- DBCC SHRINKDB
- DBCC SHRINKFILE
- 3、 压缩数据库
- dbcc shrinkdatabase(dbname)
- 4、 转移数据库给新用户以已存在用户权限
- exec sp_change_users_login 'update_one','newname','oldname'
- go
- 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 @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 necessary.
- 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 < @OriginalSize / 16) AND (@Counter < 50000 ))
- 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
- 8、 说明:更改某个表
- exec sp_changeobjectowner 'tablename','dbo'
- 9、 存储更改全部表
- 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
- 10、 SQL SERVER中直接循环写入数据
- declare @i int
- set @i = 1
- while @i< 30
- begin
- insert into test (userid) values(@i)
- set @i =@i+1
- end
- 小 记存储过程中经常用到的本周,本月,本年函数
- Dateadd(wk,datediff(wk,0,getdate()),-1)
- Dateadd(wk,datediff(wk,0,getdate()),6)
- Dateadd(mm,datediff(mm,0,getdate()),0)
- Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
- Dateadd(yy,datediff(yy,0,getdate()),0)
- Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
- 上 面的SQL代码只是一个时间段
- Dateadd(wk,datediff(wk,0,getdate()),-1)
- Dateadd(wk,datediff(wk,0,getdate()),6)
- 就 是表示本周时间段.
- 下面的SQL的条件部分,就是查询时间段在本周范围内的:
- Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
- 而 在存储过程中
- select @begintime = Dateadd (wk,datediff(wk,0,getdate()),-1)
-
select @endtime
=
Dateadd
(wk,datediff(wk,0,getdate()),6)
发表评论
-
Oracle 数据库管理员经常使用的表和视图
2010-05-12 15:06 8311. dba_开头 dba_users 数据 ... -
Oracle 游标使用大全
2010-04-08 16:09 590查询 SELECT语句用 ... -
java中调用ORACLE存储过程实例(一)
2010-04-07 11:23 1770一:无返回值的存储过程 存储过程: creat ... -
转:oracleorahome92agent服务启动异常
2010-04-07 09:10 1232关键字: 本地计算机上的oracleorahome92agen ... -
转:oracleorahome92agent服务启动异常
2010-04-07 09:09 683oracle存储过程,实现查询相同结构的表数据,按日 ... -
oracle 存储过程基本语法
2010-03-29 16:24 662关键字: oracle 1.基本 ... -
oracle 存储过程
2010-01-20 22:27 656create or replace procedure ...
相关推荐
SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集SQLSERVER语句收集
本文档主要涵盖了多个与SQL相关的经典语句,特别是关于内存设置、文件和文件组管理、日期处理、字符串操作以及数据库对象创建和调整等方面的知识点。 首先,关于内存选项的设置,SQL Server允许管理员通过`sp_...
经典SQL语句收集
"SQL语句收集(实用版)"这个压缩包文件,显然是一份包含了多种实用SQL技巧和示例的文档集合,旨在帮助用户提升SQL查询的效率和准确性。以下是对标题和描述中所提及知识点的详细说明: 1. **基本查询**:SQL的基本...
在"sql精典语句收集"的压缩包中,实例文件很可能是包含各种实际应用场景下的SQL语句,这些实例可以帮助学习者理解和掌握SQL的实用技巧。通过分析和实践这些实例,你可以深入理解SQL的精髓,并提升你在数据库管理上的...
精妙SQL语句收集;精妙SQL语句收集;精妙SQL语句收集。
《SQL经典语句》则可能是一本实用手册,收集了大量常见的SQL语句示例,便于读者在实际工作中快速查找和参考。 通过这三本书的学习,你可以建立起完整的SQL知识体系,从简单的数据查询到复杂的数据库设计,从基础的...
SQL经典语句大全,收集我们在平时使用SQL时的一些语法语句汇集,比如创建、备份、删除数据库的SQL脚本,这些当然是比较简了,还有复杂点的像备份、创建索引、复合SQL语句、创建视图、高级运算查询、EXCEPT 运算符、...
这个"SQL常用语句收集资料"的压缩包包含了多种与SQL相关的实用技巧和常见问题的解决方案,涉及了数据处理、查询优化、数据库操作等多个方面。下面我们将深入探讨这些主题: 1. **删除重复数据**:在数据清洗过程中...
精妙SQL语句收集,真的不错哦
它允许数据库管理员和开发人员实时跟踪和记录数据库服务器上的事件,包括SQL语句的执行情况,以优化性能、查找问题或调试应用程序。在公司环境中,由于未安装官方的Profiler,你可能已经下载了第三方的...
经典的常用SQL查询语句,比较实用,一些常用的组合语句一一收集
### 经典SQL语句收集(ORACLE) #### 一、经典查询语句 在Oracle数据库中,查询语句是日常开发与维护中最常见的操作之一。以下列出了一些经典的查询语句示例: 1. **查询所有用户(排除特定用户)**: ```sql ...
根据提供的文件信息,我们可以整理出一系列关于SQL的重要知识点与实用语句。这些知识点涵盖了数据库管理、表操作、数据查询等多个方面,对初学者乃至有一定经验的开发者都非常有帮助。 ### 数据库操作 #### 创建...
经典Sql面试题收集.doc
### SQL常用语句详解 #### 一、修改表结构:使用`ALTER TABLE`与`ALTER COLUMN` 在SQL中,我们经常需要对现有的表结构进行修改,例如改变某个字段的数据类型或者增加新的字段等。其中,`ALTER TABLE`与`ALTER ...
动态SQL允许我们在运行时构建SQL语句,使得程序更加灵活。 1. **动态SQL的基本语法**: - `EXEC`或`EXECUTE`关键字可以用来执行存储过程或动态生成的SQL语句。 - `sp_executesql`是SQL Server提供的一种更安全的...