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

SQL Inner Join – Как да се присъедините към 3 таблици в SQL и MySQL

Когато работите с вашата база данни, може да се наложи да съберете данни от няколко различни таблици. Тази статия ще ви покаже как.

Вече писах за SQL присъединяванията тук и тук, но нека отделим малко време, за да прегледаме първо как работи едно обединяване и по-специално синтаксиса, специфичен за MySQL.

Изявление за присъединяване към SQL

Присъединяването е изявление, което ви позволява да съберете две таблици, да съпоставите редове, които са свързани един с друг, и да запазите само редовете, които могат да бъдат съпоставени, без да запазвате несдвоени редове.

SELECT * FROM table1 
  INNER JOIN table2
  ON table1.id = table2.id;

SELECT ... FROM оператор показва коя е първата таблица, след което името на втората таблица се изписва точно след INNER JOIN ключови думи.

Как трябва да бъдат обединени двете таблици е написано в ON изявление. В този случай двете таблици се обединяват с помощта на връзката table1.id = table2.id .

Възможно е да се използват няколко оператора за свързване заедно, за да се присъединят повече от една таблица едновременно.

SELECT *
  FROM table1
  INNER JOIN table2
  ON table1.id = table2.id
  INNER JOIN table3
  ON table2.id = table3.id;

За да направите това, добавяте второ INNER JOIN изявление и втори ON оператор, за да посочи третата таблица и втората връзка.

Нека поговорим за момент за връзките, които можете да имате между таблиците и защо може да искате да обедините три таблици заедно.

Връзки между таблици в SQL

Когато имате таблици, които са свързани помежду си, техните връзки могат да бъдат от различни типове.

един към много

При отношение един към много, един ред от първата таблица може да бъде свързан с множество редове на втората таблица.

В релационна база данни това може да бъде реализирано с втората таблица с first_table_id колона, която казва към кой ред от първата таблица е свързан този ред.

много към едно

При отношение много към едно, един ред от първата таблица може да бъде свързан с един единствен ред от втората таблица, а един ред от втората таблица може да бъде свързан с множество редове на първата таблица.

В релационна база данни това може да бъде реализирано с първата таблица с second_table_id колона, която казва към кой ред от втората таблица е свързан този ред.

много към много

В този случай множество редове са свързани с множество редове.

Този вид връзка не може да бъде представена както при SQL таблиците – трябва да добавите таблица за свързване между двете таблици, така че между таблиците да присъстват само връзки много към едно и едно към много.

Всеки ред на таблицата в средата представлява една връзка между редовете на лявата таблица и и редовете на дясната таблица.

На практика в MySQL тази средна таблица ще има колона за first_table_id и колона за second_table_id , като всяка комбинация е уникална.

Присъединяване към SQL таблици на практика

Нека си представим, че имаме база данни на организация, където имаме таблица с екипи (името им и друга информация за идентифициране) и таблица с проекти (име, напредък и т.н.).

id име_на_отбор специалност
1 Хвърчалки на банани Банани
2 Гризачи за дърво Гризане на дърво
3 Розовите слонове Тъпчене на земята
4 Пухкави картофи Работа и спане
id име_на_проект напредък
1 Изграждане на язовир Необходими са още малко гризане на дърва и тъпчене на земята
2 Бананова торта Някой изяжда всички банани
3 Изследване на съня Прекалено много сън, недостатъчно изследвания

Тъй като един екип може да работи по множество проекти и по един проект може да се работи от множество екипи, има и трета таблица, която следи съвпаденията на екип-проект.

project_id идентификатор_на_група
1 2
1 3
2 1
3 1
3 2
3 3
3 4

Можем да използваме JOIN изявление, за да съберем всичко заедно, когато трябва да прегледаме информацията от таблиците по четим от човека начин, като този:

SELECT
  teams.team_name AS team_name,
  projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
  ON teams.id = matches.team_id
INNER JOIN matches
  ON matches.project_id = projects.id
ORDER BY teams.id;

Избираме кои колони да се показват от всяка таблица с SELECT изявление.

Указваме как редовете на таблиците трябва да се комбинират с ON изявление.

И подреждаме редовете по начина, който предпочитаме с ORDER BY изявление.

ON изявления teams.id = matches.team_id и matches.projects_id = projects.id означава, че редовете се комбинират с помощта на редовете на matches маса. Всеки ред от изходната таблица има името на проекта и името на екипа, комбинирани с помощта на двойките идентификатор на проекта и идентификатор на екип в matches таблица.

Изходната таблица ще изглежда по-долу.

Име_на_отбор Име_на_проект
Хвърчалки на банани Бананова торта
Хвърчалки на банани Изследване на съня
Гризачи за дърво Изграждане на язовир
Гризачи за дърво Изследване на съня
Розовите слонове Сграда на язовир
Розовите слонове Сграда на язовир
Пухкави картофи Изследване на съня

Няма колона директно от matches маса. matches таблицата не се показва в изхода, но се използва като инструкции за това как да комбинирате редовете на teams и projects таблици.

Заключение

JOIN оператор ви позволява да обедините една или повече таблици. Трябва да се използва заедно с ON оператор за определяне на връзката между редовете на таблица и редовете на различна таблица.

В тази статия научихте как да използвате JOIN изявление за обединяване на три различни таблици.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разделяне на таблица от милиарди редове с футболни данни с помощта на контекста на данните

  2. mysql селектираща заявка в сериализиран масив

  3. как да изтриете дублиращи се редове от таблица в mysql

  4. Използване на Python и MySQL в ETL процеса:Използване на Python и SQLAlchemy

  5. Как да качвате и изтегляте файлове PHP и MySQL