csdl3_delete

1.     Lệnh DELETE

a.     Ý nghĩa: Đây là lệnh cho phép xóa các dòng trên một table hay view.

b.     Dạng lệnh

DELETE   [TOP (expression)  [PERCENT]  ]  [FROM ] <object>

[FROM <table_sourece>[…n] ]

[WHERE {search_condition> 

         | { [CURRENT OF

                     {  { [GLOBAL]  cursor_name}

                            |cursor_variable_name

                      }

               ]

            }

        }

 ]

[;]

<object>  :: = { [server_name.database_name.schema_name.

                          | database_name.[schema_name].

                          | schaema_name.

                          ]

                                          Table_or_view_name

                        }

Chú giải:

·                                TOP  (expression)   [PERCENT]     :  chỉ định số hay phần trăm các dòng sẽ bị xóa.   Expression- xác định số hay phần trăm của các dòng sẽ xóa .Các dòng bị xóa này không mang tính sắp xếp. Dấu ngoặc đơn trên mệnh đề  TOP là bắt buộc phải có.

·                                FROM  : là từ khóa mà NSD có thể lựa chọn nằm giữa từ khóa DELETE và các bảng đích     table_or_view_name, hoặc   rowset_function_limited.

·                                                           Server_name : là tên của server( sử dụng khi lien kết với các server khác) chứa các bảng hay view mà chúng ta định xóa các dòng trên đó.Nếu chỉ định server_name thì database_name và schema_name cũng phải chỉ định trên dòng lệnh.

·                                Database_name: tên của cơ sở dữ liệu.

·                                Schema_name : là tên của đò chứa bảng hay view mà chúng ta định xóa các dòng trên đó.

·                                Table : là tên bảng chứa các dòng mà chúng ta định xóa.

·                                FROM<table_source>: chỉ định thêm một mệnh đề FROM nữa. cho phép xác định điều kiện dữ liệu từ <table_source> để xóa các dòng tương ứng từ bảng trong mệnh đề FROM đầu tiên.Ở đây có thể chỉ định JOIN để thay thế một truy vấn phụ(con) trong mệnh đề WHERE để chỉ định các dòng định xóa.

·                                WHERE: Chỉ định điều kiện xác định các dòng sẽ được xóa . Nếu không có mệnh đề WHERE thì các dòng trong bảng sẽ được xóa.

Trong mệnh đề WHERE ,NSD có hai cách để lựa chọn điều kiện xóa:

    Chỉ định điều kiện thông qua biểu thức logic .

 Ví dụ: 

    WHERE column_name=value.

Sử dụng mệnh đề CURRENT OF với cursor.Khi đó dòng hiện thời của cursor sẽ bị xóa.

·                                <search_condition>  : xác định điều kiện xóa cho các dòng.

·                                                                 CURRENT OF : chỉ định lệnh DELETE thực hiện xóa tại vị tí hiện thời của cursor.

·                                GLOBAL: Chỉ định tên cursor toàn cục.

·                                                        Cursor_name: tên của cursor đang mở và cursor này phải ở dạng được phép cập nhật.

·                                                        cursor_variable_name: Là tên của biến cursor và nó phải tham chiếu đến

cursor cho phép cập nhật.

2.     Các Ví Dụ:

Ví dụ 1:

Xóa các dòng chi tiết đặt hang của đơn hang 10254 mà không được giảm giá..

USE NorthWind

DELETE FROM OrderDetails WHERE OrderID=10254 and        Discount=0

Ví Dụ 2: Xóa các dòng chi tiết đặt hàng của đơn hàng trong ngày 1/1/1998 cho các sản phẩm có mã là 11

USE NorthWind

      DELETE FROM OrderDetails

      FROm OrderDetails od INNER JIOIN Orders o

ON od.OrderID=o.OrderID

WHERE od.productID=11 AND o.OrderDate=”1998/1/1’

Ví Dụ : Xóa tất cả các thông tin về khách hang có mã ALFKI

USE NorthWind

DELETE FROM [Order Details]

WHERE OrderID In (SELECT OrderID FROM Orders

WHERE CustomerID=’ALFKI’)

Hoặc có thể thay bằng :

 DELETE FROM [Order Details]

 FROM [Order Details] od JOIN Orders  ON od.OrderID =o.OrderID

                       JOIN Customers c ON o.CustomerID=c.CustomerID

WHERE c.CustomerID = “ALFKI’

 DELETE FROM Orders WHERE CustomerID=’ALFKI’

DELETE FROm Customers WHERE CustomerID=’ALFKI’

Ví dụ sau đây sẽ xóa tất cả các hàng từ bảng  vì 1 mệnh đề where ko dc sử dụng để hạn chế số lượng hàng đã bị xóa.

Transact-SQL

USE AdventureWorks2008R2;

GO

DELETE FROM Sales.SalesPersonQuotaHistory;

GO

Transact-SQL

USE AdventureWorks2008R2;

GO

DELETE FROM Production.ProductCostHistory

WHERE StandardCost > 1000.00;

GO

Ví dụ sau đây xóa một hàng từ bảng EmployeePayHistory sử dụng một complex_cursor tên là con trỏ. Các hoạt động xóa ảnh hưởng đến hàng duy nhất hiện nay lấy từ con trỏ.

Transact-SQL

USE AdventureWorks2008R2;

GO

DECLARE complex_cursor CURSOR FOR

    SELECT a.BusinessEntityID

    FROM HumanResources.EmployeePayHistory AS a

    WHERE RateChangeDate <>

         (SELECT MAX(RateChangeDate)

          FROM HumanResources.EmployeePayHistory AS b

          WHERE a.BusinessEntityID = b.BusinessEntityID) ;

OPEN complex_cursor;

FETCH FROM complex_cursor;

DELETE FROM HumanResources.EmployeePayHistory

WHERE CURRENT OF complex_cursor;

CLOSE complex_cursor;

DEALLOCATE complex_cursor;

GO

Ví dụ sau đây cho thấy phần mở rộng Transact-SQL được sử dụng để xóa các bản ghi từ một bảng cơ sở là dựa trên tham gia hoặc subquery tương quan. Các tuyên bố DELETE đầu tiên cho thấy các giải pháp tương thích với tiêu chuẩn ISO-subquery, và tuyên bố DELETE thứ hai cho thấy phần mở rộng Transact-SQL. Cả hai truy vấn loại bỏ các hàng từ bảng SalesPersonQuotaHistory dựa trên doanh số bán hàng năm để cập nhật được lưu trữ trong bảng nhân viên bán hàng.

Transact-SQL

-- SQL-2003 Standard subquery

USE AdventureWorks2008R2;

GO

DELETE FROM Sales.SalesPersonQuotaHistory

WHERE BusinessEntityID IN

    (SELECT BusinessEntityID

     FROM Sales.SalesPerson

     WHERE SalesYTD > 2500000.00);

GO

Transact-SQL

-- Transact-SQL extension

USE AdventureWorks2008R2;

GO

DELETE FROM Sales.SalesPersonQuotaHistory

FROM Sales.SalesPersonQuotaHistory AS spqh

INNER JOIN Sales.SalesPerson AS sp

ON spqh.BusinessEntityID = sp.BusinessEntityID

WHERE sp.SalesYTD > 2500000.00;

GO

Ví dụ sau đây xóa 2,5% của các hàng (27 dòng) trong bảng ProductInventory.

Transact-SQL

USE AdventureWorks2008R2;

GO

DELETE TOP (2.5) PERCENT

FROM Production.ProductInventory;

GO

Ví dụ sau đây cho thấy làm thế nào để lưu các kết quả của một tuyên bố DELETE vào một biến bảng.

Transact-SQL

USE AdventureWorks2008R2;

GO

DELETE Sales.ShoppingCartItem

OUTPUT DELETED.*

WHERE ShoppingCartID = 20621;

--Verify the rows in the table matching the WHERE clause have been deleted.

SELECT COUNT(*) AS [Rows in Table] FROM Sales.ShoppingCartItem WHERE ShoppingCartID = 20621;

GO

Ví dụ xóa các hàng trong bảng ProductProductPhoto sau đây dựa trên các tiêu chí tìm kiếm được định nghĩa trong mệnh đề FROM của câu lệnh DELETE. Khoản OUTPUT trả về các cột từ bảng bị xóa, DELETED.ProductID, DELETED.ProductPhotoID, và các cột từ bảng sản phẩm. Điều này được sử dụng trong mệnh đề FROM để chỉ định các hàng để xóa.

Transact-SQL

USE AdventureWorks2008R2;

GO

DECLARE @MyTableVar table (

    ProductID int NOT NULL,

    ProductName nvarchar(50)NOT NULL,

    ProductModelID int NOT NULL,

    PhotoID int NOT NULL);

DELETE Production.ProductProductPhoto

OUTPUT DELETED.ProductID,

       p.Name,

       p.ProductModelID,

       DELETED.ProductPhotoID

    INTO @MyTableVar

FROM Production.ProductProductPhoto AS ph

JOIN Production.Product as p

    ON ph.ProductID = p.ProductID

    WHERE p.ProductModelID BETWEEN 120 and 130;

--Display the results of the table variable.

SELECT ProductID, ProductName, ProductModelID, PhotoID

FROM @MyTableVar

ORDER BY ProductModelID;

GO

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: