SQL WHERE Clause: Guide and Examples

In this article, you'll learn what the WHERE clause is in SQL, how to use it, and see some examples.

Description

The SQL WHERE clause allows you to filter the results used in your query. It lets you specify the rows that will be used.

The WHERE clause can be used with several statements:

  • SELECT to restrict the rows that are returned
  • UPDATE to restrict the rows that are updated
  • DELETE to specify the rows that will be deleted

 

Syntax

The syntax for the WHERE clause is:

1WHERE condition

It looks simple, but the WHERE clause can be quite long and complex depending on your query and requirements.

Let's take a look at some examples.

 

DDL and DML Code for Examples

Here's the SQL code that we'll use for the examples. You can copy and paste this code into your SQL IDE and run it.

It's been designed for an Oracle database (e.g. it uses the VARCHAR2 data type) but it can be modified for other database vendors.

Our sample table shows a list of employees, and looks like this:

ID LAST_NAME SALARY
1 SMITH 40000
2 ANDERSON 60000
3 JONES 45000
4 LANDY 82000
5 CHARLESTON 21000
6 JOHNSON 51000
7 BROWN 93000
8 HARDEN 40000
9 CONNOR 52000
10 PIERCE 39000

The SQL to create and populate this table looks like this:

 1CREATE TABLE employee (
 2id NUMBER(5),
 3last_name VARCHAR2(50),
 4salary NUMBER(8)
 5);
 6 
 7INSERT ALL
 8INTO employee (id, last_name, salary) VALUES (1, 'SMITH', 40000)
 9INTO employee (id, last_name, salary) VALUES (2, 'ANDERSON', 60000)
10INTO employee (id, last_name, salary) VALUES (3, 'JONES', 45000)
11INTO employee (id, last_name, salary) VALUES (4, 'LANDY', 82000)
12INTO employee (id, last_name, salary) VALUES (5, 'CHARLESTON', 21000)
13INTO employee (id, last_name, salary) VALUES (6, 'JOHNSON', 51000)
14INTO employee (id, last_name, salary) VALUES (7, 'BROWN', 93000)
15INTO employee (id, last_name, salary) VALUES (8, 'HARDEN', 40000)
16INTO employee (id, last_name, salary) VALUES (9, 'CONNOR', 52000)
17INTO employee (id, last_name, salary) VALUES (10, 'PIERCE', 39000)
18SELECT * FROM dual;

 

If you're interested in learning more about the INSERT statement, including how this INSERT ALL works, read this guide to the INSERT statement.

Let's look at the examples.

 

Example 1: Simple WHERE Clause

In this example, we'll use a simple SQL WHERE clause that shows all of the employees that have a salary of 40000.

Our SQL query would look like this:

1SELECT id, last_name, salary
2FROM employee
3WHERE salary = 40000;

We simply add the condition to the WHERE clause. In this example, the condition is where the salary column is equal to 40000.

The results of this query are below:

ID LAST_NAME SALARY
1 SMITH 40000
8 HARDEN 40000

Only the two rows with a salary of 40000 (SMITH and HARDEN) are shown. The other rows are still in the database but are not returned by this query as they don't match the WHERE clause.

Example 2: WHERE Clause with Text

The WHERE clause can also use conditions with text values. This is done by specifying the text value within single quotes.

This query will show all employees where the last name is BROWN.

1SELECT id, last_name, salary
2FROM employee
3WHERE last_name = 'BROWN';

The results are:

ID LAST_NAME SALARY
7 BROWN 93000

Only one row is shown because only one row has a last_name of BROWN. The word BROWN is enclosed in single quotes in the query. Without the single quotes, Oracle will assume BROWN is a column or another object in the database, and show an error.

If you want to use single quotes in a name, you'll need to "escape" them. I've written an article on doing that here: How to Escape Single Quotes in SQL.

 

Example 3: WHERE Clause with Greater Than

The SQL WHERE clause doesn't always have to use an equals sign. You can use any of the other operators in a WHERE clause to show the data you want.

In this example, we will show all employees where the salary is greater than 40000.

1SELECT id, last_name, salary
2FROM employee
3WHERE salary > 40000;

The results of this query are:

ID LAST_NAME SALARY
2 ANDERSON 60000
3 JONES 45000
4 LANDY 82000
6 JOHNSON 51000
7 BROWN 93000
9 CONNOR 52000

This shows all employees with a salary greater than 40000. It doesn't show SMITH or HARDEN because their salaries are exactly 40000 and are excluded from the "greater than 40000" condition.

Example 4: WHERE Clause with Two Conditions and AND Keyword

The examples so far have shown a WHERE clause with one criteria. SQL allows you to combine two or more criteria into a single statement. This can be done in two ways:

  • Showing rows where both criteria are true for the row
  • Showing rows where either criteria are true for the row.

To show rows where both criteria are true, use the AND keyword in between both criteria.

For example, to see rows where the salary is greater than 40000 as well as less than 80000, your query could look like this:

1SELECT id, last_name, salary
2FROM employee
3WHERE salary > 40000
4AND salary < 80000;

The AND keyword appears after "salary > 40000" and before "salary < 80000". This means both conditions must be true for the record to be shown.

The results of this query are:

ID LAST_NAME SALARY
2 ANDERSON 60000
3 JONES 45000
6 JOHNSON 51000
9 CONNOR 52000

Only rows where the salary is greater than 40000 and less than 80000 are shown.

 

Example 5: WHERE Clause with Two Conditions OR

SQL allows you to check if either of two conditions are true and return a row. This is done using the OR keyword in between two criteria.

For example, to show employees who have a salary of less than 40000 or greater than 80000, you could use this query:

1SELECT id, last_name, salary
2FROM employee
3WHERE salary < 40000
4OR salary > 80000;

The results of this query are:

ID LAST_NAME SALARY
4 LANDY 82000
5 CHARLESTON 21000
7 BROWN 93000
10 PIERCE 39000

The rows only match one of the conditions (either less than 40000 or greater than 80000) and not both of the conditions.

 

Example 6: WHERE Clause with IN

The SQL WHERE clause can be used with multiple criteria as we've just seen. If you want to check if a column value is equal to one of many different values, you can use several OR keywords:

1SELECT id, last_name, salary
2FROM employee
3WHERE salary = 40000
4OR salary = 50000
5OR salary = 60000
6OR salary = 70000;

Depending on your requirements, your query could get quite long and repetitive. We're essentially writing the same rule with just the salary number that varies.

There is a better way to do this, and it's using the IN keyword.

The IN keyword in SQL lets you specify several values inside brackets, and the WHERE clause will check if any of them matches your column. If any of them do, then the row is displayed.

The same query above can be written using the IN keyword:

1SELECT id, last_name, salary
2FROM employee
3WHERE salary IN (40000, 50000, 60000, 70000);

It's a lot simpler and shorter. It's also easier to add more values to it if needed.

This query shows the following results:

ID LAST_NAME SALARY
1 SMITH 40000
2 ANDERSON 60000
8 HARDEN 40000

 

Example 7: WHERE Clause with BETWEEN

If you want to check if a value is between two other values, you can use a combination of "greater than or equal to" and "less than or equal to".

1SELECT id, last_name, salary
2FROM employee
3WHERE salary <= 40000
4OR salary >= 80000;

Another way to do this which involves less code is to use the BETWEEN keyword. This BETWEEN keyword allows you to combine "greater than or equal to" and "less than or equal to" into a single clause, resulting in a simpler query.

The query above can be written like this:

1SELECT id, last_name, salary
2FROM employee
3WHERE salary BETWEEN 40000 AND 80000;

The BETWEEN keyword comes after the column you're comparing, and you specify two numbers separated by AND.

The results are:

ID LAST_NAME SALARY
1 SMITH 40000
2 ANDERSON 60000
3 JONES 45000
6 JOHNSON 51000
8 HARDEN 40000
9 CONNOR 52000

 

Example 8: WHERE Clause with LIKE

So far we've looked at WHERE clauses that use an exact match, on either a text value or a number value.

SQL also allows you to do a partial match with the WHERE clause by using the LIKE operator.

The LIKE operator has been described here and can be written in a query like this:

1SELECT id, last_name, salary
2FROM employee
3WHERE last_name LIKE 'J%';

This will show all employees where the last_name starts with J.

The results are:

ID LAST_NAME SALARY
3 JONES 45000
6 JOHNSON 51000

Only those records with a last_name starting with J are shown.

 

Example 9: UPDATE with WHERE

The WHERE clause can also be used in an UPDATE statement. This allows you to specify which rows in your table will be updated.

For example, to update the salary of employees with a salary of 40000 to 42000, your query would look like this:

1UPDATE employee
2SET salary = 42000
3WHERE salary = 40000;

After running this query, the rows that have a salary of 40000 will now have a salary of 42000.

 

Example 10: DELETE with WHERE

You can also use the WHERE clause in the DELETE statement. This will let you specify which rows to delete.

To delete all employees with a salary of more than 80000, your query would look like this:

1DELETE FROM employee
2WHERE salary > 80000;

The matching rows will be deleted from the table.

 

Conclusion

The WHERE clause is an important clause in SQL queries. It's used in the SELECT statement to specify which rows to show, and it's used in UPDATE and DELETE to specify the impacted rows.

This article on optimisation in MySQL may also be useful.

comments powered by Disqus