zoukankan      html  css  js  c++  java
  • sql新手全套

    --【数据库】
    go
    create database DB_MGG  --添加数据库
    on
    (
    name=DB_MGG --逻辑名称
    ,filename='C:\MDB\DB_MGG.mdf' --物理名称  逻辑名和物理名可以不一样
    ,size=3MB --大小
    ,filegrowth=1MB --增长多少
    ,maxsize=100MB --最大大小
    ),
    filegroup DB_group --文件组
    (
    name=DB_MGN1
    ,filename='D:\NDB\DB_MGN1.ndf'
    ,size=3MB
    ,filegrowth=1MB
    ,maxsize=100MB
    )
     log on
    (
    name=DB_MGL
    ,filename='F:\LDB\DB_MGL.ldf'
    ,size=1MB
    ,filegrowth=10%
    ,maxsize=10MB
    )
    go
    use DB_MGG
    go
    --更改_添加一个新文件
    alter database DB_MGG
    add file
    (
    name=DB_MGN2
    ,filename='E:\NDB\DB_MGN2.ndf'
    ,size=3MB
    ,filegrowth=1MB
    ,maxsize=100MB
    )
    --更改_删除一个数据库文件
    alter database DB_MGG
    remove file DB_MGN2
    --更改_新建一个文件组
    alter database DB_MGG
    add filegroup DB_group
    --更改_添加一个新文件 到文件组
    alter database DB_MGG
    add file
    (
    name=DB_MGN2
    ,filename='E:\NDB\DB_MGN2.ndf'
    ,size=3MB
    ,filegrowth=1MB
    ,maxsize=100MB
    )to filegroup DB_group --放到文件组里
    --更改_添加一个日志文件
    alter database DB_MGG
    add log file
    (
    name=DB_MGL_T
    ,filename='F:\LDB\DB_MGL_T.ldf'
    ,size=1MB
    ,filegrowth=10%
    ,maxsize=10MB
    )
    --更改_更改一个数据库文件
    alter database DB_MGG
    modify file
    (
     name=DB_MGN1
    ,filename='D:\NDB\DB_MGN1.ndf'
    ,size=5
    ,filegrowth=10%
    ,maxsize=50MB
    )
    --更改_更改数据库名称
    alter database DB_MGG
    modify name=DB_mgg
    --删除文件组
    alter database DB_MGG
    remove filegroup DB_group --ps:文件组里有文件不能删除

    use master
    drop database DB_MGG  --删除数据库

    -----------------------------------------------
    --【数据表】
    use DB_MGG
    create table TB1_student --创建数据表
    (
     id int,
     name nchar(4),
     --ps:char 固定大小查询方便; nchar 无论中文和英文用unicode编码统一占2个字节;varchar 大小会变储存小
     birthday date,
     mark decimal(4,1)
     )
     
     --更改 添加一列数据表字段
     alter table TB1_student
     add sex nchar(1)
    --更改 修改一列数据表字段
     alter table TB1_student
     alter column sex char(2)
    --更改 删除一列数据表字段
     alter table TB1_student
     drop column sex
    --更改 修改名称
    go
    sp_rename 'TB1_student',TB_cjb --修改表名
    go
    sp_rename 'TB1_student.id',ID --修改字段名
    go
    -----------------------------------------
    --【数据表内容】
        --添加数据
        insert into TB1_student values(1,'mzmz','1995-1-1',99,'男')
        insert into TB1_student values(2,'mzmz','1997/2/2',77,'女')
        insert into TB1_student values(3,'mmmm','1991.3.3',55,'男'),(4,'maaz','1999 4 4',66,'女')
        --连续添加多行数据 ps:数据间用,隔开 日期型用. /或-隔开

        select * from TB1_student --查询
        update TB1_student set name='名字名字' where id=1 --更改数据
        delete  from TB1_student --删除数据表内容
        drop table TB1_student --删除数据表

        --添加 insert into 表名 values (值1,值2)
        --查询 select COUNT(*) 统计[统计=count(*)/count as 统计] from 表名 order by [desc/asc(默认升序)]
        --子查询select 字段 from 表名 where 字段=(select max(字段)  from 表名)
        --复制数据表 select * into 新的表名[不需要预先创建该表] from 要复制的表名[已有的表]   只拷贝数据
        --更新 update 表名 set 字段=内容 [where 条件表达式(字段=值)]  若没有where条件,那么全都会更改
        --删除 delete from 表名 [where 条件表达式(字段[=/is 备注:null要用is/like/>/<] 值)[and/or/not] 条件表达式]
        --     删除的是记录,逐条删除,可恢复
        --删除 truncate 每个block删除 速度快 但不能逐条恢复
        --分组 group by  --去前n个 top n
        --去重复 distinct
        -- null是空值 是个空盒子 不知道里面有什么
        --like 模糊查询%表示一个或多个 _表示单个
        --查询范围 between 数值 and 数值 包涵头尾数值
        --count 统计 max 最大 min最小 avg 平均值 sum 和
        --select * from  where group by having
        --联合查询
        create database db_xs
        use db_xs
        create table tb_xs
        (
            id char(8) not null
            ,name char(8)
            ,constraint pk_id primary key(id)
        )
        insert into tb_xs values ('00000001','林艺')
        insert into tb_xs values ('00000002','灵儿')
        insert into tb_xs values ('00000003','凌珊')
        insert into tb_xs values ('00000004','零时')
        create table tb_kc
        (
            kcid char(2) not null
            ,kcname char(20)
            ,constraint pk_kcid primary key(kcid)
        )
        insert into tb_kc values ('01','林艺语文')
        insert into tb_kc values ('02','灵儿数学')
        insert into tb_kc values ('03','凌珊英语')
        insert into tb_kc values ('04','零时美术')
        create table tb_xk
        (
            id char(8)foreign key references tb_xs(id)
            ,kcid char(2) foreign key references tb_kc(kcid)
            ,xksj datetime default(getdate())
            ,constraint pk_zhid primary key(id,kcid)
        )
        
        insert into tb_xk(id,kcid) values('00000001','01')
        insert into tb_xk(id,kcid) values('00000001','02')
        insert into tb_xk(id,kcid) values('00000002','02')
        insert into tb_xk(id,kcid) values('00000003','01')
        insert into tb_xk(id,kcid) values('00000004','03')
        
        select * from tb_xs
        select * from tb_kc
        select * from tb_xk
        
        select tb_xs.id,tb_xs.name,tb_kc.kcid,tb_kc.kcname from tb_xs,tb_kc ,tb_xk
        where tb_xs.id = tb_xk.id and tb_kc.kcid=tb_xk.kcid and tb_xk.id='00000001'
    ----------------------------------
    --【学生表】
    --<约束>  
    -- primary key 主键 not null 非空 default 默认 unique 唯一性 check 检查  identity(初始值,增长值) 标识符
    create database mgg
    use mgg
    drop table Tb_xs
    create table Tb_xs
    (
        id char(8) primary key --主键 唯一可以区分不同记录的字段 只能有一个 不能为空
        ,name char(8) not null
        ,gender char(2) default('男') check(gender in ('男','女','x'))
        ,mobile char(11) unique check(len(mobile)=11 and mobile like '1[3,5,7,8][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
        --,mobile char(11) unique check(mobile like '[0-9]{11}')
    )
    unique--unique 唯一性可以多个,可以出现空值,但空值只能出现一次
    in--in 必须是这三个中的一个
    like--like 正则表达式
    len--函数 len(字段名或变量)结果给出长度(字符串的个数)

    insert into Tb_xs values('1','pite','女','15345678910')
    insert into Tb_xs values('2','tom','男','13345678920')
    insert into Tb_xs(id,name) values('3','didi')
    insert into Tb_xs(id,name,gender,mobile) values('4','didi','女','18181818181')

    delete from Tb_xs

    select * from Tb_xs
    ------------------------------
    --【学生信息】
    create database bb
    go
    use bb
    go
    --drop table Tb_xsxx
    create table Tb_xsxx
    (
        xsid char(10) primary key,--学生学号
        xsname char(10) not null,--学生姓名
    )
    insert into Tb_xsxx values('201401001','pig')
    insert into Tb_xsxx values('201401002','god')


    ---------------------
    --【课程信息】
    use bb
    --drop table Tb_xskc
    create table Tb_xskc
    (
        cid char(2) primary key,--课程编号
        cname char(20) not null,--编程名称
    )
    insert into Tb_xskc values ('01','sql数据库')
    insert into Tb_xskc values ('02','web前端')
    -------------------------------
    --【课程成绩】
    use bb
    --drop table Tb_xscj
    create table Tb_xscj
    (   --foreign key 可以省略,正规写法要加上
        xsid char(9) foreign key references Tb_xsxx(xsid) --on update cascade on delete 为学生学号创建外键
        ,cid char(2),--课程编号
        xsmark decimal(4,1)--学生成绩
        primary key(xsid,cid)--组合主键
    )
    insert into Tb_xscj values ('201401001','01',95.5)
    insert into Tb_xscj values ('201401002','02',100)
    insert into Tb_xscj values ('201401001','02',100)

    select xsid as 学生学号,xsname as 学生姓名 from Tb_xsxx
    select cid as 课程编号,cname as 课程名称 from Tb_xskc
    select xsid as 学生学号,cid as 课程编号,xsmark as 学生成绩 from Tb_xscj


    --外键所引用的必须为主键
    create database abc
    use abc
    create table a
    (
    a1 varchar(100) primary key
    ,a2 varchar(100)
    )

    create table b
    (
    b1 varchar(100) primary key
    ,b2 varchar(100) foreign key references a(a1/*a1必须为主键或唯一性(唯一性不规范)*/)-- on update cascade on delete
    ,b3 varchar(100)
    )
    ----------------------------------------
    --【修改约束】
    create database DB_XS
    use db_xs
    drop table tb_xsxx
    create table tb_xsxx
    (
        id int
        ,name char(8)
        ,sr date
        ,constraint /*constraint 约束*/ pk_id primary key(id)
        ,constraint ck_name check(len(name)>=2)
        ,constraint ck_sr check(sr>'1990-1-1')
        --,constraint df_sr default('1990-1-1')----确定添加不了
    )

    --drop 删除

    alter table tb_xsxx drop constraint ck_name

    alter table tb_xsxx drop constraint pk_id

    --add 添加

    alter table tb_xsxx
    add constraint ck_name check(len(name)>=2 and len(name)<=6)

    alter table ta_xsxx
    alter column c1 int not null

    alter table ta_xsxx
    add constraint pk_id primary key (id)

    /*创建视图来自多个基表,若有相同字段则要精确定义*/

    /*如果视图创建来自单个基表,那么通过视图
    可以操作(查询、增加、删除、更改)基表*/

    /*如果视图创建来自多个基表,那么通过视图
    操作(查询、增加、删除、更改)只能其中的一个基表,
    不可以同时操作的字段来自多个基表*/

    --声明和定义
    --(1)系统的全局变,@@开头,只能用不能改,用户不能定义
    select @@CONNECTIONS
    select @@ROWCOUNT--影响到的行数
    --(2)用户自定义变量 @开头
    declare @strfirst varchar(50)
    set @strfirst ='helle,sql'--select或者set赋值 set 不能一次赋多个值
    print @strfirst

    select @@ROWCOUNT
    go
    declare @iNum1 int, @iNum2 int,@@myint int
    select @iNum1=5,@iNum2=6
    set @@myint=8
    print @iNum1+@iNum2+@@myint
    go
    -----顺序 选择 循环
    /*
    if(表达式)
        begin
        end
    else
        begin
        end
    */
    declare @x int
    set @x=5
    if(@x<0)
       begin
        print('小于0')
       end
     else if(@x=0)
        begin
          print('0')
        end
    else
      begin
        print('大于0')
      end
        
    --------创建自定义函数--------------------
    ----格式
        create function 函数名
        (形参 as 数据类型,.....)
        returns 返回值的数据类型
        begin
          
        end
        ----阶乘实例
    ----显示每一个
    go
      declare @i int,@n int,@sum decimal(38,0)
      select @i=1 ,@n=10,@sum=1
      while(@i<=@n)
        begin
            set @sum=@sum*@i
            print  @sum
            set @i+=1
        end
    ----显示最后一个
    go
      declare @n int,@sum decimal(38,0)
      select @n=10,@sum=1
      while(0<@n)
        begin
            set @sum=@sum*@n
            set @n-=1
        end
        print  @sum    
    -----阶乘函数实例
    go
    create function jiechen
    (@m as int)
    returns bigint
    begin
            declare @i int,@n int,@sum decimal(38,0)
            select @i=1 ,@n=@m,@sum=1
            while(@i<=@n)
            begin
                set @sum=@sum*@i
                set @i+=1
            end
            return @sum
        end
    go
    print dbo.jiechen(10)
    ----函数
    /*
    getdate()--获取当前日期
    substring(str,i,n)--取几个开始
    charindex(str1,str2)--查询str2在str1里的第几个
    cast(表达式 as 数据类型)--强制转换
    convert(数据类型,表达式)--强制转换
    ltrim(字段) --从左边开始去空格
    rtrim(字段) --从右边开始去空格
    replace(字段,' ','')--替换
    */
    select ROUND(RAND()*10+1,0)--随机



    case 字段
        when 值 then 值
        
        else 值
        end
        
        
        
    --------【索引】---------

    --聚集索引只能有一个,因为一个基本表只能按照一个字段排序
    --一般用在那些字段?经常用来查询  主键 外键 经常用于连接的字段

    ------创建索引
    create clustered index 索引表名 on 表格(字段)
    create clustered index sy_sy on tb_sy(mz)

    ------删除索引
    alter table tb_sy
    drop constraint PK__tb_sy__32167A847F60ED59



    -----【存储过程】
    --优点: 对数据库立即访问的功能,可以加快程序的运行速度,实现模块化,
    ------可以减少网络流程,有利加密保护代码的安全性,可以提高数据库的安全性
            
    -----创建存储过程
    /*
    create procedure 过程名称
    参数=null
    as

    */


    use Northwind
    go
    create procedure up_getProductname
    @pid int
    as
    select productname from Products where ProductId=@pid
    go
    --在一个go区域中如果是首行直接用存储过程名称执行,如果是非首行,存储过程名称前+exec

    exec up_getproductname 2
    go
    ---删除存储过程
    drop procedure  up_getproductname
    go
    ---可为空的参数
    create procedure up_getProductnamenull
    @pid int=null
    as
    if(@pid is null)
        select 'id不能为空'
    else
        select productname from Products where ProductId=@pid
    go
    exec up_getproductnamenull
    -----有输出值的存储过程
    go
    create procedure up_getProductnameoutput
    @pid int=null,@productCount int output
    as
    begin
        if(@pid is null)
            select 'id不能为空'
        else
            select productname from Products where ProductId=@pid
        
        set @productCount=(select COUNT(*) from Products)
    end    
    go

    declare @pcount int
    exec up_getProductnameoutput 1,@pcount output
    select @pcount

    if OBJECT_ID('Northwind.dbo.up_getProductnameoutput','p') is not null


    ------【触发器】    trigger    书本P214
    --概念 它是一种特殊类型的存储过程,不能直接调用 要通过时间 只能在当前表创建
    --优点 它是自动执行  可以通过数据库中的相关表进行级联更改 触发器可以强制限制 可以引用其他表中的列  

    create database xg
    use xg

    create table cfq(c1 int)
    insert into cfq values(1)
    select * from cfq

    /*
    create trigger trigger_name
    on{table|view}
    [with encryption]
    {
        after insert|instead of    insert
        as
            
    }
    */
    drop trigger tri_cfq
    go
    create trigger tri_cfqin
    on cfq
    after insert
    as
        print '一条新的数据写入'
    go
    create trigger tri_cfqup
    on cfq
    after update
    as
        print '一条新的数据更新'
    go
    create trigger tri_cfqdel
    on cfq
    after delete
    as
        print '一条新的数据删除'
    go
    ----SQL Server触发器判断当前操作类型(insert/update/delete)
    create trigger tri_cfq
        on cfq
        after insert,update,delete
     as
     begin
         declare @inserted int, @deleted int
         select @inserted=COUNT(*) from inserted --刚插入的数据所在表
         select @deleted=COUNT(*) from deleted    --刚删除的数据所在表
         if @inserted>0 and @deleted=0
         begin
             print '一条新的数据写入'
         end
         if @inserted>0 and @deleted>0
         begin
              print '一条新的数据更新'
         end
         if @inserted=0 and @deleted>0
         begin
             print '一条新的数据删除'
         end
     end
     
    go
        insert into cfq values(4)
        update cfq set c1=3 where c1=4
        delete from cfq where c1=2
        select * from cfq
    go



    create table tb1_user
    (
        xh int,
        cj decimal(4,1)
    )
    drop trigger cfq_xs
    go
    create trigger  cfq_xs
    on tb1_user
    after insert
    as
    begin
        declare @cj int,@xh int
        select @cj= cj from inserted
        select @xh=xh from inserted
        if @cj>100 or @cj<0
         begin
            print '不能打印'
            delete from tb1_user where cj>100 or cj<0
         end
    end
    go
    create trigger cfq_xsdel
    on tb1_user
    instead of delete
    as
        print '就是不让你删哦'
    go
    go
    insert into tb1_user values (1,1)
    insert into tb1_user values(1,102),(2,100),(3,111)
    update tb1_user set cj=22 where xh=1
    delete from tb1_user

    select * from tb1_user

    -----【以下都是登录用户】(可以登录到引擎上即数据库服务器,此时还不能使用数据库)

    --window身份验证模式的登录帐号创建
    create login "ClOUD\201408225" from windows
    --sqlserver身份验证 登录帐号创建
    drop login aiai
    create login aiai with password='123',check_policy=off


    use DB_StudentManager
    go
    drop user db_aiai
    create user db_aiai for login aiai with default_schema=dbo

    --授权 aiai 可以创建表 grant

    grant create table to db_aiai
    grant select to db_aiai
    grant insert to db_aiai
    grant update to db_aiai
    grant delete to db_aiai
    --拒绝权限 deny
    deny delete to db_aiai
    --创建架构

    create schema schema_aiai authorization db_aiai



    SQL 技巧

    --字符串去连续空格

    select string = replace(replace(replace(' select   single       spaces',' ','<>'),'><',''),'<>',' ')
  • 相关阅读:
    两种存储思路
    越来越浅
    我了解的前端史
    关于称赞小孩
    怎么写递归
    Python笔记(十八):协程asyncio
    网络协议笔记(一):HTTP协议基础知识
    Linux笔记(三):常用命令
    算法笔记(九):二分查找
    数据结构笔记(二):栈、队列
  • 原文地址:https://www.cnblogs.com/miaololi/p/5503995.html
Copyright © 2011-2022 走看看