• 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
    )
  • 相关阅读:
    从简单做起ASP.NET复合控件(修定版)(注意在OnInit裡面設置好ID,否則無法在回傳時獲取控件值)
    多态的概念和作用
    Web设计师应该收藏的11个网站
    C++、Java与.NET——与同学讨论学习方向
    Asp.Net服务器控件编程学习记录:第一个Callback控件
    ASP.NET服务器控件开发(1)封装html
    javascript获取frameset中各个模块中的数据
    你去创业太老了
    呈现控件时出错,未将对象的引用设置到对象的实例(未創建子控件。。。)
    ASP.NET的Web Resources 设置教程
  • 原文地址:https://www.cnblogs.com/handsomecui/p/6005876.html
Copyright © 2020-2023  润新知