Problem:
Chcesz połączyć dane z więcej niż dwóch tabel za pomocą tylko jednej instrukcji SELECT.
Przykład:
W naszej bazie danych znajdują się cztery tabele:student , teacher , subject i learning .
student tabela zawiera dane w następujących kolumnach:id , first_name i last_name .
| id | imię | nazwisko |
|---|---|---|
| 1 | Tomek | Młynarz |
| 2 | Jan | Wiosna |
| 3 | Lisa | Williams |
| 4 | Elia | Kerka |
| 5 | James | Moore |
teacher tabela zawiera dane w następujących kolumnach:id , first_name , last_name i subject .
| id | imię | nazwisko |
|---|---|---|
| 1 | Mediolan | Kowalski |
| 2 | Karol | Davis |
| 3 | Zaznacz | Moore |
subject tabela zawiera dane w następujących kolumnach:id i name .
| id | imię |
|---|---|
| 1 | angielski |
| 2 | Sztuka |
| 3 | Muzyka |
Wreszcie learning tabela zawiera dane w następujących kolumnach:id , mark , subject_id , student_id i teacher_id .
| id | znak | subject_id | identyfikator studenta | teacher_id |
|---|---|---|---|---|
| 1 | 4 | 1 | 2 | 1 |
| 2 | 5 | 2 | 3 | 2 |
| 3 | 4 | 3 | 1 | 3 |
| 4 | 3 | 2 | 1 | 2 |
| 5 | 2 | 3 | 5 | 3 |
| 6 | 3 | 3 | 4 | 2 |
Chcemy wiedzieć, którzy uczniowie uczą się angielskiego, muzyki i sztuki, a także jacy nauczyciele prowadzą te zajęcia. Wybierz temat kursu, nazwisko uczestnika kursu i nazwisko nauczyciela prowadzącego ten kurs.
Rozwiązanie:
Użyj wielu opcji JOIN s w zapytaniu:
SELECT l.name AS subject_name, t.last_name AS student_last_name, st.last_name AS teacher_last_name FROM learning AS l JOIN subject s ON l.subject_id=s.id JOIN student st ON l.student_id=st.id JOIN teacher t ON l.teacher_id=t.id;
To zapytanie zwraca rekordy z nazwą przedmiotu kursu i nazwiskami uczniów i nauczycieli:
| subject_name | s_last_name | t_last_name |
|---|---|---|
| Muzyka | Moore | Młynarz |
| Sztuka | Davis | Młynarz |
| angielski | Kowalski | Wiosna |
| Sztuka | Davis | Williams |
| Muzyka | Davis | Kerka |
| Muzyka | Moore | Moore |
Te dane pochodzą z trzech tabel, więc musimy połączyć wszystkie te tabele, aby uzyskać informacje, których szukamy.
Dyskusja:
Jeśli chcesz połączyć dane przechowywane w wielu (więcej niż dwóch) tabelach, powinieneś użyć JOIN operatora wielokrotnie. Najpierw łączysz dwa stoły w normalny sposób (używając JOIN , LEFT JOIN , RIGHT JOIN , lub FULL JOIN , odpowiednio). JOIN Operacja tworzy „wirtualną tabelę”, która przechowuje połączone dane z dwóch tabel. W naszym przykładzie tabela wyników jest kombinacją learning i subject tabele.
Następnym krokiem jest dołączenie tej tabeli wyników do trzeciej tabeli (w naszym przykładzie student ). To jest jak zwykłe JOIN :dołączasz do „wirtualnego stołu” i trzeciego stołu z odpowiednim warunkiem. Ten warunek powinien generalnie zawierać jedną lub więcej kolumn z dodatkowej tabeli (student ) i co najmniej jedną kolumnę z „wirtualnej tabeli”. W naszym przykładzie odwołujemy się do student tabeli w drugim warunku JOIN.
W tym momencie mamy nową wirtualną tabelę z danymi z trzech tabel. Ostatnim krokiem jest dodanie danych z czwartej tabeli (w naszym przykładzie teacher ). i dołącz za pomocą klucza z tych tabel (w naszym przykładzie id od teacher table i teacher_id z learning tabeli).
Jeśli musisz dołączyć do innego stołu, możesz użyć innego JOIN operator z odpowiednim warunkiem w klauzuli ON. Teoretycznie możesz dołączyć do dowolnej liczby stołów.