database mysql

Złączenia tabel w MYSQL – Operator INNER JOIN

Inner join w MySQL to rodzaj złączenia tabel, który pozwala na połączenie dwóch tabel w taki sposób, że w wynikowym zestawie danych znajdują się tylko te rekordy, które mają pasujące wartości w kolumnach połączonych za pomocą operatora JOIN.

Oto przykład złączenia tabel „Użytkownicy” i „Zamówienia” za pomocą operatora INNER JOIN:

SELECT Uzytkownicy.Imie, Uzytkownicy.Nazwisko, Zamowienia.Data-Zamowienia
FROM Uzytkownicy
INNER JOIN Zamowienia ON Uzytkownicy.ID-Uzytkownika = Zamowienia.ID-Uzytkownika;

W tym przykładzie kwerenda zwróci wszystkie rekordy z tabeli „Użytkownicy” i „Zamówienia”, które mają pasujące wartości w kolumnie „ID Użytkownika”. Jeśli w tabeli „Zamówienia” istnieje rekord z „ID Użytkownika”, którego nie ma w tabeli „Użytkownicy”, to taki rekord nie zostanie uwzględniony w wyniku.

Ta kwerenda SELECT łączy tabele „Użytkownicy” i „Zamówienia” za pomocą operatora INNER JOIN i wyświetla imię, nazwisko i datę zamówienia dla wszystkich użytkowników, którzy złożyli zamówienie.

Operator INNER JOIN pozwala na połączenie dwóch tabel w taki sposób, że w wynikowym zestawie danych znajdują się tylko te rekordy, które mają pasujące wartości w kolumnach połączonych za pomocą operatora JOIN. W tym przypadku kolumny połączone są za pomocą operatora ON Uzytkownicy.ID-Uzytkownika = Zamowienia.ID-Uzytkownika, co oznacza, że w wyniku zostaną uwzględnione tylko te rekordy, w których wartości kolumn „Użytkownicy.ID Użytkownika” i „Zamówienia.ID Użytkownika” są sobie równe.

Przykładowo, jeśli tabele „Użytkownicy” i „Zamówienia” zawierają następujące dane:

Użytkownicy:
ID-Uzytkownika | Imie | Nazwisko
----------------|-------|---------
1 | Jan | Kowalski
2 | Anna | Nowak
3 | Piotr | Wiśniewski

Zamówienia:
ID-Uzytkownika | Data-Zamowienia
----------------|----------------
1 | 2021-01-01
2 | 2021-01-02
3 | 2021-01-03

W wyniku wywołania tej kwerendy otrzymamy następujące dane:

Imie | Nazwisko | Data-Zamowienia
-------|----------|----------------
Jan | Kowalski | 2021-01-01
Anna | Nowak | 2021-01-02
Piotr | Wiśniewski | 2021-01-03

 

niżej dane do ćwiczeń na konkretnych danych:

-- Tworzenie tabeli Użytkownicy
CREATE TABLE Uzytkownicy (
ID_Uzytkownika INT PRIMARY KEY,
Imie VARCHAR(50),
Nazwisko VARCHAR(50)
);

-- Uzupełnienie tabeli Użytkownicy
INSERT INTO Uzytkownicy (ID_Uzytkownika, Imie, Nazwisko) VALUES
(1, 'Jan', 'Kowalski'),
(2, 'Anna', 'Nowak'),
(3, 'Piotr', 'Wiśniewski'),
(4, 'Ewa', 'Maj'),
(5, 'Tomasz', 'Lis'),
(6, 'Katarzyna', 'Jabłońska'),
(7, 'Marek', 'Borowski'),
(8, 'Magdalena', 'Kwiatkowska'),
(9, 'Jacek', 'Wójcik'),
(10, 'Iwona', 'Kubiak');/

-- Tworzenie tabeli Zamówienia
CREATE TABLE Zamowienia (
ID_Uzytkownika INT,
Data_Zamowienia DATE,
FOREIGN KEY (ID_Uzytkownika) REFERENCES Uzytkownicy(ID_Uzytkownika)
);

-- Uzupełnienie tabeli Zamówienia
INSERT INTO Zamowienia (ID_Uzytkownika, Data_Zamowienia) VALUES
(1, '2021-01-01'),
(1, '2021-01-02'),
(2, '2021-01-03'),
(2, '2021-02-01'),
(3, '2021-02-02'),
(3, '2021-02-03'),
(3, '2021-03-01'),
(4, '2021-03-02'),
(4, '2021-03-03'),
(5, '2021-01-02'),
(6, '2021-01-03'),
(6, '2021-02-01'),
(6, '2021-02-02'),
(7, '2021-02-03'),
(7, '2021-03-01'),
(7, '2021-03-02'),
(7, '2021-03-03'),
(8, '2021-04-01'),
(8, '2021-03-10'),
(8, '2021-03-12'),
(9, '2021-03-15'),
(9, '2021-05-19'),
(9, '2021-03-09'),
(9, '2021-06-08'),
(10, '2021-07-07'),
(10, '2021-07-06'),
(10, '2021-08-05'),
(1, '2021-08-04');