Przejdź do treści
Wróć do kursuDane i QA / Lekcja 8 z 10

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

iduser_idamount
1011199
102299
103999149

users

idemail
1anna@example.com
2bartek@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_iduser_idamount
103999149

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.

Lekcja 8: LEFT JOIN: znajdź rekordy, które znikają z normalnego raportu | SQL od podstaw dla QA | Mikołaj Mikołajczak