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