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.