WHERE Clause and Comparison Operators in SQL
By Owen Middleton · Updated September 2026 · Examples run on PostgreSQL 17
Before this SELECT and Column Expressions, FROM and Table References
Builds toward NULL Semantics and IS NULL, Boolean Logic in WHERE (AND, OR, NOT), BETWEEN, IN, and LIKE, INNER JOIN
What does the WHERE clause do in SQL?
WHERE is how you tell SQL which rows to keep.
Every query using FROM starts with the full table — every row, nothing filtered yet. WHERE looks at each row one at a time, applies a test, and keeps only the rows where the test passes. Rows that fail get dropped before SELECT ever sees them.
How do you write a WHERE clause in SQL?
As an analyst, this is how you narrow a broad dataset to just what you need. Finance wants orders above a dollar threshold. Marketing needs customers from one country. Operations is tracking a specific status. In every case, you write one condition after WHERE and SQL does the filtering:
SELECT name, email
FROM customers
WHERE country = 'US'SQL reads every row in customers. If country equals 'US', the row passes. If not, it's gone. Only matching rows reach the SELECT.
Which comparison operators can you use in WHERE?
The comparison operators you'll use most: = (equals), <> (not equals), >, <, >=, <=. Anything that compares a column value to a number, a text string, or another expression uses one of these.
SELECT name, price FROM products WHERE price > 100
You can filter on any column in the table, even one you're not returning in SELECT. Filtering by price while only selecting name works fine.
Why does WHERE country = US throw an error?
The one thing that trips people up: text values need single quotes, numbers don't.
WHERE country = 'US' is correct. WHERE country = US gives you an error — SQL reads US as a column name. Numbers work without quotes: WHERE price > 100 is fine as written. Whenever the value you're filtering on is a word or phrase, wrap it in single quotes.
You want rows where status equals 'pending'. Which WHERE condition is correct?
Practice WHERE Clause in SQL
Brightlane's marketing team is preparing a domestic email campaign for the upcoming product launch and needs a list of US-based customers to target.
Write a query to return the name and email of every customer registered in the United States.
Assumptions:
- The
customerstable contains every customer Brightlane has on file. - The
countrycolumn records the customer's country of registration as a two-letter code; US-registered customers havecountryset to'US'.
Output:
- One row per US-registered customer, with columns
nameandemail.
Schema · ecommerce5 tables? = nullable
Run previews · Check grades
Write a query, then run it to see results here.
The full breakdown walks through the shape, each clause, why this approach beats the alternatives, and the trap to avoid.
See the full worked solutionStation Zero, our free browser SQL game, teaches this concept inside a story. No signup.
filter a crew manifest in Station Zero9 WHERE Clause practice problems
Write a query to return the name and email of every customer registered in the United States.
Write a query to return the name and price of every product priced above $100.
Write a query to return the name and location of every department based in New York.
Write a query to return the name, original price, and discounted price for each qualifying product.
Write a query to return the ID and order total of every order currently in pending status.
Write a query to return the employee ID and salary amount for every record at or above $80,000.
Write a query to return the name and email of every user on the enterprise plan.
Write a query to return the name and total inventory value for every flagged product.
Write a query to return the ID and current status of every order that has not yet reached delivered status.
Start learning to practice all 9 WHERE Clause problems, with instant grading and mastery tracking.
Common questions about WHERE Clause
Do text values need quotes in a WHERE clause?
Yes, single quotes. Without them PostgreSQL reads the word as a column name and the query stops with column does not exist. Numbers are the exception, because a bare number is already a value, so a price comparison needs no quotes at all.
Can you filter on a column you are not selecting?
Yes. WHERE can test any column in the table, whether or not it appears in the SELECT list. Returning product names while filtering on price is an ordinary query, not a workaround.
Is there a difference between the two not-equal operators?
Not in PostgreSQL. It treats <> and != as the same operator, so both give the same answer for the same comparison. Pick one and use it consistently, because the choice changes nothing except how the query reads.
Why can a WHERE clause not use a column alias?
Because the filter is applied before the SELECT list is worked out, so the alias does not exist yet and the query stops with column does not exist. Repeat the expression itself in the WHERE clause, or wrap the query so the alias is available to the outer one.