sql一些常用的操作
Create table TestA
(
a varchar(40),
b varchar(40),
c varchar(40),
d varchar(40)
)
Create table TestB
(
a varchar(40),
b varchar(40),
c varchar(40),
d varchar(40)
)
insert into TestA values('1','11','111','1111')
insert into TestA values('2','22','222','2222')
insert into TestA values('3','33','333','3333')
insert into TestA values('4','44','444','4444')
insert into TestA values('6','66','666','6666')
insert into TestB values('1','11','111','1111')
insert into TestB values('2','22','222','2222')
insert into TestB values('4','44','444','4444')
insert into TestB values('5','55','555','5555')
select TestA.a,TestA.b,TestA.c,TestA.d,TestB.a,TestB.b,TestB.c,TestB.d from TestA left outer join TestB ON TestA.a = TestB.a
select TestA.a,TestA.b,TestA.c,TestA.d,TestB.a,TestB.b,TestB.c,TestB.d from TestA left outer join TestB ON TestA.a = TestB.a
select TestA.a,TestA.b,TestA.c,TestA.d,TestB.a,TestB.b,TestB.c,TestB.d from TestA inner join TestB ON TestA.a = TestB.a
(
a varchar(40),
b varchar(40),
c varchar(40),
d varchar(40)
)
Create table TestB
(
a varchar(40),
b varchar(40),
c varchar(40),
d varchar(40)
)
insert into TestA values('1','11','111','1111')
insert into TestA values('2','22','222','2222')
insert into TestA values('3','33','333','3333')
insert into TestA values('4','44','444','4444')
insert into TestA values('6','66','666','6666')
insert into TestB values('1','11','111','1111')
insert into TestB values('2','22','222','2222')
insert into TestB values('4','44','444','4444')
insert into TestB values('5','55','555','5555')
select TestA.a,TestA.b,TestA.c,TestA.d,TestB.a,TestB.b,TestB.c,TestB.d from TestA left outer join TestB ON TestA.a = TestB.a
select TestA.a,TestA.b,TestA.c,TestA.d,TestB.a,TestB.b,TestB.c,TestB.d from TestA left outer join TestB ON TestA.a = TestB.a
select TestA.a,TestA.b,TestA.c,TestA.d,TestB.a,TestB.b,TestB.c,TestB.d from TestA inner join TestB ON TestA.a = TestB.a
通过上面测试发现,left outer join 和left join 没有任何区别。
select * into TestC From TestA where 1<>1
表示只复制TestA的表结构给TestC.
select top 0 * into TestD From TestA
和上面类似,表示只复制TestA的表结构给TestD
Insert into TestC Select * from TestA
表示把TestA中的数据复制到TestC中去。
select dateadd(minute,1,getdate())
表示在当前时间增加2分钟。
select * from 日程表 where datediff(minute,getdate(),dateadd(minute,4,getdate()))
其中getdate()表示日程表中的日期,dateadd(minutes,4,getdate())表示当前日期,就可以在提前5分钟的时候把数据取出来。
下面来看看用sql实现从一个表中取出第m条到n条的记录:
select top (n-m+1) * from testA where a not in(select top (m-1) a from testa )
select top n-m+1 * from TestA where not Exists(select * from (select top m-1 * from testa) tempa where testa.a = tempa.a)
select * from (select Row_Number()over( order by a) as id,* from testa) as tempa where tempa.id between m and n
随机出n条数据从testA表中:
select top n * from testA order by newid()
删除TestA表中重复的记录,重复有完全重复,或者部分重复(比如关键字不重复):
--完全重复的记录删除
select distinct * into #tempa from testa
delete testa
insert into testa select * from #tempa
drop table #tempa
-------------------------------
select distinct * into #tempa from testa
drop table testa
select * into testa from #tempa
drop table #tempa
select distinct * into #tempa from testa
delete testa
insert into testa select * from #tempa
drop table #tempa
-------------------------------
select distinct * into #tempa from testa
drop table testa
select * into testa from #tempa
drop table #tempa
--删除testA表中除了a列不重复,其他列都重复的记录
delete testa where a not in (select min(a) from testa group by b,c,d)
delete testa where a not in (select min(a) from testa group by b,c,d)
浙公网安备 33010602011771号