工作经常使用的SQL整理,实战篇(一)

系统 1659 0
原文: 工作经常使用的SQL整理,实战篇(一)[原创]

工作经常使用的SQL整理,实战篇,地址一览:

工作经常使用的SQL整理,实战篇(一)

工作经常使用的SQL整理,实战篇(二)

工作经常使用的SQL整理,实战篇(三)

 

目录概览:

1.数据库

2.表

3.临时表

4.索引和约束

5.范式

6.增删改查

7.连接

8.分组和排序

9.通配符

10.视图

11.存储过程和事务

12.游标

13.触发器

14.作业

 

  自己亲手编写的一些常用的SQL,希望对大家有用喔,废话不多说了,直接入正题~

1.数据库

  创建数据库

      
        use
      
      
         master

  
      
      
        if
      
      
        exists
      
      (
      
        select
      
      
        *
      
      
        from
      
       sysdatabases 
      
        where
      
       name 
      
        =
      
      
        '
      
      
        OrderDB
      
      
        '
      
      
        )

      
      
      
        drop
      
      
        database
      
      
         OrderDB

  
      
      
        create
      
      
        database
      
      
         OrderDB

  
      
      
        on
      
      
        

  (

      name
      
      
        =
      
      
        '
      
      
        OrderDB_data
      
      
        '
      
      
        ,

      filename 
      
      
        =
      
      
        '
      
      
        D:\DB\OrderDB_data.mdf
      
      
        '
      
      
        ,

      size
      
      
        =
      
      
        10
      
      
        ,

      filegrowth
      
      
        =
      
      
        15
      
      
        %
      
      
        

  )

  
      
      
        log
      
      
        on
      
      
        

  (

      name
      
      
        =
      
      
        '
      
      
        OrderDB_log
      
      
        '
      
      
        ,

      filename
      
      
        =
      
      
        '
      
      
        D:\DB\OrderDB_log.ldf
      
      
        '
      
      
        ,

      size
      
      
        =
      
      
        3
      
      
        ,

      filegrowth
      
      
        =
      
      
        10
      
      
        %
      
      
        

  )
      
    

  删除数据库

      
        drop
      
      
        database
      
       OrderDB
    

2.表

创建表

        --用户表  
      
  if exists ( select * from sysobjects where name = ' Tse_User ' )    drop table Tse_User    Create table Tse_User   (    ID int identity ( 1 , 1 ),    UserID int not null ,    UserName varchar ( 64 ) not null ,    RealName varchar ( 64 ) null ,    PRIMARY KEY (UserID)   )

 

      
        --
      
      
        产品表
      
      
        if
      
      
        exists
      
       (
      
        select
      
      
        *
      
      
        from
      
       sysobjects 
      
        where
      
       name 
      
        =
      
      
        '
      
      
        Tse_Product
      
      
        '
      
      
        )

      
      
      
        drop
      
      
        table
      
      
         Tse_Product

  
      
      
        Create
      
      
        table
      
      
         Tse_Product

  (

      ID 
      
      
        INT
      
      
        IDENTITY
      
      (
      
        1
      
      ,
      
        1
      
      
        ),

      ProductID 
      
      
        varchar
      
      (
      
        64
      
      ) 
      
        not
      
      
        null
      
      
        ,

      ProductName 
      
      
        varchar
      
      (
      
        256
      
      ) 
      
        not
      
      
        null
      
      
        ,

      Price 
      
      
        float
      
      
        not
      
      
        null
      
      
        ,

      Storage 
      
      
        int
      
      
        not
      
      
        null
      
      ,      
      
        --
      
      
        库存
      
      
        PRIMARY
      
      
        KEY
      
      
        (ProductID)

  )
      
    

 

      
        --
      
      
        订单表
      
      
        if
      
      
        exists
      
       (
      
        select
      
      
        *
      
      
        from
      
       sysobjects 
      
        where
      
       name 
      
        =
      
      
        '
      
      
        Tse_Order
      
      
        '
      
      
        )

      
      
      
        drop
      
      
        table
      
      
         Tse_Order

  
      
      
        Create
      
      
        table
      
      
         Tse_Order

  (

      ID 
      
      
        int
      
      
        identity
      
      (
      
        1
      
      ,
      
        1
      
      
        ),

      OrderID 
      
      
        varchar
      
      (
      
        64
      
      ) 
      
        not
      
      
        null
      
      
        ,

      UserID 
      
      
        int
      
      
        not
      
      
        null
      
      
        ,

      ProductID 
      
      
        varchar
      
      (
      
        64
      
      ) 
      
        not
      
      
        null
      
      
        ,

      
      
      
        Number
      
      
        int
      
      
        not
      
      
        null
      
      ,             
      
        --
      
      
        购买数量
      
      

      PostTime 
      
        datetime
      
      
        not
      
      
        null
      
      
        ,

      
      
      
        PRIMARY
      
      
        KEY
      
      
        (OrderID),

      
      
      
        FOREIGN
      
      
        KEY
      
       (UserID) 
      
        REFERENCES
      
      
         Tse_User(UserID),

      
      
      
        FOREIGN
      
      
        KEY
      
       (ProductID) 
      
        REFERENCES
      
      
         Tse_Product(ProductID)

  )
      
    

  删除表

      
        drop
      
      
        table
      
       Tse_User
    

  清空表

truncate   table   Tse_User     清除表中所有数据,下次插入编号从 1 开始

delete   from   Tse_User       清除表中所有数据,但下次插入编号从原有编号 +1 开始

3.临时表

生成临时表,插入数据,将员工姓名全部打印出来

      
        use
      
      
         master

  
      
      
        go
      
      
        create
      
      
        table
      
      
         #Employee

  (

      ID 
      
      
        int
      
      
        identity
      
      (
      
        1
      
      ,
      
        1
      
      
        ),

      Name 
      
      
        varchar
      
      (
      
        64
      
      ) 
      
        not
      
      
        null
      
      
        ,

      
      
      
        primary
      
      
        key
      
      
         (ID)

  )

  
      
      
        insert
      
      
        into
      
       #Employee(Name) 
      
        values
      
      (
      
        '
      
      
        zhangsan
      
      
        '
      
      
        )

  
      
      
        insert
      
      
        into
      
       #Employee(Name) 
      
        values
      
      (
      
        '
      
      
        lisi
      
      
        '
      
      
        )

  
      
      
        insert
      
      
        into
      
       #Employee(Name) 
      
        values
      
      (
      
        '
      
      
        wangwu
      
      
        '
      
      
        )

  
      
      
        insert
      
      
        into
      
       #Employee(Name) 
      
        values
      
      (
      
        '
      
      
        tony
      
      
        '
      
      
        )

  
      
      
        insert
      
      
        into
      
       #Employee(Name) 
      
        values
      
      (
      
        '
      
      
        mike
      
      
        '
      
      
        )

  

  
      
      
        declare
      
      
        @i
      
      
        int
      
      
        declare
      
      
        @Name
      
      
        varchar
      
      (
      
        64
      
      
        )

  
      
      
        declare
      
      
        @Count
      
      
        int
      
      
        declare
      
      
        @Str
      
      
        nvarchar
      
      (
      
        4000
      
      
        )

  
      
      
        set
      
      
        @i
      
      
        =
      
      
        0
      
      
        select
      
      
        @Count
      
      
        =
      
      
        COUNT
      
      (
      
        0
      
      ) 
      
        from
      
      
         #Employee

  
      
      
        while
      
      (
      
        @i
      
      
        <
      
      
        @Count
      
      
        )

  
      
      
        begin
      
      
        set
      
      
        @Str
      
      
        =
      
      
        '
      
      
        select top 1 @Name = Name from #Employee where id not in (select top 
      
      
        '
      
      
        +
      
      
        STR
      
      (
      
        @i
      
      ) 
      
        +
      
      
        '
      
      
        id from #Employee)
      
      
        '
      
      
        exec
      
       sp_executesql 
      
        @Str
      
       ,N
      
        '
      
      
        @Name varchar(64) output
      
      
        '
      
      , 
      
        @Name
      
      
         output

      
      
      
        select
      
      
        @Name
      
      , 
      
        @i
      
      
        set
      
      
        @i
      
      
        =
      
      
        @i
      
      
        +
      
      
        1
      
      
        End
      
      
      
    

  查看表结构及表附加属性
  SP_HELP Tse_User

4.索引和约束

聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

非聚集 索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。 一个表可以创建多个非聚集索引。

创建聚集索引

CREATE   UNIQUE   CLUSTERED   INDEX   [PK_Tse_ID]   ON   [dbo] . [Tse_User]  

(   -- 唯一聚集索引

[ID]   ASC

) WITH  ( PAD_INDEX    =   OFF ,   STATISTICS_NORECOMPUTE    =   OFF ,   SORT_IN_TEMPDB   =   OFF ,   IGNORE_DUP_KEY   =   OFF ,   DROP_EXISTING   =   OFF ,

  ONLINE   =   OFF , ALLOW_ROW_LOCKS    =   ON ,   ALLOW_PAGE_LOCKS    =   ON )   ON   [PRIMARY]

GO

 

创建非聚集索引

CREATE   UNIQUE   NONCLUSTERED   INDEX   [IX_Tse_UserID]   ON   [dbo] . [Tse_User]  

(   -- 唯一非聚集索引

[UserID]   ASC

) WITH  ( PAD_INDEX    =   OFF ,   STATISTICS_NORECOMPUTE    =   OFF ,   SORT_IN_TEMPDB   =   OFF ,   IGNORE_DUP_KEY   =   OFF ,   DROP_EXISTING   =   OFF ,  

ONLINE   =   OFF ,   ALLOW_ROW_LOCKS    =   ON ,   ALLOW_PAGE_LOCKS    =   ON )   ON   [PRIMARY]

GO

 

约束

alter   table   Tse_User

add   constraint   CS_UserName   check  ( len ( Username )   >  3 ),

constraint   CS_Email   check  ( charindex ( '@' ,   Email )   >  0 )

5.范式

  第一范式 1NF

  第一范式需满足两个条件:

  1)每个数据行必须包含具有原子性(即不可再分)的值;

  2)每个数据行必须包含一个独一无二的值,即主键。

  举例:假如客户表中存在地址列,如果经常需要按城市归类,那么,应该地址列拆分为省份,城市,县,街道地址等列。

 

  第二范式 2NF

  第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种    数据,不可以把多种数据保存在同一张数据库表中。

  举例:比如常用的选课表中,以学号和课程号为联合主键,不能将课程名,学分等课程相关信息写入选课表,因为他们只与主键的一部分(课程号)相关。

 

  第三范式 3NF

  第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

  举例:订单表中以订单号为主键,用户真实姓名和邮箱等信息与用户有关,与订单没有直接关系,因此,用户真实姓名和邮箱等不能放到订单表中。

  由于时间关系,余下的几个问题在下一篇中讨论,谢谢关注~,下一篇地址为: 工作经常使用的SQL整理,实战篇(二)

  如果您有什么问题,欢迎在下面评论,我们一起讨论,谢谢~

  如果您觉得还不错,不妨点下右下方的推荐,有您的鼓励我会继续努力的~

 

 

 

 

 

工作经常使用的SQL整理,实战篇(一)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论