Database
 sql >> база данни >  >> RDS >> Database

Как да се присъедините към множество (3+) таблици в едно изявление

Проблем:

Искате да комбинирате данни от повече от две таблици, като използвате само един израз 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. На теория можете да се присъедините към толкова маси, колкото искате.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Прагове за оптимизиране – групиране и агрегиране на данни, част 1

  2. SQLskills Wait Types Library вече показва данни от SentryOne

  3. Как да намерите записи с NULL в колона

  4. Анализиране на данни от QuickBooks в Dundas BI

  5. Извличане на пълни съобщения за грешка в isql