Technique
Anti-jointure
Les lignes d'une table sans correspondance dans une autre : les clients qui n'ont jamais commandé.
SELECT c.*
FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Même résultat avec LEFT JOIN … WHERE o.customer_id IS NULL. Évitez NOT IN (sous-requête) : un seul
NULL dans la sous-requête et il ne renvoie plus rien.
SELECT c.customer_id, c.first_name, c.last_name FROM customers c WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id) ORDER BY c.customer_id LIMIT 5;
| customer_id | first_name | last_name |
|---|---|---|
| 4 | Elsa | Richard |
| 5 | Louis | Martinez |
| 7 | Tom | Dupont |
| 9 | Jade | Meier |
| 12 | Sacha | Dumont |