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

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

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

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

  接着上一篇“工作经常使用的SQL整理,实战篇(一)”继续讨论,这一篇中主要讨论增删改查,连接,分组和排序,通配符,视图,存储过程和事务,游标,触发器这些东西。

6.增删改查

插入

--插入用户表数据

insertintoTse_User(UserID,UserName,RealName,Email,Mobile)

values(111,'zhangsan','zhangsan','zs@126.com','')

--插入产品表数据

INSERTINTOTse_Product(ProductID,ProductName,Price,Storage)

VALUES('PD00030','Benz',500500.0,30000)

 

--插入订单表数据

declare@OrderIDVARCHAR(64)

--将年,月,日,时,分,秒,毫秒以字符串形式连接起来作为订单号

  SET@OrderID=DATENAME(YEAR,GETDATE())+DATENAME(MONTH,GETDATE())+DATENAME(DAY,GETDATE())+

  DATENAME(HOUR,GETDATE())+DATENAME(MINUTE,GETDATE())+DATENAME(SECOND,GETDATE())+DATENAME(MILLISECOND,GETDATE())

  INSERTINTOTse_Order(OrderID,UserID,ProductID,Number,PostTime)

  VALUES(@OrderID,115,'PD00040',10,GETDATE())

修改

UpdateTse_UsersetRealName='李四'whereUserID=112

删除

DeletefromTse_UserWhereUserID=111

简单查询

select*fromTse_Userwith(nolock)

select*fromTse_Orderwith(nolock)whereID>=2

7.连接

内连接

--左右表匹配的行

SELECT*FROMTse_OrderASOWITH(NOLOCK)

INNERJOINTse_UserASUWITH(NOLOCK)ONO.UserID=U.UserID

WHEREU.UserID=111

左连接(左外连接)

--左边表中所有行,右边匹配左边,右边为空的补NULL

SELECT*FROMTse_UserASUWITH(NOLOCK)

LEFTJOINTse_OrderASOWITH(NOLOCK)ONU.UserID=O.UserID

右连接(右外连接)

--右边表中所有行,左边匹配右边,左边为空的补NULL

SELECT*FROMTse_OrderASOWITH(NOLOCK)

RIGHTJOINTse_ProductASPWITH(NOLOCK)ONO.ProductID=P.ProductID

全连接

--左右表所有行,为空的补NULL

SELECT*FROMTse_OrderASOWITH(NOLOCK)

FULLJOINTse_ProductASPWITH(NOLOCK)ONO.ProductID=P.ProductID

8.分组和排序

UserID分组

SELECTUserID,COUNT(0)ASNumberFROMTse_OrderWITH(NOLOCK)GROUPBYUserID

UserID分组,订单数量大于等于3

SELECTUserID,COUNT(0)ASNumberFROMTse_OrderWITH(NOLOCK)GROUPBYUserIDHAVINGCOUNT(0)>=3

UserID分组,订单数量大于等于1,按订单数量升序

SELECTUserID,COUNT(0)ASNumberFROMTse_OrderWITH(NOLOCK)GROUPBYUserIDHAVINGCOUNT(0)>=1ORDERBYNumberASC

9.通配符

LIKE:匹配多个未知字符

_:匹配一个未知字符

--匹配126邮箱的

SELECT*FROMTse_UserWITH(NOLOCK)WHEREEmailLIKE'%@126.com'

  --匹配所有包含@的邮箱

  SELECT*FROMTse_UserWITH(NOLOCK)WHEREEmailLIKE'%@%'

  --匹配16开头,后面跟一个任意字符的邮箱

  SELECT*FROMTse_UserWITH(NOLOCK)WHEREEmailLIKE'%@16_.com'

--匹配除126以外的所有邮箱

SELECT*FROMTse_UserWITH(NOLOCK)WHEREEmailNOTLIKE'%@126.com'

10.视图

  删除视图

  IFEXISTS(SELECT*FROMSYSOBJECTSWHEREName='V_Tse_TotalInfo')

  DROPVIEWV_Tse_TotalInfo

  创建视图

--包含用户表,产品表和订单表关联后的所有信息

  CREATEVIEWV_Tse_TotalInfo

  AS

  SELECTO.OrderID,O.UserID,O.ProductID,O.PostTime,U.UserName,U.RealName,

  U.Email,U.Mobile,P.ProductName,P.PriceFROMTse_OrderASOWITH(NOLOCK)

  INNERJOINTse_UserASUWITH(NOLOCK)ONO.UserID=U.UserID

  INNERJOINTse_ProductASPWITH(NOLOCK)ONO.ProductID=P.ProductID

11.存储过程和事务

创建存储过程,先删除订单表(外键表)中的记录,再删除产品表(主键表)中的记录

  CREATE PROCEDURE [dbo].[SC_Tse_DeleteProduct]
  (
      @ProductID VARCHAR(64),
      @Result int output
  )
  AS
  BEGIN
      SET NOCOUNT ON;
  
      BEGIN TRAN   --开始事务
      BEGIN
          DELETE FROM Tse_Order WHERE ProductID = @ProductID
          
          DELETE FROM Tse_Product WHERE ProductID = @ProductID
          
          IF (@@ERROR <> 0)
          BEGIN
              SET @Result = -999
              ROLLBACK TRAN   --回滚
          END
          ELSE
          BEGIN
              SET @Result = 888
              COMMIT TRAN     --提交
          END
      END
  END

更多相关文章

  1. Mysql 范式、索引、视图、事务、sp等概念简介
  2. 如何在drupal视图中添加DISTINCT,GROUP BY子句
  3. 抱SQL SERVER大腿之我爱用视图(对大数据量的管理)
  4. 创建视图时ORA-01031
  5. 自定义视图(组合控件)
  6. RecycleView的多视图Epoxy库
  7. android listview多视图嵌套多视图
  8. Android - Espresso -滚动到非列表视图项。
  9. 导航架构组件 - 具有CollapsingToolbar的详细信息视图

随机推荐

  1. 关于golang读写锁
  2. 关于golang之排序使用
  3. 【发布了Go-carbon1.1.1版本】完善对主流
  4. 关于Go语言的http/2服务器功能及客户端使
  5. 关于Go SQL中的Query、Exec和Prepare使用
  6. 教你使用Golang和lua实现一个值班机器人
  7. gin框架有什么优势
  8. windows10下编译go项目为linux可执行文件
  9. 分享一些为PHPer准备的Go入门知识
  10. 关于 golang 的接口介绍