Проблем:
Искате да комбинирате данни от повече от две таблици, като използвате само един израз SELECT.
Пример:
В нашата база данни има четири таблици:student , teacher , subject , и learning .
student таблицата съдържа данни в следните колони:id , first_name и last_name .
| id | first_name | фамилно_име |
|---|---|---|
| 1 | Том | Милър |
| 2 | Джон | Пролет |
| 3 | Лиза | Уилямс |
| 4 | Ели | Баркър |
| 5 | Джеймс | Мур |
teacher таблицата съдържа данни в следните колони:id , first_name , last_name и subject .
| id | first_name | фамилно_име |
|---|---|---|
| 1 | Милано | Смит |
| 2 | Чарлз | Дейвис |
| 3 | Марк | Мур |
subject таблицата съдържа данни в следните колони:id и name .
| id | име |
|---|---|
| 1 | английски |
| 2 | Изкуство |
| 3 | Музика |
И накрая, learning таблицата съдържа данни в следните колони:id , mark , subject_id , student_id и teacher_id .
| id | маркировка | subject_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 |
Искаме да знаем кои ученици изучават английски език, музика и изкуство, както и кои учители преподават в тези класове. Изберете предмета на курса, фамилното име на студента, който е поел този курс, и фамилията на преподавателя, който преподава този курс.
Решение:
Използвайте няколко JOIN s във вашата заявка:
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;
Тази заявка връща записи с името на предмета на курса и фамилните имена на студентите и преподавателите:
| име_на_тема | s_last_name | t_last_name |
|---|---|---|
| Музика | Мур | Милър |
| Изкуство | Дейвис | Милър |
| английски | Смит | Пролет |
| Изкуство | Дейвис | Уилямс |
| Музика | Дейвис | Баркър |
| Музика | Мур | Мур |
Тези данни идват от три таблици, така че трябва да обединим всички тези таблици, за да получим информацията, която търсим.
Дискусия:
Ако искате да комбинирате данни, съхранявани в множество (повече от две) таблици, трябва да използвате JOIN оператор няколко пъти. Първо, присъединявате две таблици, както обикновено (използвайки JOIN , LEFT JOIN , RIGHT JOIN , или FULL JOIN , както е подходящо). JOIN операцията създава "виртуална таблица", която съхранява комбинирани данни от двете таблици. В нашия пример таблицата с резултати е комбинация от learning и subject таблици.
Следващата стъпка е да присъедините тази таблица с резултати към третата таблица (в нашия пример student ). Това е като обикновен JOIN :присъединявате се към „виртуалната таблица“ и третата таблица с подходящо условие. Това условие обикновено трябва да включва една или повече колони от допълнителната таблица (student ) и една или повече колони от „виртуалната таблица“. В нашия пример се позоваваме на student таблица във второто условие JOIN.
В този момент имаме нова виртуална таблица с данни от три таблици. Последната стъпка е да добавите данни от четвъртата таблица (в нашия пример teacher ). и се присъединете, като използвате ключа от тези таблици (в нашия пример id от teacher таблица и teacher_id от learning таблица).
Ако трябва да се присъедините към друга маса, можете да използвате друг JOIN оператор с подходящо условие в клаузата ON. На теория можете да се присъедините към толкова маси, колкото искате.