Introduction to SQL: 4. Filtering Data

This post is heavily based on Sams Teach Yourself SQL in 10 Minutes (Fourth Edition). Please consider to buy the book if you find this post useful.

Using the WHERE Clause

Within a SELECT statement, data is filtered by specifying search criteria in the WHERE clause. The WHERE clause is specified right after the table name (the FROM clause) as follows:

SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;

The following shows the output.

Position of WHERE Clause

When using both ORDER BY andWHERE clauses, make sure that ORDER BY comes after the WHERE, otherwise an error will be generated.

The WHERE Clause Operators

SQL supports a whole range of conditional operators as listed as follows. Not all of these operators are supported by all DBMSs. Refer to your DBMS documentation to determine exactly what it supports.

Many DBMSs extend the standard set of operators, providing advanced filtering options. Refer to your DBMS documentation for more information.

Checking Against a Single Value

Ex: List all products that cost less than $10:

SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;

Ex: Retrieve all products costing $10 or less:

SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;

Checking for Nonmatches

Ex: List all products not made by vendor DLL01:

SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';

Using Quotes

The single quotes are used to delimit a string. If you are comparing a value against a column that is a string datatype, the delimiting quotes are required. Quotes are not used to delimit values used with numeric columns.

Ex: Do the same as above but use != insetad of < >:

SELECT vend_id, prod_name
FROM Products
WHERE vend_id != 'DLL01';

The above doesnt work in Microsoft Access because it is not supported. != works in certain DBMS.

Checking for a Range of Values using BETWEEN operator

To check for a range of values, you can use the BETWEEN operator. Let’s retrieve all products with a price between $5 and $10:

SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;

When BETWEEN is used, two values must be specified -the low end and high end of the desired range. The two values must also be separated by the AND keyword. BETWEEN matches all the values in the range, including the specified start and end values.

Checking for No Value using IS NULL

To determine if a value is NULL, you cannot simply check to see if = NULL. The IS NULL clause should be used.

SELECT prod_name
FROM Products
WHERE prod_price IS NULL;

Nothing is returned because everything is priced.

The Customers table, however, does contain columns with NULL values:

SELECT cust_name
WHERE cust_email IS NULL;

NULL and Non-matches

When you filter to select all rows that do not have a particular value, rows with a NULL will not be returned.

It’s because of the special meaning of unknown, the database does not know whether or not they match, and so they are not returned when filtering for matches or when filtering for non-matches.
When filtering data, make sure to verify that the rows with a NULL in the filtered column are really present in the returned data.