LEFT JOIN i trzy tabele
JOIN gubi wiersze, które nie mają pary. LEFT JOIN zostawia każdy wiersz z lewej tabeli, a brakującą parę wypełnia NULL.
JOIN, LEFT JOIN, RIGHT JOIN
`JOIN` (inaczej INNER JOIN) zostawia tylko część wspólną: wiersze, które znalazły parę.
`LEFT JOIN` zostawia całe lewe koło, czyli każdy wiersz z tabeli przed słowem JOIN. Bez pary dostaje NULL.
RIGHT JOIN to to samo z drugą stroną. Na maturze wystarczy LEFT JOIN z tabelami ustawionymi w dobrej kolejności.
JOINLEFT JOINRIGHT JOINKlasa 2b nie ma wychowawcy. Przy LEFT JOIN zostaje w wyniku, a zamiast nauczyciela dostaje NULL.
To zapytanie możesz zmienić: kliknij w nie, wpisz swoje i naciśnij Enter. Uczniowie odegrają Twoją wersję.
FROM klasy AS k: 4 wiersze w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| nazwa | wychowawca_id |
|---|---|
| 3a | 1 |
| 3b | 3 |
| 2a | 2 |
| 2b | NULL |
Tak znajdziesz wiersze bez pary: po LEFT JOIN zostawiasz te, w których druga tabela ma NULL.
FROM klasy AS k: 4 wiersze w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| nazwa | wychowawca_id |
|---|---|
| 3a | 1 |
| 3b | 3 |
| 2a | 2 |
| 2b | NULL |
Z LEFT JOIN policzysz też grupy, w których nikogo nie ma. COUNT(u.id) nie liczy NULL, więc pusta klasa dostaje 0.
FROM klasy AS k: 4 wiersze w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| id | nazwa |
|---|---|
| 1 | 3a |
| 2 | 3b |
| 3 | 2a |
| 4 | 2b |
Trzy tabele łączysz dwoma JOIN po kolei. Ocena ma numer ucznia i numer przedmiotu, a imię i nazwa przedmiotu stoją w innych tabelach.
FROM oceny AS o: 6 wierszy w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| uczen_id | przedmiot_id | ocena |
|---|---|---|
| 1 | 1 | 6 |
| 1 | 2 | 5 |
| 3 | 1 | 5 |
| 3 | 3 | 4 |
| 4 | 1 | 3 |
| 4 | 2 | 2 |