Lekcja 8 / brakujące relacje
LEFT JOIN: znajdź rekordy, które znikają z normalnego raportu
Nauczysz się szukać danych, które wyglądają podejrzanie właśnie dlatego, że nie mają pasującego rekordu w drugiej tabeli.
Sytuacja z pracy
Raport pokazuje mniej zamówień niż panel administracyjny. Jedna hipoteza: część zamówień ma
user_id, którego nie ma już albo nigdy nie było w tabeli users.
Dane startowe
orders
| id | user_id | amount |
|---|---|---|
| 101 | 1 | 199 |
| 102 | 2 | 99 |
| 103 | 999 | 149 |
users
| id | |
|---|---|
| 1 | anna@example.com |
| 2 | bartek@example.com |
Nowe pojęcie: LEFT JOIN
JOIN pokazuje tylko dopasowane rekordy. LEFT JOIN zachowuje wszystkie rekordy
z lewej tabeli, nawet jeśli po prawej stronie nie ma dopasowania. Wtedy kolumny z prawej tabeli mają
NULL.
Zapytanie SQL
SELECT
orders.id AS order_id,
orders.user_id,
orders.amount
FROM orders
LEFT JOIN users ON orders.user_id = users.id
WHERE users.id IS NULL;
Wynik
| order_id | user_id | amount |
|---|---|---|
| 103 | 999 | 149 |
Co to znaczy dla QA?
Zamówienie z user_id = 999 jest podejrzane, bo nie ma pasującego użytkownika.
To może oznaczać błąd migracji, usunięte konto, błędny import albo problem z integralnością danych.
Mini-zadanie
Własnymi słowami wyjaśnij, dlaczego zwykły JOIN mógłby ukryć zamówienie 103.
Ćwiczenie praktyczne
Napisz notatkę do deva: co znalazłeś, dlaczego to jest podejrzane i czego jeszcze nie wiesz. Nie pisz „system jest zepsuty”. Napisz konkretnie: „zamówienie X wskazuje na nieistniejącego użytkownika”.
Quiz
Czym różni się JOIN od LEFT JOIN?
JOIN pokazuje tylko dopasowania, LEFT JOIN zachowuje rekordy z lewej tabeli nawet bez dopasowania.
Po co jest WHERE users.id IS NULL?
Żeby zostawić tylko te zamówienia, które nie mają pasującego użytkownika.
Dlaczego to ważne w QA?
Bo część problemów znika z normalnych raportów, jeśli raport pokazuje tylko poprawnie połączone dane.
Co dalej?
Umiesz już znajdować pojedyncze problemy. Teraz nauczysz się policzyć, ile takich rzeczy jest w grupach, czyli przejdziesz do raportowania.