Csdl3 Delete
1. Lệnh DELETEa. Ý 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ệnhDELETE [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 đếncursor 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 NorthWindDELETE FROM OrderDetails WHERE OrderID=10254 and Discount=0Ví 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à 11USE NorthWind DELETE FROM OrderDetails FROm OrderDetails od INNER JIOIN Orders oON od.OrderID=o.OrderIDWHERE 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ã ALFKIUSE NorthWindDELETE FROM [Order Details]WHERE OrderID In (SELECT OrderID FROM OrdersWHERE 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.CustomerIDWHERE 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-SQLUSE AdventureWorks2008R2;GODELETE FROM Sales.SalesPersonQuotaHistory;GOTransact-SQLUSE AdventureWorks2008R2;GODELETE FROM Production.ProductCostHistoryWHERE StandardCost > 1000.00;GOVí 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-SQLUSE AdventureWorks2008R2;GODECLARE 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.EmployeePayHistoryWHERE CURRENT OF complex_cursor;CLOSE complex_cursor;DEALLOCATE complex_cursor;GOVí 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 subqueryUSE AdventureWorks2008R2;GODELETE FROM Sales.SalesPersonQuotaHistory WHERE BusinessEntityID IN (SELECT BusinessEntityID FROM Sales.SalesPerson WHERE SalesYTD > 2500000.00);GOTransact-SQL-- Transact-SQL extensionUSE AdventureWorks2008R2;GODELETE FROM Sales.SalesPersonQuotaHistory FROM Sales.SalesPersonQuotaHistory AS spqhINNER JOIN Sales.SalesPerson AS spON spqh.BusinessEntityID = sp.BusinessEntityIDWHERE sp.SalesYTD > 2500000.00;GOVí dụ sau đây xóa 2,5% của các hàng (27 dòng) trong bảng ProductInventory.Transact-SQLUSE AdventureWorks2008R2;GODELETE TOP (2.5) PERCENT FROM Production.ProductInventory;GOVí 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-SQLUSE AdventureWorks2008R2;GODELETE Sales.ShoppingCartItemOUTPUT 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;GOVí 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-SQLUSE AdventureWorks2008R2;GODECLARE @MyTableVar table ( ProductID int NOT NULL, ProductName nvarchar(50)NOT NULL, ProductModelID int NOT NULL, PhotoID int NOT NULL);DELETE Production.ProductProductPhotoOUTPUT DELETED.ProductID, p.Name, p.ProductModelID, DELETED.ProductPhotoID INTO @MyTableVarFROM Production.ProductProductPhoto AS phJOIN 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 @MyTableVarORDER BY ProductModelID;GO
Bạn đang đọc truyện trên: LoveTruyen.Me