zoukankan      html  css  js  c++  java
  • 工作经常使用的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:DBOrderDB_data.mdf',
          size=10,
          filegrowth=15%
      )
      log on
      (
          name='OrderDB_log',
          filename='D:DBOrderDB_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整理,实战篇(二)

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

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

     

     

     

  • 相关阅读:
    wxpython仿写记事本
    HIVE提交command过程图
    SQL编辑器自动提醒实现
    hive.sh的内容分析
    Hive配置项的含义详解(5)
    比特币、莱特币来一发?
    引导孩子从“打针有点疼”开始
    For Wife
    我是真的爱你
    .net core 添加本地dll
  • 原文地址:https://www.cnblogs.com/lfxiao/p/6876742.html
Copyright © 2011-2022 走看看