Database
 sql >> Baza danych >  >> RDS >> Database

Jak dołączyć do wielu (3+) stołów za pomocą jednej instrukcji

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kontynuacja Summer Performance Palooza 2013

  2. Znaczenie konserwacji w MSDB

  3. Poznaj podstawy rejestrowania w Javie

  4. Jak obliczyć kwadrat w SQL

  5. Upuść vs Obcinaj w SQL