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

工作經常使用的SQL整理

系統 1875 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條評論
主站蜘蛛池模板: 国产成人精品午夜二三区 | 久草在线中文最新视频 | 日韩中文字幕精品一区在线 | 高清欧美一区二区免费影视 | 国产一级精品高清一级毛片 | 国产级a爱做片免费观看 | 久久久久久久久综合影视网 | www久久久 | 日韩欧美高清一区 | 久久精品国产亚洲高清 | 日韩国产欧美在线观看 | 99精品久久精品一区二区 | 亚洲综合一 | 久久99精品久久久久久 | 欧美高清一区二区 | 亚洲天堂国产精品 | 天海翼一区二区在线观看 | 热99热| 伊人激情久久综合中文字幕 | 99国产精品九九视频免费看 | 亚洲精品日韩中文字幕久久久 | 日本免费人成黄页网观看视频 | 亚洲精品色一区色二区色三区 | 麻豆精品一区二区三区免费 | 一本色道久久综合一区 | 99久久综合狠狠综合久久aⅴ | 国产精品福利在线观看入口 | 久久精品国产99国产精品澳门 | 特黄aa级毛片免费视频播放 | 人人澡人人澡人人看欧美 | 一级aaaaaa毛片免费 | 日韩美女视频一区 | 91精品成人免费国产片 | 欧美性影院 | 奇米综合 | 九九久久视频 | 成人久久18免费网站游戏 | 日本香蕉视频在线观看 | 国产精品怡红院永久免费 | 国产一级特黄高清免费大片 | 国产成人精品一区二区视频 |