sql >> Databáze >  >> RDS >> Database

Jak spojit více (3+) stolů v jednom příkazu

Problém:

Chcete zkombinovat data z více než dvou tabulek pomocí pouze jednoho příkazu SELECT.

Příklad:

V naší databázi jsou čtyři tabulky:student , teacher , subject a learning .

student tabulka obsahuje data v následujících sloupcích:id , first_name a last_name .

id křestní_jméno last_name
1 Tome Miller
2 Jan Jaro
3 Lisa Williams
4 Ellie Barker
5 James Moore

teacher tabulka obsahuje data v následujících sloupcích:id , first_name , last_name a subject .

id křestní_jméno last_name
1 Milán Smith
2 Karel Davis
3 Označit Moore

subject tabulka obsahuje data v následujících sloupcích:id a name .

id jméno
1 Angličtina
2 Umění
3 Hudba

Nakonec learning tabulka obsahuje data v následujících sloupcích:id , mark , subject_id , student_id a teacher_id .

id označit subject_id id_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

Chceme vědět, kteří studenti studují angličtinu, hudbu a umění, a také kteří učitelé tyto hodiny vedou. Vyberte předmět kurzu, příjmení studenta, který kurz absolvuje, a příjmení učitele, který daný kurz vede.

Řešení:

Použijte více JOIN s ve vašem dotazu:

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; 

Tento dotaz vrací záznamy s názvem předmětu kurzu a příjmeními studentů a učitelů:

název_předmětu s_last_name t_last_name
Hudba Moore Miller
Umění Davis Miller
Angličtina Smith Jaro
Umění Davis Williams
Hudba Davis Barker
Hudba Moore Moore

Tato data pocházejí ze tří tabulek, takže musíme všechny tyto tabulky spojit, abychom získali informace, které hledáme.

Diskuse:

Pokud chcete zkombinovat data uložená ve více (více než dvou) tabulkách, měli byste použít JOIN operátor několikrát. Nejprve spojíte dva stoly jako obvykle (pomocí JOIN , LEFT JOIN , RIGHT JOIN nebo FULL JOIN , podle potřeby). JOIN operace vytvoří "virtuální tabulku", která ukládá kombinovaná data ze dvou tabulek. V našem příkladu je výsledná tabulka kombinací learning a subject tabulky.

Dalším krokem je připojení této výsledkové tabulky ke třetí tabulce (v našem příkladu student ). Je to jako běžný JOIN :připojíte se k „virtuálnímu stolu“ a ke třetímu stolu s odpovídající podmínkou. Tato podmínka by obecně měla zahrnovat jeden nebo více sloupců z doplňkové tabulky (student ) a jeden nebo více sloupců z „virtuální tabulky“. V našem příkladu odkazujeme na student tabulky ve druhé podmínce JOIN.

V tuto chvíli máme novou virtuální tabulku s daty ze tří tabulek. Posledním krokem je přidání dat ze čtvrté tabulky (v našem příkladu teacher ). a připojte se pomocí klíče z těchto tabulek (v našem příkladu id od teacher tabulka a teacher_id z learning tabulka).

Pokud se musíte připojit k jinému stolu, můžete použít další JOIN operátor s příslušnou podmínkou v klauzuli ON. Teoreticky se můžete připojit k tolika stolům, kolik chcete.


  1. MySQL:Povolte LOAD DATA LOCAL INFILE

  2. AFTER LOGON(Oracle) trigger v PostgreSQL s příponou – login_hook

  3. Převeďte výsledky dotazu na seznam oddělený čárkami v MariaDB

  4. Jak přidat ovládací prvek vyhledávání do formuláře v Accessu 2016