SQL: Join
Теория: Несколько таблиц
Прежде, чем начать изучать соединения таблиц, нужно понять, как строится связь между несколькими таблицами. В этом уроке познакомимся с тем, как хранятся данные в таблицах, как таблицы могут быть связаны между собой.
Данные в таблицах
Как правило, таблицы содержат однотипные данные, которые могут относиться к одной сущности - курсы, пользователи, посты, комментарии. Если добавляется новая сущность, то добавляется новая таблица. Каждая таблица содержит информацию о сущности независимо от других таблиц.
Например, данные из таблицы topics не связаны никак с таблицей users. Но по смыслу они связаны через колонки id в таблице users и user_id в таблице topics
users
topics
Если изменить данные в одной таблице, то в другой они останутся неизменными
Содержимое таблицы users не изменилось
Аналогично, если удалить строки из таблицы users, то поле user_id в таблице topics не изменится.
Из таблицы users удалена запись с id = 6
Содержимое таблицы topics не изменилось
Мы видим, что таблицы не имеют физической связи. Изменение данных в одной таблице, не приводит к изменениям в других. Но таблицы могут быть связаны по смыслу. Рассмотрим, какие связи бывают
Связь один ко многим
Связь "один ко многим" означает, что каждому элементу из одной таблицы соответствует несколько элементов из другой таблицы. Например, у пользователя может быть несколько топиков (сообщений), но сообщение имеет только одного создателя.
Запись из таблицы users с id = 10
Записи из таблицы topics которые относятся к записи из таблицы users с id = 10
Один к одному
Связь "один к одному" означает, что каждому элементу из одного набора соответствует только один элемент из другой таблицы. Например, у одного пользователя может быть только один привязанный аккаунт Github
Многие ко многим
Связь "многие ко многим" (или "много к многим") означает, что несколько элементов из одной таблицы могут соответствовать нескольким элементам из другой таблицы. Примером такой связи может быть связь между студентами и курсами. Каждому студенту может соответствовать несколько курсов, и каждый курс может иметь несколько студентов. Таким образом, это создает многие ко многим отношение между студентами и курсами.
Для представления такой связи часто используется связующая таблица, которая содержит значения обоих наборов элементов.
связующая таблица course_members
users
courses
Таблица course_members является связующей. Она содержит поля user_id и course_id для создания связей между двумя таблицами.
Выводы
В этом уроке мы познакомились с концепцией нескольких таблиц и связей между ними. Повторим ключевые мысли:
- Данные в таблицах хранятся независимо. Если их изменить в одной таблице, то в другой ничего не поменяется
- Таблицы связываются через общее значение полей. Чаще всего связываются через общие по смыслу поля. Например, идентификатор пользователя
- Связь один ко многим означает что у записи из первой таблицы есть несколько связанных записей из другой таблицы. Например, курс и его уроки
- Связь один к одному означает, что у записи из первой таблицы есть только одна связанная запись из другой таблицы. Например, пользователь и его аккаунт в Github
- Для связи многие ко многим используется связующая таблица. Она соединяет несколько записей из первой таблицы и из второй. Например, студенты и курсы, которые они проходят
.png)














