Tip: Testing for the Existence of Data

,

There are times when we

need to know that rows of data that meet specific criteria exist in a table. 

There are 2 basic ways to find this information:  COUNT() and EXISTS().  Here

are some examples.

 

In the Northwind database,

we want to enter orders for a particular customer.  A business rule says that if

this customer has placed an order before, they get a 10% discount.  To determine

this, we need to find out if there are rows in the Orders table for this

customer.

 

Example #1

In this example, we will count the number of

rows in the Orders table for the specified customer.  We will then check to see

if the this count is greater than zero. 

IF (SELECT COUNT(*)

FROM Orders WHERE CustomerID = 'GREAL') > 0

               

BEGIN

/*** PUT DISCOUNT

CODE HERE*/

                END

This technique works well, but an aggregate

function must be computed each time.  We can save this computation time by using

EXISTS().

 

Example #2

 

In this example, the

EXISTS() function returns a boolean value based on the subquery passed to the

function.  If rows exist, the function returns TRUE.

 

IF EXISTS(SELECT NULL FROM Orders WHERE CustomerID = 'GREAL')

BEGIN

/*

** PUT DISCOUNT CODE HERE

*/

END

 

You find that example #2 is

more efficient and helps with performance, especially when used on a table that

has a large amount of data.  To see the performance differences, use the

"Display Estimated Execution Plan" feature in Query Analyzer or set the

SHOWPLAN_ALL option ON before executing the queries.  These will show you the

extra steps needed to process the COUNT() aggregation.

Rate

Share

Share

Rate