亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

工作經常使用的SQL整理,實戰篇(二)

系統 1903 0
原文: 工作經常使用的SQL整理,實戰篇(二)[原創]

工作經常使用的SQL整理,實戰篇,地址一覽:

工作經常使用的SQL整理,實戰篇(一)

工作經常使用的SQL整理,實戰篇(二)

工作經常使用的SQL整理,實戰篇(三)

?

  接著上一篇“ 工作經常使用的SQL整理,實戰篇(一) ”繼續討論,這一篇中主要討論增刪改查,連接,分組和排序,通配符,視圖,存儲過程和事務,游標,觸發器這些東西。

6.增刪改查

插入

-- 插入用戶表數據

insert ? into ? Tse_User ( UserID , ? UserName , ? RealName , ? Email , ? Mobile )

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

?

-- 插入產品表數據

INSERT ? INTO ? Tse_Product ( ProductID , ? ProductName , ? Price , ? Storage )

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

-- 插入訂單表數據

declare ? @OrderID ? VARCHAR ( 64 )

?

-- 將年,月,日,時,分,秒,毫秒以字符串形式連接起來作為訂單號

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

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

  INSERT ? INTO ? Tse_Order ( OrderID , ? ? UserID , ? ? ProductID , ? ? Number , ? ? PostTime )

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

?

修改

Update ? Tse_User ? set ? RealName ? = ? ' 李四 ' ? where ? UserID ? = ?112

?

刪除

Delete ? from ? Tse_User ? Where ? UserID ? = ?111

?

簡單查詢

select ? * ? from ? Tse_User ? with ( nolock )

select ? * ? from ? Tse_Order ? with ( nolock ) ? where ? ID ? >= ?2

?

7.連接

內連接

-- 左右表匹配的行

SELECT ? * ? FROM ? Tse_Order ? AS ? O ? WITH ( NOLOCK )

INNER ? JOIN ? Tse_User ? AS ? U ? WITH ( NOLOCK ) ? ON ? O . UserID ? = ? U . UserID

WHERE ? U . UserID ? = ?111

?

左連接(左外連接)

-- 左邊表中所有行,右邊匹配左邊 ,? 右邊為空的補 NULL

SELECT ? * ? FROM ? Tse_User ? AS ? U ? WITH ( NOLOCK )

LEFT ? JOIN ? Tse_Order ? AS ? O ? WITH ( NOLOCK ) ? ON ? U . UserID ? = ? O . UserID

?

右連接(右外連接)

-- 右邊表中所有行,左邊匹配右邊,左邊為空的補 NULL

SELECT ? * ? FROM ? Tse_Order ? AS ? O ? WITH ( NOLOCK )

RIGHT ? JOIN ? Tse_Product ? AS ? P ? WITH ( NOLOCK ) ? ON ? O . ProductID ? = ? P . ProductID

?

全連接

-- 左右表所有行,為空的補 NULL

SELECT ? * ? FROM ? Tse_Order ? AS ? O ? WITH ( NOLOCK )

FULL ? JOIN ? Tse_Product ? AS ? P ? WITH ( NOLOCK ) ? ON ? O . ProductID ? = ? P . ProductID

8.分組和排序

UserID 分組

SELECT ? UserID , ? COUNT ( 0 ) ? AS ? Number ? FROM ? Tse_Order ? WITH ( NOLOCK ) ? GROUP ? BY ? UserID ?

?

UserID 分組,訂單數量大于等于 3

SELECT ? UserID , ? COUNT ( 0 ) ? AS ? Number ? FROM ? Tse_Order ? WITH ( NOLOCK ) ? GROUP ? BY ? UserID ? HAVING ? COUNT ( 0 ) ? >= 3

?

UserID 分組,訂單數量大于等于 1 ,按訂單數量升序

SELECT ? UserID , ? COUNT ( 0 ) ? AS ? Number ? FROM ? Tse_Order ? WITH ( NOLOCK ) ? GROUP ? BY ? UserID ? HAVING ? COUNT ( 0 ) ? >= 1? ORDER ? BY ? Number ? ASC

?

9.通配符

LIKE :匹配多個未知字符

_ :匹配一個未知字符

?

-- 匹配 126 郵箱的

SELECT ? * ? FROM ? Tse_User ? WITH ( NOLOCK ) ? WHERE ? Email ? LIKE ? '%@126.com'

?

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

  SELECT ? * ? FROM ? Tse_User ? WITH ( NOLOCK ) ? WHERE ? Email ? LIKE ? '%@%'

?

  -- 匹配 16 開頭,后面跟一個任意字符的郵箱

  SELECT ? * ? FROM ? Tse_User ? WITH ( NOLOCK ) ? WHERE ? Email ? LIKE ? '%@16_.com'

?

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

SELECT ? * ? FROM ? Tse_User ? WITH ( NOLOCK ) ? WHERE ? Email ? NOT ? LIKE ? '%@126.com'

?

10.視圖

  刪除視圖

  IF ? EXISTS ? ( SELECT ? * ? FROM ? SYSOBJECTS ? WHERE ? Name ? = ? 'V_Tse_TotalInfo' )

  DROP ? VIEW ? V_Tse_TotalInfo

?

  創建視圖

-- 包含用戶表,產品表和訂單表關聯后的所有信息

  CREATE ? VIEW ? V_Tse_TotalInfo

  AS

  SELECT ? O . OrderID , ? O . UserID , ? O . ProductID , ? O . PostTime , ? U . UserName , ? U . RealName ,

  U . Email , ? U . Mobile , ? P . ProductName , ? P . Price ? FROM ? Tse_Order ? AS ? O ? WITH ( NOLOCK ) ?

  INNER ? JOIN ? Tse_User ? AS ? U ? WITH ( NOLOCK ) ? ON ? O . UserID ? = ? U . UserID

  INNER ? JOIN ? Tse_Product ? AS ? P ? WITH ( NOLOCK ) ? ON ? O . 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
      
    

?

12 .游標

獲取所有產品的名字,以‘ | ’分隔,包含在輸出參數 @Names

      
        CREATE
      
      
        PROCEDURE
      
      
         SC_Tse_GetProductNames

    (

        
      
      
        @Names
      
      
        varchar
      
      (
      
        max
      
      
        ) OUTPUT

    ) 

    
      
      
        AS
      
      
        BEGIN
      
      
        SET
      
       NOCOUNT 
      
        ON
      
      
        ;

        
      
      
        declare
      
      
        @ProductName
      
      
        varchar
      
      (
      
        64
      
      
        )

        
      
      
        declare
      
       curTest 
      
        cursor
      
      
        for
      
       (
      
        select
      
       ProductName 
      
        from
      
      
         Tse_Product)

        
      
      
        open
      
       curTest                
      
        --
      
      
        打開游標
      
      
        fetch
      
      
        next
      
      
        from
      
       curTest 
      
        into
      
      
        @ProductName
      
      
        while
      
      
        @@fetch_status
      
      
        =
      
      
        0
      
      
        --
      
      
        獲取成功
      
      
        begin
      
      
        if
      
       (
      
        @ProductName
      
      
        is
      
      
        not
      
      
        null
      
      
        and
      
      
        @ProductName
      
      
        <>
      
      
        ''
      
      
        )

            
      
      
        begin
      
      
        if
      
       (
      
        @Names
      
      
        is
      
      
        null
      
      
        or
      
      
        @Names
      
      
        =
      
      
        ''
      
      
        )

                
      
      
        begin
      
      
        set
      
      
        @Names
      
      
        =
      
      
        @ProductName
      
      
        end
      
      
        else
      
      
        begin
      
      
        set
      
      
        @Names
      
      
        =
      
      
        @Names
      
      
        +
      
      
        '
      
      
        |
      
      
        '
      
      
        +
      
      
        @ProductName
      
      
        end
      
      
        end
      
      
        fetch
      
      
        next
      
      
        from
      
       curTest 
      
        into
      
      
        @ProductName
      
      
        end
      
      
        close
      
       curTest            
      
        --
      
      
        關閉游標
      
      
        deallocate
      
       curTest        
      
        --
      
      
        釋放游標
      
      
        END
      
    

?

13.觸發器

因為用戶編號在訂單表中為外鍵,所以,直接刪除某個用戶時,如果該用戶下了訂單,就會提示有外鍵不能刪除。針對這種情況,可以考慮使用觸發器。

創建觸發器,刪除用戶表中用戶時,會自動先刪除訂單表中的訂單

      
        CREATE
      
      
        TRIGGER
      
      
         TR_Tse_DelUser

    
      
      
        ON
      
      
         Tse_User

    INSTEAD 
      
      
        OF
      
      
        DELETE
      
      
        --
      
      
        代替默認的刪除
      
      
        AS
      
      
        BEGIN
      
      
        SET
      
       NOCOUNT 
      
        ON
      
      
        DELETE
      
      
        FROM
      
       Tse_Order 
      
        WHERE
      
       UserID 
      
        IN
      
       (
      
        SELECT
      
       UserID 
      
        FROM
      
      
         Deleted)

        
      
      
        DELETE
      
      
        FROM
      
       Tse_User 
      
        WHERE
      
       UserID 
      
        IN
      
       (
      
        SELECT
      
       UserID 
      
        FROM
      
      
         Deleted)

  
      
      
        END
      
    

  ? 使用觸發器, 添加訂單時,產品表庫存相應減少

      
        CREATE
      
      
        TRIGGER
      
      
         TR_Tse_ADDOrder

    
      
      
        ON
      
      
         Tse_Order

    AFTER 
      
      
        INSERT
      
      
        AS
      
      
        BEGIN
      
      
        UPDATE
      
       Tse_Product 
      
        SET
      
       Storage 
      
        =
      
       Storage 
      
        -
      
       (
      
        SELECT
      
      
        Number
      
      
        FROM
      
      
         INSERTED)

        
      
      
        WHERE
      
       ProductID 
      
        IN
      
       (
      
        SELECT
      
       ProductID 
      
        FROM
      
      
         INSERTED)

  
      
      
        END
      
    

  關于SQL定時作業部門的介紹,請看“ 工作經常使用的SQL整理,實戰篇(三) ”~

  如果您有什么問題,歡迎在下面評論,我們一起討論,謝謝~

  如果您覺得還不錯,不妨點下右下方的推薦,有您的鼓勵我會繼續努力的~

?

?

?

?

?

?

工作經常使用的SQL整理,實戰篇(二)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 高清不卡免费一区二区三区 | 国产69精品久久久久99尤物 | 久久精品日日躁精品 | 九九热最新视频 | 色偷偷亚洲天堂 | 九九视频这里只有精品 | 久久国产视频在线观看 | 婷婷色视频| 大美女久久久久久j久久 | 天天夜碰日日摸日日澡 | 成人永久免费视频网站在线观看 | 一级欧美毛片成人 | 欧美一区二区三区精品国产 | 亚洲激情综合 | 成年网站视频在线观看 | 亚洲欧美另类视频 | 久久婷婷激情综合中文字幕 | 狠狠色丁香婷婷综合精品视频 | 国产精品五月天 | 亚洲精品tv久久久久 | 日本热久久 | 99精品亚洲| 久久精品国产99精品最新 | 欧洲激情乱子伦 | 狠狠色噜噜狠狠狠狠97不卡 | 久久精品亚瑟全部免费观看 | 国产啪视频1000部免费视频 | 国产在线视频一区 | 午夜体验 | 亚洲专区欧美 | 日本又黄又爽又色的视频免费 | 日本一级爽爽爽爽 | 波多野结衣一区二区三区在线观看 | 日韩欧美成末人一区二区三区 | 亚洲干综合 | 国产麻豆精品高清在线播放 | 亚洲精品tv久久久久久久久 | 热99视频 | 99久久免费中文字幕精品 | 久久精品国产精品亚洲婷婷 | 亚洲国产女人aaa毛片在线 |