• 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,'311409060209');--注意单引号
    
    delete from Test
    where name='崔哥哥'
    
    update Test set age=18 where name='崔哥哥'
    
    bulk insert Test 
    from 'C:UsersAdministratorDesktop	est.txt'
    with(
        fieldterminator=' ',rowterminator='
    '
    )
    
    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:UsersAdministratorDesktop	est.txt'
    with(
        fieldterminator=' ',rowterminator='
    '
    )

    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(10), @i int, @j int, @k int, @temp varchar(10), @tmp varchar(26);
    set @temp = '豫京津沪';
    set @tmp = 'HABCDEFGHJKLMN23456789';
    set @i = 0;
    
    while(@i<200000)
    begin
        set @id = '';
        select @k = 0;
        set @j = rand()*4+1;
        set @id = @id + substring(@temp, @j, 1);
        set @j =rand()*14+1;
        set @id = @id + substring(@tmp, @j, 1);
        print @id;
        while(@k < 5)
        begin
            set @j =rand()*22+1;
            set @id = @id + substring(@tmp, @j, 1);
            set @k = @k + 1;
        end
        set @i = @i + 1;
        insert into viechle values(@id,0,0,0);
    end
    
    --select * from viechle

    建立日志表:

    --use handsomecui
    --drop table mylog
    --create table mylog(
    --    tablename varchar(10),
    --    altername varchar(10),
    --    altertimr date
    --)
    
    insert into viechle values('123',0,0,0);
    
    update viechle set number_id='456' where number_id='123'
    
    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 + '0';
            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 + '0';
            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
    )
  • 相关阅读:
    R学习笔记3 数据处理
    R学习笔记2 因子
    R学习笔记1 介绍R的使用
    正则表达式之邮箱、手机号码、电话号码,url地址
    vue之axios运用
    angularJS导出数据到Excel
    vue2全选反选
    css设置垂直居中
    js实现鼠标选中文本改变选中区域颜色以及给选中区域加上html标签
    安装了Vetur之后的配置
  • 原文地址:https://www.cnblogs.com/handsomecui/p/6005876.html
Copyright © 2020-2023  润新知