JOIN - Zadania dodatkowe

Poniżej zadania dodatkowe (wykonujemy na bazie NORTHWIND)ze szczegółowym wyjaśnieniem działania parametru JOIN:

1. Wyświetl imię i nazwisko klienta oraz numer zamówienia, które złożył.
Połącz tabele klienci i zamówienia.

SELECT k.imie, k.nazwisko, z.id_zamowienia
FROM klienci k
INNER JOIN zamowienia z
ON k.id_klienta = z.id_klienta;

Przykład rozwiązania z wytłumaczeniem:

SELECT k.imie, k.nazwisko, z.id_zamowienia
FROM klienci k
INNER JOIN zamowienia z
ON k.id_klienta = z.id_klienta;

W SQL można nadać krótszą nazwę (alias) tabeli, żeby nie pisać za każdym razem jej pełnej nazwy.
Robi się to po prostu tak:

FROM klienci k

Tu:

  • klienci — to prawdziwa nazwa tabeli w bazie,

  • k — to alias, czyli tymczasowy „skrót” tej tabeli.

Od tej chwili w tym zapytaniu możesz odwoływać się do tej tabeli po aliasie k.

Dlaczego to się przydaje?

Bo kiedy łączymy wiele tabel, często w obu są kolumny o takich samych nazwach.
Np.:

  • w klienci masz id_klienta

  • w zamowienia też masz id_klienta

Jeśli napiszesz po prostu:

SELECT id_klienta

baza danych nie wie, z której tabeli chcemy wziąć tę kolumnę.
Dlatego musimy ją „doprecyzować”:

SELECT klienci.id_klienta 

lub (krócej)

SELECT k.id_klienta

Jak to wygląda w praktyce

Weźmy ten przykład z zadania 1:

SELECT k.imie, k.nazwisko, z.id_zamowienia

FROM klienci k

INNER JOIN zamowienia z

ON k.id_klienta = z.id_klienta;

Tutaj:

  • k = alias tabeli klienci,

  • z = alias tabeli zamowienia.

Więc:

  • k.imie oznacza kolumnę imie z tabeli klienci,

  • k.nazwisko oznacza kolumnę nazwisko z tabeli klienci,

  • z.id_zamowienia oznacza kolumnę id_zamowienia z tabeli zamowienia.

Można bez aliasów, ale byłoby dłużej

To samo zapytanie bez aliasów wyglądałoby tak:

SELECT klienci.imie, klienci.nazwisko, zamowienia.id_zamowienia
FROM klienci
INNER JOIN zamowienia
ON klienci.id_klienta = zamowienia.id_klienta;
 

Zadanie 2. Wyświetl wszystkich klientów, nawet jeśli nie mają żadnych zamówień.
Użyj LEFT JOIN.

SELECT k.imie, k.nazwisko, z.id_zamowienia
FROM klienci k
LEFT JOIN zamowienia z
ON k.id_klienta = z.id_klienta;

Zadanie 3. Wyświetl imię i nazwisko pracownika oraz numer zamówienia, które obsługiwał.

Zadanie 4. Wyświetl nazwę produktu, nazwę kategorii i nazwę dostawcy.

Zadanie 5. Wyświetl wszystkie zamówienia wraz z nazwą klienta i nazwą spedytora.




Zadanie 6. Pokaż wszystkie produkty, które pojawiły się w szczegółach zamówień, wraz z ilością.

Zadanie 7. Wyświetl listę zamówień wraz z nazwiskiem klienta, nazwiskiem pracownika oraz nazwą firmy przewozowej.

SELECT z.id_zamowienia,
k.nazwisko AS klient,
p.nazwisko AS pracownik,
s.nazwa AS spedytor
FROM zamowienia z
INNER JOIN klienci k ON z.id_klienta = k.id_klienta
INNER JOIN pracownicy p ON z.id_pracownika = p.id_pracownik
INNER JOIN spedytorzy s ON z.id_spedytora = s.id_spedytora;

Zadanie 8. Pokaż nazwę produktu, ilość zamówioną i datę zamówienia.

Zadanie 9. Wyświetl nazwę działu (oddziału), imię i nazwisko pracownika, który w nim pracuje.

Zadanie 10. Pokaż zamówienia wraz z nazwą klienta i łączną wartością zamówienia (ilość × cena).

SELECT z.id_zamowienia,
k.nazwa_firmy AS klient,
SUM(sz.ilosc * pr.cena_jednostkowa) AS wartosc_zamowienia
FROM zamowienia z
INNER JOIN klienci k ON z.id_klienta = k.id_klienta
INNER JOIN szczegoly_zamowien sz ON z.id_zamowienia = sz.id_zamowienia
INNER JOIN produkty pr ON sz.id_produkt = pr.id_produkt
GROUP BY z.id_zamowienia, k.nazwa_firmy;

Kontakt: mgzsp22@gmail.com

© 2025. Wszystkie prawa zastrzeżone.

error: Content is protected !!