DML_Modifying Data Through Table Expressions_UPDATE

DML_Modifying Data Through Table Expressions_UPDATE
之前也学习过使用CTE,再来泛泛的学习下,
最后将会将一些书籍上或学习到的CTE来个小结

/*
     Microsoft SQL Server 2008 T-SQL Fundamentals_CN
     Microsoft SQL Server 2008 T-SQL Fundamentals
*/

--以Northwind库下的Customers表为例,说明CTE的用法
SELECT *
FROM Customers
------------------------------------------------------------------------------------------
--它的内部查询返回所有来自 USA 的客户,外部查询则选择了CTE中的所有行
--与派生表一样,一旦外部查询完成,CTE的声明期也就结束了     (将会专开一篇学习Derived Table)

WITH <CTE_Name>[(<target_column_list>)]
AS
(
<inner_query_defining_CTE>
)
<outer_query_against_CTE>


WITH USACusts AS
(
    SELECT CustomerID,CompanyName
    FROM Customers
    WHERE Country = N'USA'
)
SELECT * FROM USACusts;
---------------------
--根据语法增加了WITH 后面表的字段
WITH USACusts(CustomerID,CompanyName,Country) AS
(
    SELECT CustomerID,CompanyName, Country
    FROM Customers
    WHERE Country = N'USA'
)
SELECT * FROM USACusts;
------------------------------------------------------------------------------------------
--使用CTE(Common Table Expressions)

--下面是上次DML_Data Modification_UPDATE中带有联接的更新语句
UPDATE OD
   SET discount = discount + 0.03
FROM dbo.[Order Details] AS OD
    JOIN dbo.Orders AS O
    ON OD.OrderID = O.OrderID
WHERE CustomerID = 'TOMSP';
----------------
SELECT * FROM [Order Details]
SELECT * FROM Orders
----------------
--上面是带有联接的更新语句,将它改变...
--不记得字段内容了,可用上面2句查询一下
SELECT CustomerID,
             OD.OrderID,
             productid,
             discount,
             discount+0.05 AS newdiscount
   --SET discount = discount + 0.03
FROM dbo.[Order Details] AS OD
    JOIN dbo.Orders AS O
    ON OD.OrderID = O.OrderID
WHERE CustomerID = 'TOMSP';
----------------
--继续改编,将上面的语句用 WITH包含起来(使用CTE的例子),然后再 UPDATE
--SQL Server 2005以后的版本支持CTE(没测试过,本环境为MSSQL2014)
WITH C AS
(
    SELECT CustomerID,
                 OD.OrderID,
                 productid,
                 discount,
                 discount+0.05 AS newdiscount
       --SET discount = discount + 0.03
    FROM dbo.[Order Details] AS OD
        JOIN dbo.Orders AS O
        ON OD.OrderID = O.OrderID
    WHERE CustomerID = 'TOMSP'
)
UPDATE C SET discount = newdiscount;
------------------------------------------------------------------------------------------
--使用派生表的例子( Derived Table)
--SQL Server 2005以前的版本支持派生表(没测试过,本环境为MSSQL2014)
--Northwind库
UPDATE D
    SET discount = newdiscount
FROM (

 

 

 

posted @ 2020-06-12 11:05  CDPJ  阅读(158)  评论(0编辑  收藏  举报