关闭

数据库知识

620人阅读 评论(0) 收藏 举报
1、用什么SQL语句才能查找出一个数据库里面的相同记录呢?假设数据表是TableA,我想找出ColumnA字段名相同的记录

解决方法:

1)、SELECT *
FROM TableA a
WHERE EXISTS
   (SELECT 1 FROM TableA WHERE [PK] <> a.[PK] AND ColumnA = a.ColumnA)

注:pk是主键或是unique 的字段

2)、select * from TableA where ColumnA in (select ColumnA from TableA group by ColumnA having count(ColumnA)>1)

2、在一个表当中有完全相同的两条以上记录,怎样用sql语句把他们删除,只保留一条

解决方法:
delect Table where id not in (
select max(ID) from Table group by Column1,Column2...
)
注:ID为表中唯一字段。group by 子句后跟的字段就是你用来判断重复的条件,如只有Column1,那么只要Column11字段内容相同即表示记录相同。用“max”做可以保留最新记录

3、数据库的递归

简单的例子:

CREATE PROCEDURE [proA] @i int AS
if @i>5 return
Print @i
set @i=@i+1
exec paoA @i
----------
执行:exec proA 0

结果
----------
0
1
2
3
4
5

4、利用case语句使数据生成一个新的结果(表名:TableA)

原数据
ID ColumnA
---------
1 a
2 b

解决方法: select ID,ColumnA,case ColumnA when 'a' then 100 when 'b' then 200 end as ColumnB from TableA

结果
ID ColumnA ColumnB
--------------------
1 a 100
2 b 200

5、临时表的运用(现有表TableA字段ColumnA),如何在显示时增加一个自增的ID

原数据
ColumnA
------
a
b

解决方法:
select ID=identity(int,1,1),* into #temp from TableA
select * from #temp


结果
ID ColumnA
------------
1 a
2 b

 

6、触发器运用(现有表TableA,字段[ColumnA,ColumnB] TableB,字段[ColumnA,ColumnB,ColumnC]),如何在TableA里增加记录的同时在TableB里也增加记录,删除时也同时删除。

解决方法
-----------添加触发器-----------
CREATE TRIGGER [a_insert] ON [TableA]
FOR INSERT
AS
insert into TableB(ColumnA,ColumnB)
select a.ColumnA,a.ColumnB from TableA a
where a.ColumnA in (select b.ColumnA from inserted b)

-----------删除触发器-----------
CREATE TRIGGER [a_del] ON [TableA]
FOR DELETE
AS
delete from TableB where ColumnA in (select ColumnA from deleted)

注:ColumnA为主键

7、distinct的运用(现有表TableA,字段ColumnA),如何消除重复行

原数据
ColumnA
------
a
a
b
b

解决方法:
1、select distinct ColumnA from TableA
2、select ColumnA from TableA group by ColumnA

结果
ColumnA
----
a
b

8、Convert的运用,表(TableA)里字段(ColumnA)类型是DataTime时,取出的数据形式是'0000-0-0 00:00:00',如何取出形式是'0000-00-00'


解决方法:select Convert(char(10),ColumnA,120) as rq from TableA

9、top的运用,表(TableA),字段ID,ColumnA.如何取出中间某几条记录

原数据
ID ColumnA
-------------
1 a
2 b
3 c
4 d
5 e

如何取出3-4条记录
解决方法:select top 2 * from TableA where ID not in (select top 2 ID from TableA)

结果
ID ColumnA
-------------
3 c
4 d

10、Between的运用(表TableA,字段ID,ColumnA[DateTime],ColumnB[DateTime])如何取出范围内的记录。

原数据
ID ColumnA ColumnB
------------------------------
1 2003-1-1 2003-2-1
2 2003-2-2 2003-3-1
3 2003-3-2 2003-4-1
4 2003-4-2 2004-1-1

如何得到 '2003-11-11' 属于哪个范围
解决方法:

declare @dt datetime
set @dt='2003-11-1'

select *
from TableA
where @dt between [ColumnA] and [ColumnB]
go

结果
ID ColumnA ColumnB
------------------------------
4 2003-4-2 2004-1-1


10、数据库日志

1)、截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG

2)、清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

再:   企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了


3)、 删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf'


4)、 如果想以后不让它增长
企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

5)、设置为自动收缩
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:341373次
    • 积分:4745
    • 等级:
    • 排名:第6337名
    • 原创:81篇
    • 转载:153篇
    • 译文:1篇
    • 评论:43条
    最新评论