Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Bazy danych
Bazy danychmedium

INNER JOIN vs LEFT JOIN — jaka jest różnica?

Tagi
#sql#join#inner-join#left-join
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

INNER JOIN zwraca tylko wiersze pasujące w obu tabelach. LEFT JOIN zwraca wszystkie wiersze z lewej tabeli i uzupełnia brakujące dopasowania z prawej strony NULLami.

SELECT u.id, p.id
FROM users u
LEFT JOIN posts p ON p.user_id = u.id;

Odpowiedź zaawansowana

Głębiej

Join łączy wiersze z dwóch tabel na podstawie warunku.

  • `INNER JOIN`: zostawia tylko pary, które spełniają warunek join.
  • `LEFT JOIN`: zostawia wszystkie wiersze z lewej tabeli; jeśli nie ma dopasowania po prawej, kolumny prawej strony są `NULL`.

Przykład

Klienci, którzy mają zamówienia (INNER):

SELECT c.id, o.id AS order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Klienci nawet bez zamówień (LEFT):

SELECT c.id, o.id AS order_id
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

Typowa pułapka (WHERE zamienia LEFT w INNER)

Warunek na prawej tabeli w `WHERE` może odfiltrować `NULL` i „zabić” zachowanie left join:

-- To usuwa klientów bez zamówień
... LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'PAID';

Jeśli chcesz zachować wiersze z lewej, przenieś warunek do `ON`:

... LEFT JOIN orders o
  ON o.customer_id = c.id AND o.status = 'PAID';

W praktyce

  • `RIGHT JOIN` jest symetryczne (zamiana stron).
  • `FULL OUTER JOIN` zachowuje wiersze z obu stron (nie każda baza to ma).

Powiązane pytania

Bazy danych
Dlaczego `LIKE '%term%'` bywa wolne i jakie są typowe alternatywy?
#sql#like#indexes
Bazy danych
NULL w SQL: dlaczego `col = NULL` nie jest true i czego użyć zamiast?
#sql#null#three-valued-logic
Bazy danych
Dlaczego `SELECT *` bywa ryzykowne w produkcyjnych zapytaniach?
#sql#best-practices#performance
Bazy danych
Co to jest window function w SQL i typowy use case?
#sql#window-functions#row_number
Bazy danych
GROUP BY vs HAVING — jaka jest różnica?
#sql#group-by#having
Bazy danych
SQL vs NoSQL?
#sql#nosql#comparison