The DELETE
statement deletes existing rows from an existing table or updateable
view based on a given criteria. Let’s examine the syntax of the DELETE statement. The elements shown in Example 1 appear most commonly in the DELETE statement.
Example 1. DELETE Statement—Core Elements
DELETE [ TOP (n) [PERCENT] ] [FROM ]table_or_view [FROM ... WHERE ... ]
|
The table_or_view is the name of the table or view from which you are deleting rows. If you are using a view for your DELETE
statement, this view must be updateable. Updateable views are based
upon a single source table. You could also substitute a table-valued
variable like table_or_view.
The TOP (n) [PERCENT] clause serves the same purpose as it does in the INSERT and UPDATE statements. Only the top n, or top n percent of rows will be deleted if this clause is specified.
The FROM
is the filter criteria for what data should be deleted. Ensure that you
specify an alias if the table or view from which you are trying to
delete is mentioned more than once in the FROM clause.
The WHERE clause specifies an additional filter for data that should be deleted.
Exam Warning
Always include a WHERE clause in the DELETE statement, even if it is arbitrary. Otherwise, all rows in the source table will be deleted.
DELETE Statement Examples
Example 2 demonstrates the most common uses of the DELETE
statement. Feel free to run this example against the AdventureWorks
database. Performing the example yourself will give you a better
understanding of how the DELETE statement is used.
Example 2. Using the DELETE Statement
USE AdventureWorks GO
-- Create a new table holding Product Name, SubcategoryID, SubCategory, Price and Color SELECT Production.Product.Name as ProductName,
Production.ProductSubcategory.ProductSubcategoryID as ProductSubCategoryID, Production.ProductSubcategory.Name as ProductSubCategory, Production.Product.ListPrice as Price, Production.Product.Color as Color INTO dbo.ProductAnalysis FROM Production.Product JOIN Production.ProductSubcategory ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory. ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production. ProductCategory.ProductCategoryID GO
-- List the products in the ProductAnalysis table SELECT * FROM ProductAnalysis ORDER BY PRICE GO
-- Delete all Products priced under $50 DELETE ProductAnalysis WHERE Price < 50 -- List the products in the ProductAnalysis table SELECT * FROM ProductAnalysis ORDER BY PRICE GO
-- List all products along with Category of Components SELECT ProductAnalysis.ProductName, ProductCategory.Name as CategoryName, ProductAnalysis.ProductSubCategory FROM ProductAnalysis JOIN Production.ProductSubcategory ON ProductAnalysis.ProductSubcategoryID = Production.ProductSubcategory. ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production. ProductCategory.ProductCategoryID WHERE ProductCategory.Name = 'Components' GO
-- Delete all products in the Category 'Components' from ProductAnalysis by joinin ProductAnalysis table with Production.ProductCategory table via the Production.ProductSubcategory table
DELETE ProductAnalysis FROM ProductAnalysis JOIN Production.ProductSubcategory ON ProductAnalysis.ProductSubcategoryID = Production.ProductSubcategory. ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production. ProductCategory.ProductCategoryID WHERE ProductCategory.Name = 'Components' GO
-- List all products along with Category of Components SELECT ProductAnalysis.ProductName, ProductCategory.Name as CategoryName, ProductAnalysis.ProductSubCategory FROM ProductAnalysis JOIN Production.ProductSubcategory ON ProductAnalysis.ProductSubcategoryID = Production.ProductSubcategory. ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production. ProductCategory.ProductCategoryID WHERE ProductCategory.Name = 'Components' GO
|
Exercise . Using the DELETE Statement
In this exercise, we will practice using the DELETE statement.
Before you begin, you must have the following software installed on your computer:
This exercise does not
depend on you completing any previous exercises. First, we will be
deleting rows in the ProductionProductReview table in the AdventureWorks
database.
Open SQL Server Management Studio. Click Start | All Programs | Microsoft SQL Server 2008 | SQL Server Management Studio. Create a new query against the AdventureWorks database. Execute the following SELECT statement. View the data and structure of the Production.ProductReview table. Take note of the number of rows in the table. SELECT * From Production.ProductReview GO Create and execute a DELETE statement to delete all reviews from reviewers whose e-mail addresses end in “@fourthcoffee.com”. Use the DELETE statement to delete all reviews from people whose e-mail addresses end in “fourthcoffee.com”. DELETE Production.ProductReview WHERE EmailAddress like '%@fourthcoffee.com' Execute the SELECT statement from step 3 again. Have records been deleted?
Next, we will be using a DELETE...FROM statement to delete rows in the Production.ProductReview table based on results of a query.
Create a new query against the AdventureWorks database. Find
out the relationships between Production.ProductReview and
Production.Product. You may find it helpful to create a diagram, mapping
these relationships. Create and execute a DELETE statement to delete all reviews for the product named HL Mountain Pedal. How many rows were affected? Use the DELETE statement to delete all reviews for the HL Mountain Pedal Product. DELETE Production.ProductReview FROM Production.ProductReview JOIN Production.Product ON ProductReview.ProductID = Product.ProductID WHERE Product.Name = 'HL Mountain
|