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

原文:工作经常使用的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整理,实战篇(二)

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

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

 

 

 

 

 

时间: 2025-01-05 07:15:29

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

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

原文:工作经常使用的SQL整理,实战篇(二)[原创] 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三)   接着上一篇"工作经常使用的SQL整理,实战篇(一)"继续讨论,这一篇中主要讨论增删改查,连接,分组和排序,通配符,视图,存储过程和事务,游标,触发器这些东西. 6.增删改查 插入 --插入用户表数据 insert into Tse_User(UserID, User

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

原文:工作经常使用的SQL整理,实战篇(三)[原创] 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三)   接着本系列前面两篇继续讨论. 有时候当你需要定时处理数据库数据时,你会怎么做呢?当然你可以手工编写一个程序去完成任务,但写程序既需要时间也需要考验程序的稳定性,这里,介绍一种快捷的方法,这里只介绍SQL SERVER数据库中建立作业的方法,其他数据库我相信也有这个功能. 14

Java中jqGrid 学习笔记整理——进阶篇(二)_java

相关阅读: Java中jqGrid 学习笔记整理--进阶篇(一) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2. 2.创建表 双击打

JBuilder9+Weblogic7实战篇之工具篇(JDBC 1)

JBuilder9+Weblogic7实战篇<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 工具篇(配置JDBC 1)                                                                              作者:黄 凯         E_mail:hk_sz@163.com Weblogic7中配置J

高可用的MongoDB集群-实战篇

1.概述 最近有同学和网友私信我,问我MongoDB方面的问题:这里我整理一篇博客来赘述下MongoDB供大家学习参考,博客的目录内容如下: 基本操作 CRUD MapReduce 本篇文章是基于MongoDB集群(Sharding+Replica Sets)上演示的,故操作的内容都是集群层面的,所以有些命令和单独的使用MongoDB库有异样.具体集群搭建可以参考我写的<高可用的MongoDB集群>. 2.基本操作 常用的 Shell 命令如下所示: db.help() # 数据库帮助 db.

菜鸟也能飞:SQL数据库实战专业教程(三)

七.详细设计 详细设计还得从数据库开始.作为专业菜鸟,我们要把所有的SQL语句都放在存储过程当中,不要放在程序里.这样做的好处是:容易修改.维护,执行速度快.减少数据传输量.存储过程可以简单的理解为在SQL服务器上创建小函数,它们有名字.参数,通过调用这些小函数,我们可以完成对表的增.删.查.改操作,相当于把SQL语句放在了服务器上,并且是经过编译的,执行速度快.在程序中,我们不必再写复杂的SQL语句,直接写存储过程名称就可以了. 具体如何使用存储过程,可以参考这篇博文:http://www.5

学习 ASP.NET MVC (第三回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 创建Controllers和Views我们再次回顾下ASP.NET MVC的基本工作流程:URL-->Controller(会执行一个方法Action)-->从数据库中获取一个Model对象-->将Model作为ViewData传递给V

关于下载GAE High Replication Datastore数据[实战篇]下

通过bulk loader可以批量上传下载数据,GAE支持xml,csv格式数据批量上传,以及xml,csv和文本 格式下载. 你可以选择自动生成一个bulkloader.yaml,或者手动编码来写一个bulk loader.谷歌不推荐手动编 写,个人也觉得自动生成才是王道. 如何自动生成bulkloader.yaml bulkloader.yaml是一个描述数据格式的配置文件,格式例如xml或csv.bulk loader进行数据导入时 需要这个配置文件来将外部数据(xml或csv)转换为中间

[PhalApi实战篇(1)]Redis队列处理异步任务

[PhalApi实战篇(1)]Redis队列处理异步任务 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 哈喽大家好呀!之前编写的PhalApi入门篇和进阶篇已经过去了好久了,在此之间也回答了很多小伙伴各种各样的问题,这里也希望吧里面一些问的比较多的和比较有趣的以及笔者在使用PhalApi一些新的体会,都提取出来为大家带来一些能够在实际开发中可以使用的技术或思想,那么我们就开始我们实战篇中的第一节 Redis队列处理异步任务 大家希望喵咪在Pha