Tier 1 · Foundations

WHERE Clause and Comparison Operators in SQL

By Owen Middleton · Updated September 2026 · Examples run on PostgreSQL 17

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.

Check your understanding

You want rows where status equals 'pending'. Which WHERE condition is correct?

Practice WHERE Clause in SQL

Practice · easy ecommerce · Brightlane

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 customers table contains every customer Brightlane has on file.
  • The country column records the customer's country of registration as a two-letter code; US-registered customers have country set to 'US'.

Output:

  • One row per US-registered customer, with columns name and email.
Schema · ecommerce5 tables? = nullable
categories
idinteger
nametext
parent_id?integer
products
idinteger
nametext
category_id?integer
pricenumeric
stock_qtyinteger
attributes?jsonb
order_items
idinteger
order_id?integer
product_id?integer
quantityinteger
unit_pricenumeric
customers
idinteger
nametext
emailtext
city?text
countrytext
created_attimestamptz
is_activeboolean
orders
idinteger
customer_id?integer
ordered_attimestamptz
statustext
total_amountnumeric

Run previews · Check grades

Write a query, then run it to see results here.

Worked solution

The full breakdown walks through the shape, each clause, why this approach beats the alternatives, and the trap to avoid.

See the full worked solution
In the game

Station Zero, our free browser SQL game, teaches this concept inside a story. No signup.

filter a crew manifest in Station Zero

9 WHERE Clause practice problems

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.

How you actually get good at SQL

Reading explains SQL. Writing it, over and over with instant feedback, is what makes you fluent.

That's the whole SQLMaxx loop: 600+ real problems, instant AI feedback, mastery you can actually see, and spaced review that won't let you forget.

A stack of SQL practice problem cards, the top card showing an employees table.
615 problems · 66 concepts

Real problems. Not toy examples.

615 hand-built problems spanning all 66 concepts, from basic SELECTs to window functions, built on real schemas and real business questions, the kind you'll actually get asked on the job. Enough reps to make SQL automatic.

A retro computer showing a SQL query marked correct with a green checkmark.
Instant AI feedback

Write a query. Know if it's right in one second.

No copying an answer and hoping it clicked. The AI grader checks your real query against real data, catches exactly what's wrong, and explains the fix in plain English, like a senior analyst reading over your shoulder on every problem.

A circular mastery progress dial filling from blue to green, the SQLMaxx diamond at its center.
Mastery tracking

Stop guessing whether you actually know it.

SQLMaxx tracks every concept and shows you what you've mastered and what's still shaky. Your skills fill in one concept at a time, so 'I think I get joins' becomes something you can prove.

A SQL query editor circled by a blue return arrow with a clock, scheduled to come back for review.
Spaced review

Learn it once. Keep it for good.

Most of what you learn this week fades by next week. So when a concept comes due for review, SQLMaxx hands you a fresh problem to solve from a blank editor, not a flashcard to re-read. A research-backed spaced-repetition algorithm (FSRS) times each return for right before you'd forget, so your SQL is still there months later, when the interview or the job actually needs it.