Code Lab is in development. New lessons and improvements are on the way. Progress can be deleted.
Loading…
Code Lab is in development. New lessons and improvements are on the way. Progress can be deleted.
Loading…
Code Lab is in development. New lessons and improvements are on the way. Progress can be deleted.
SQL / POSTGRESQL / Learn / LESSON 04
EXISTS (SELECT 1 FROM ... WHERE ...) is true when the subquery returns at least one row — the row contents do not matter, hence SELECT 1. The subquery is tied to the outer row by a condition such as o.customer_id = c.id, so the check runs per customer.
It answers "does this customer have at least one …?". EXISTS yields only true/false and does not multiply rows. A NULL inside the subquery does not confuse it.
Common mistakes: forgetting the linking condition (the subquery then does not depend on the customer and EXISTS is the same for everyone); using COUNT(*) > 0 instead of EXISTS; mixing up the aliases c and o.
Small example:
SELECT c.id, c.name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id AND o.total >= 50);
Working tables for this task. Grading also uses other datasets with the same schema.
| id | name | category | price |
|---|---|---|---|
| 1 | Atlas | books | 30 |
| 2 | Novel | books | 15 |
| 3 | Comic | books | 14.99 |
| 4 | Lamp | home | 29.99 |
| 5 | Vase | home | 30 |
| 6 | Rug | home | 45 |
| 7 | Hammer | tools | 15 |
| 8 | Drill | tools | 60 |
| 9 | Tape | tools | 15 |
| 10 | Candle | NULL | 8.5 |
| 11 | Gift Card | NULL | 25 |
| id | name | city |
|---|---|---|
| 1 | Mira | Sofia |
| 2 | Niko | Varna |
| 3 | Iva | Sofia |
| 4 | Alex | NULL |
| 5 | Boris | Plovdiv |
| 6 | Lena | Varna |
| 7 | Petya | Sofia |
| id | customer_id | total | order_date |
|---|---|---|---|
| 1 | 1 | 120 | 2024-01-05 |
| 2 | 1 | 35.5 | 2024-01-20 |
| 3 | 2 | 40 | 2024-01-20 |
| 4 | 3 | 99.99 | 2024-01-31 |
| 5 | NULL | 60 | 2024-02-01 |
| 6 | 1 | 40 | 2024-02-01 |
| 7 | 2 | 75.25 | 2024-02-14 |
| 8 | 3 | 100 | 2024-02-15 |
| 9 | 5 | 22 | 2024-02-15 |
| 10 | 1 | 39.99 | 2024-02-29 |
| 11 | 2 | 55 | 2024-03-01 |
| 12 | 3 | 18 | 2024-03-10 |
| 13 | 1 | 130 | 2024-03-15 |
| 14 | 2 | 40 | 2024-03-15 |
| 15 | 2 | 12.5 | 2024-03-31 |
| 16 | 3 | 47 | 2024-04-01 |
Expected columns: id, name · row order is not required
Expected result (displayed data):
Loading…EXISTS (SELECT 1 FROM ... WHERE ...) is true when the subquery returns at least one row — the row contents do not matter, hence SELECT 1. The subquery is tied to the outer row by a condition such as o.customer_id = c.id, so the check runs per customer. It answers "does this customer have at least one …?". EXISTS yields only true/false and does not multiply rows. A NULL inside the subquery does not confuse it. Common mistakes: forgetting the linking condition (the subquery then does not depend on the customer and EXISTS is the same for everyone); using COUNT(*) > 0 instead of EXISTS; mixing up the aliases c and o.
QUERY STANDBY
›