sqlserver练习
1.基本表的练习:
create table Test(
name varchar(4),
age int,
sex varchar(2)
)
alter table Test
add id char(16)
alter table Test
alter column id varchar(16)
alter table Test
drop column id
drop table Test
select * from Test
2.记录操作DML:
create table Test(
name varchar(4),
age int,
id char(16)
)
alter table Test
alter column name varchar(6)
insert into Test
values('崔哥哥',15,'');--注意单引号 delete from Test
where name='崔哥哥' update Test set age=18 where name='崔哥哥' bulk insert Test
from 'C:\Users\Administrator\Desktop\test.txt'
with(
fieldterminator=' ',rowterminator='\n'
) select name from Test where LEN(id)=7 order by age
--desc asc
select * from Test
3.function用法:
--declare @a int, @b int
--print rand()*26+65
--select @a=cast('123' as int), @b=convert(int,'456');
--print @b
--print ascii('A')
--print char(rand()*26+65) --print substring('李四',1,1);
--select * from Test
--where left(name,1)='崔' or right(name,1)='三'or substring(name,2,1)='四' print getdate()
print dateadd(day,2,getdate())
print dateadd(minute,2,getdate())
print dateadd(second,2,getdate())
print dateadd(hour,2,getdate())
print datediff(second,getdate(),dateadd(hour,2,getdate()))
print datepart(week,getdate())-datepart(week,dateadd(month,-1,getdate()))
print str(1.25,3,1)+'asd' --print str(参数1,参数2,参数3)
--参数2表示转换后的数据的总位数,包括小数点,正负号
--参数3表示转换后的数据的小数位数
4.bulk insert用法:
bulk insert Test
from 'C:\Users\Administrator\Desktop\test.txt'
with(
fieldterminator=' ',rowterminator='\n'
)
5.cursor用法:
--declare mycursor scroll cursor for select * from Test
open mycursor
declare @name varchar(6),@age int,@id char(16) fetch first from mycursor into @name,@age,@id
print @name
print @age
print @id
while @@FETCH_STATUS=0
begin
fetch next from mycursor into @name,@age,@id
--absolute 10
print @name
print @age
print @id
end
close mycursor
deallocate mycursor
6.primary key,unique,not null, check用法:
alter table Test
drop column name select * from Test
delete from Test select * from Test alter table Test
add name varchar(6) primary key alter table Test
alter column id varchar(16) not null alter table Test
drop column age
alter table Test
add age int check( age>=0 and age<=100)
7.view and index:
create view myview as select * from Test
select * from myview
select * from myview where age=18 create clustered index myindex on Test(age)
alter index myindex on Test rebuild
drop index Test.myindex
8.trigger用法:
建立车牌信息表:
--io10 declare @id varchar(), @i int, @j int, @k int, @temp varchar(), @tmp varchar();
set @temp = '豫京津沪';
set @tmp = 'HABCDEFGHJKLMN23456789';
set @i = ; while(@i<)
begin
set @id = '';
select @k = ;
set @j = rand()*+;
set @id = @id + substring(@temp, @j, );
set @j =rand()*+;
set @id = @id + substring(@tmp, @j, );
print @id;
while(@k < )
begin
set @j =rand()*+;
set @id = @id + substring(@tmp, @j, );
set @k = @k + ;
end
set @i = @i + ;
insert into viechle values(@id,,,);
end --select * from viechle
建立日志表:
--use handsomecui
--drop table mylog
--create table mylog(
-- tablename varchar(10),
-- altername varchar(10),
-- altertimr date
--) insert into viechle values('',0,0,0); update viechle set number_id='' where number_id='' select * from mylog
触发器插入日志文件:
--drop trigger mytrigg
create trigger mytrigger
on viechle after insert,update, delete
as
begin
if exists(select 1 from inserted) and exists(select 1 from deleted)
insert into mylog values('viechle','update',getdate());
if exists(select 1 from inserted) and not exists(select 1 from deleted)
insert into mylog values('viechle','insert',getdate());
if not exists(select 1 from inserted) and exists(select 1 from deleted)
insert into mylog values('viechle','delete',getdate());
end
数据库考核,统计职工生日,以及生日相同的人的个数;
1.建表,插入数据
--姓名>3 age 20-30
--drop table Worker
--create table Worker(
-- stname varchar(10),
-- stbirth date,
-- styear int,
-- stdate varchar(4),
-- cnt int
--) declare @bir date, @yy int, @mm int, @dd int, @name varchar(10), @i int, @j int, @stdate varchar(4);
select @i = 0, @j = 0;
while(@i < 365)
begin
select @name = '', @j = 0, @stdate = '';
while(@j < 5)
begin
set @name = @name + char(rand()*26 + 65);
set @j = @j + 1;
end
set @bir = dateadd(day, -20*365, dateadd(day, -10*365*rand(), getdate()));
set @yy = datepart(year, @bir);
set @mm = datepart(month, @bir);
set @dd = datepart(day, @bir);
if(@mm < 10)
begin
set @stdate = @stdate + '';
set @stdate = @stdate + char(@mm + 48);
end
else
begin
set @stdate = @stdate + char(@mm/10 + 48);
set @stdate = @stdate + char(@mm%10 + 48);
end
if(@dd < 10)
begin
set @stdate = @stdate + '';
set @stdate = @stdate + char(@dd + 48);
end
else
begin
set @stdate = @stdate + char(@dd/10 + 48);
set @stdate = @stdate + char(@dd%10 + 48);
end
insert into Worker values(@name, @bir, @yy, @stdate, 1);
set @i = @i + 1;
end --select * from Worker
2.游标修改cnt员工相同人的个数:
--select stname from Worker where left(stname, 1)='A' --create clustered index myindex on Worker(stdate) --select * from Worker order by stdate --close mycursor
--deallocate mycursor declare mycursor scroll cursor for select stname,stdate from Worker declare @date varchar(4), @cnt int, @stname varchar(10);
open mycursor
fetch first from mycursor into @stname,@date
select @cnt = count(*) from Worker where stdate=@date group by stdate
update Worker set cnt=@cnt where stdate = @date;
while @@FETCH_STATUS=0
begin
fetch next from mycursor into @stname,@date select @cnt = count(*) from Worker where stdate=@date group by stdate
update Worker set cnt=@cnt where stdate = @date;
end
close mycursor
deallocate mycursor --select * from Worker order by cnt desc
3.查询最多人生日的方法:
select * from Worker where stdate in(
select top 1 stdate from Worker group by stdate
order by count(1) desc
)
sqlserver练习的更多相关文章
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...
- SQLSERVER走起 APP隆重推出
SQLSERVER走起 APP隆重推出 为方便大家查看本微信公众以前推送的文章,QQ群里面的某位SQLSERVER重度爱好者开发了<SQLSERVER走起>的APP 以供大家一起交流 网页 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- SQLSERVER走起微信公众帐号全新改版 全新首页
SQLSERVER走起微信公众帐号全新改版 全新首页 今天,SQLSERVER走起微信公众帐号增加了首页功能 虽然还是订阅号,不过已经对版面做了比较大的修改,希望各位亲用得放心.用得安心O(∩_∩)O ...
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- 干货分享:SQLSERVER使用裸设备
干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...
随机推荐
- [Cycle.js] Making our toy DOM Driver more flexible
Our previous toy DOM Driver is still primitive. We are only able to sends strings as the textContent ...
- java后台訪问url连接——HttpClients
java后台訪问url,并传递数据--通过httpclient方式 须要的包,包可能多几个额外的,假设无用或者冲突删除就可以.httpclient是使用的是4.4.1的版本号:http://downl ...
- nignx日志格式
web-master的nginx格式: log_format web_format '$remote_addr $remote_port $remote_user [$time_local] ' '& ...
- FileShare文件读写锁解决“文件XXX正由另一进程使用,因此该进程无法访问此文件”(转)
开发过程中,我们往往需要大量与文件交互,读文件,写文件已成家常便饭,本地运行完美,但一上到投产环境,往往会出现很多令人措手不及的意外,或开发中的烦恼,因此,我对普通的C#文件操作做了一次总结,问题大部 ...
- Android测试框架1(非原创)
1.继承AndroidTestCase :public class JunitTest3 extends AndroidTestCase {} 2.在AndroidManifest.xml清单文件中添 ...
- 《第一行代码》学习笔记7-活动Activity(5)
1.Intent中只能指定一个action,但却能指定多个category. 2.使用隐式Intent,不仅可以启动自己程序内的活动,还可以启动其他程序的活动,使得Android应用程序之间 的功能共 ...
- oracle学习笔记(一)用户管理
--oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...
- zsh-替换掉黑白的控制台
官方地址:里面有详细的安装指南 http://ohmyz.sh/
- $.unique() 对象组成的数组去掉重复对象
发现一件事,一个完全由对象组成的数组,用$.unique()方法去掉重复的时候不管用 var arr = [{text:'第一个',value:'1'},{text:'第二个',value:'2'}, ...
- MySQL错误Another MySQL daemon already running with the same unix socket
今天遇到RT这个问题后,导致数据库错误,然后在国外网站发现了一个解决方法,记录如下: 原因是:多个Mysql进程使用了同一个socket. 解决方法是:直接把mysql.sock文件改名即可.也可以删 ...