[#] Pobieranie danych z wielu tabel - łączenie z użyciem JOIN oraz USING

( Ostatnio zmieniony śr., 11/06/2008 - 09:12 )
 

Język SQL umożliwia wybieranie danych z dowolnej liczby tabel. Serwer baz danych połączy dwie z wymienionych tabel, tak uzyskany zbiór pośredni połączy z trzecią tabelą, tak uzyskany zbiór pośredni połączy z czwartą tabelą itd.
Uwaga: Nazwy łączonych pól mogą być różne, jednak muszą mieć ten sam typ danych i zawierać ten sam rodzaj danych.

Na przykład, żeby odczytać nazwiska klientów (tabela klienci) i nazwy kupionych przez nich towarów (tabela pozycje), musimy:

  1. Złączyć tabele klienci i info_zakupu.
  2. Złączyć otrzymany zbiór pośredni z tabelą linia_sprzedazy.
  3. Złączyć otrzymany zbiór pośredni z tabelą pozycje — tylko w ten sposób będziemy w stanie określić, który klient zamawiał dany towar

Złączenie naturalne czterech tabel

SELECT nazwisko, opis
FROM `klienci`
INNER JOIN `info_zakupu` USING (klient_id)
INNER JOIN `linia_sprzedazy` USING (info_zakupu_id)
INNER JOIN `pozycje` USING (pozycja_id);
+++
| nazwisko   | opis              |
+++
| Jarusinek  | Koszulki          |
| Jarusinek  | Płyty CD          |
| Jarusinek  | Pocztówki         |
| Homerak    | Puzzle            |
| Homerak    | Płyty CD          |
| Nowak      | Puzzle            |
| Nowak      | Koszulki          |
| Nowak      | Płyty CD          |
| Nowak      | Ramka na zdjęcia  |
| Nowak      | Puzzle            |
| Nowak      | Płyty CD          |
| Halke      | Puzzle            |
+++

inney przykład:

SELECT * FROM `node`
INNER JOIN `node_counter` USING(nid)

tradycyjny przykład

SELECT nazwisko, opis
FROM `klienci` AS k1
INNER JOIN `info_zakupu` AS k2 ON (k1.klient_id = k2.klient_id)

jak widać na powyższych przykładach łatwiej posługiwać się USING niż ON, jednak czasem nazwy łączonych kolumn różnią się, wtedy USING się nie sprawdzi i trzeba stosować ON.

Więcej o Left join, Right join

Za pomocą operacji LEFT JOIN można utworzyć lewe sprzężenie zewnętrzne. Lewe sprzężenia zewnętrzne zawierają wszystkie rekordy z pierwszej (lewej) z dwóch tabel, nawet jeśli w drugiej (prawej) tabeli nie ma pasujących wartości dla żadnych rekordów.

Za pomocą operacji RIGHT JOIN można utworzyć prawe sprzężenie zewnętrzne. Prawe sprzężenia zewnętrzne zawierają wszystkie rekordy z drugiej (prawej) z dwóch tabel, nawet jeśli w pierwszej (lewej) tabeli nie ma pasujących wartości dla żadnych rekordów.

Przykłady:

Operacji LEFT JOIN można użyć dla tabel Działy (lewa) i Pracownicy (prawa), aby wybrać wszystkie działy, również te, do których nie są przypisani żadni pracownicy. Aby wybrać wszystkich pracowników, w tym tych, którzy nie należą do żadnych działów, należałoby użyć operacji RIGHT JOIN.

W przykładzie poniżej pokazano sposób łączenia tabel Kategorie i Produkty według pola IDkategorii. Kwerenda zwraca listę wszystkich kategorii, również te, które nie zawierają żadnych produktów:

SELECT NazwaKategorii, NazwaProduktu
FROM Kategorie LEFT JOIN Produkty
ON Kategorie.IDkategorii = Produkty.IDkategorii;

Uwaga:
Aby utworzyć kwerendę zawierającą tylko rekordy, dla których dane w sprzężonych polach są identyczne, należy użyć operacji INNER JOIN.

Twoja ocena: Brak Średnio: 3.5 (4 głosy)

Dodaj nową odpowiedź

Informacja:

Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich, mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną. Upewnij się, że twoja wypowiedź nie godzi w niczyje mienie.

  • Internal paths in single or double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or path. Paths to files in single or double quotes, written as "files:somefile.ext", for example, are replaced with the appropriate URL that can be used to download the file.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <strong> <blockquote> <code>
  • Znaki końca linii i akapitu dodawane są automatycznie.

Więcej informacji na temat formatowania

Łapirobot
Proszę odpowiedzieć
7
U
L
c
V
V
T
i
D
6
Enter the code without spaces and pay attention to upper/lower case.