database mysql

LEFT JOIN i RIGHT JOIN – kolejne Operatory łączące tabele

LEFT JOIN i RIGHT JOIN to rodzaje JOINów, które służą do łączenia danych z różnych tabel w bazie danych.

LEFT JOIN pozwala na łączenie dwóch tabel tak, aby wynik zawierał wszystkie rekordy z lewej (pierwszej) tabeli, nawet jeśli nie ma odpowiadających im rekordów w drugiej tabeli. Jeśli dla danego rekordu z lewej tabeli nie ma odpowiednika w drugiej tabeli, to w wyniku zostaną użyte NULL-owe wartości dla kolumn z drugiej tabeli.

RIGHT JOIN działa podobnie, ale z tą różnicą, że wynik zawiera wszystkie rekordy z prawej (drugiej) tabeli, nawet jeśli nie ma odpowiadających im rekordów w lewej tabeli.

Oto przykład zapytania LEFT JOIN:

SELECT *
FROM users LEFT JOIN orders
ON users.id = orders.user_id;

W tym przykładzie łączymy tabelę „users” z tabelą „orders” po polu „id” z tabeli „users” i „user_id” z tabeli „orders”. Wynik zapytania zawiera wszystkie rekordy z tabeli „users”, nawet jeśli nie ma dla nich odpowiadających rekordów w tabeli „orders”. W takim przypadku, dla kolumn z tabeli „orders” zostaną użyte NULL-owe wartości.

Możemy również użyć RIGHT JOIN w podobny sposób:

SELECT *
FROM users RIGHT JOIN orders
ON users.id = orders.user_id;

W tym przypadku wynik zapytania zawiera wszystkie rekordy z tabeli „orders”, nawet jeśli nie ma dla nich odpowiadających rekordów w tabeli „users”. Dla kolumn z tabeli „users” zostaną użyte NULL-owe wartości.

Przykładowe tabele

Przykłady tabel na których można przećwiczyć powyższe złączenia LEFT i RIGHT JOIN znajdziesz niżej:

CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
);

CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT NOT NULL,
total DECIMAL(10,2) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);

Tabela „users” zawiera informacje o użytkownikach, takie jak ich identyfikator (pole „id”), imię (pole „name”) i adres email (pole „email”). Tabela „orders” zawiera informacje o zamówieniach, takie jak ich identyfikator (pole „id”), identyfikator użytkownika (pole „user_id”), do którego należy zamówienie oraz łączna kwota zamówienia (pole „total”). Pole „user_id” jest połączone z polami „id” tabeli „users” za pomocą klucza obcego, co pozwala nam łączyć te dwie tabele za pomocą JOINów.

I na koniec przykładowe rekordy, które mogą zostać wstawione do tabel „users” i „orders”:

INSERT INTO users (id, name, email)
VALUES (1, 'John', 'john@example.com'),
(2, 'Alice', 'alice@example.com'),
(3, 'Bob', 'bob@example.com');

INSERT INTO orders (id, user_id, total)
VALUES (1, 1, 99.99),
(2, 1, 199.99),
(3, 2, 299.99);

W tabeli „users” mamy teraz trzy rekordy dla trzech różnych użytkowników o identyfikatorach 1, 2 i 3. W tabeli „orders” mamy trzy rekordy, z których dwa należą do użytkownika o identyfikatorze 1, a jeden do użytkownika o identyfikatorze 2.