MySQL JOINS Tutorial: INNER, OUTER, LEFT, RIGHT, CROSS

Что такое JOINS?

Соединения помогают извлекать данные из двух или более таблиц базы данных.

Таблицы взаимосвязаны с использованием первичных и внешних ключей.

Примечание. JOIN – самая непонятная тема среди SQL-струйщиков. Для простоты и простоты понимания мы будем использовать новую базу данных для изучения образца. Как показано ниже

Я бы имя Фамилия movie_id
1 Адам кузнец 1
2 Ravi Кумар 2
3 Сьюзен Davidson 5
4 Дженни Адрианна 8
6 подветренный Pong 10

 

Я бы заглавие категория
1 СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ Анимации
2 Реальная сталь (2012) Анимации
3 Элвин и бурундуки Анимации
4 Приключения оловянного олова Анимации
5 Безопасный (2012) действие
6 Безопасный дом (2012) действие
7 GIA 18+
8 Крайний срок 2009 18+
9 Грязная картинка 18+
10 Марли и я романс

Типы объединений

Крест

Cross JOIN – это простейшая форма JOINs, которая соответствует каждой строке из одной таблицы базы данных ко всем строкам другого.

Другими словами, это дает нам комбинации каждой строки первой таблицы со всеми записями во второй таблице.

Предположим, мы хотим получить все записи участников против всех записей фильмов, мы можем использовать приведенный ниже скрипт, чтобы получить желаемые результаты.

Выполнение вышеуказанного скрипта в workbench MySQL дает нам следующие результаты.

Я бы заглавие   Я бы имя Фамилия movie_id
1 СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ Анимации 1 Адам кузнец 1
1 СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ Анимации 2 Ravi Кумар 2
1 СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ Анимации 3 Сьюзен Davidson 5
1 СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ Анимации 4 Дженни Адрианна 8
1 СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ Анимации 6 подветренный Pong 10
2 Реальная сталь (2012) Анимации 1 Адам кузнец 1
2 Реальная сталь (2012) Анимации 2 Ravi Кумар 2
2 Реальная сталь (2012) Анимации 3 Сьюзен Davidson 5
2 Реальная сталь (2012) Анимации 4 Дженни Адрианна 8
2 Реальная сталь (2012) Анимации 6 подветренный Pong 10
3 Элвин и бурундуки Анимации 1 Адам кузнец 1
3 Элвин и бурундуки Анимации 2 Ravi Кумар 2
3 Элвин и бурундуки Анимации 3 Сьюзен Davidson 5
3 Элвин и бурундуки Анимации 4 Дженни Адрианна 8
3 Элвин и бурундуки Анимации 6 подветренный Pong 10
4 Приключения оловянного олова Анимации 1 Адам кузнец 1
4 Приключения оловянного олова Анимации 2 Ravi Кумар 2
4 Приключения оловянного олова Анимации 3 Сьюзен Davidson 5
4 Приключения оловянного олова Анимации 4 Дженни Адрианна 8
4 Приключения оловянного олова Анимации 6 подветренный Pong 10
5 Безопасный (2012) действие 1 Адам кузнец 1
5 Безопасный (2012) действие 2 Ravi Кумар 2
5 Безопасный (2012) действие 3 Сьюзен Davidson 5
5 Безопасный (2012) действие 4 Дженни Адрианна 8
5 Безопасный (2012) действие 6 подветренный Pong 10
6 Безопасный дом (2012) действие 1 Адам кузнец 1
6 Безопасный дом (2012) действие 2 Ravi Кумар 2
6 Безопасный дом (2012) действие 3 Сьюзен Davidson 5
6 Безопасный дом (2012) действие 4 Дженни Адрианна 8
6 Безопасный дом (2012) действие 6 подветренный Pong 10
7 GIA 18+ 1 Адам кузнец 1
7 GIA 18+ 2 Ravi Кумар 2
7 GIA 18+ 3 Сьюзен Davidson 5
7 GIA 18+ 4 Дженни Адрианна 8
7 GIA 18+ 6 подветренный Pong 10
8 Срок (2009) 18+ 1 Адам кузнец 1
8 Срок (2009) 18+ 2 Ravi Кумар 2
8 Срок (2009) 18+ 3 Сьюзен Davidson 5
8 Срок (2009) 18+ 4 Дженни Адрианна 8
8 Срок (2009) 18+ 6 подветренный Pong 10
9 Грязная картинка 18+ 1 Адам кузнец 1
9 Грязная картинка 18+ 2 Ravi Кумар 2
9 Грязная картинка 18+ 3 Сьюзен Davidson 5
9 Грязная картинка 18+ 4 Дженни Адрианна 8
9 Грязная картинка 18+ 6 подветренный Pong 10
10 Марли и я романс 1 Адам кузнец 1
10 Марли и я романс 2 Ravi Кумар 2
10 Марли и я романс 3 Сьюзен Davidson 5
10 Марли и я романс 4 Дженни Адрианна 8
10 Марли и я романс 6 подветренный Pong 10

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

Внутренний JOIN используется для возврата строк из обеих таблиц, которые удовлетворяют данному условию.

Предположим, вы хотите получить список участников, которые снимали фильмы вместе с названиями фильмов, снятых ими. Вы можете просто использовать INNER JOIN для этого, который возвращает строки из обеих таблиц, которые удовлетворяют заданным условиям.

Выполнение приведенного выше скрипта дает

имя Фамилия заглавие
Адам кузнец СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ
Ravi Кумар Реальная сталь (2012)
Сьюзен Davidson Безопасный (2012)
Дженни Адрианна Срок (2009)
подветренный Pong Марли и я

Обратите внимание, что приведенный выше сценарий результатов также может быть записан следующим образом для достижения тех же результатов.

Внешние соединения

MySQL Outer JOINs возвращает все записи, соответствующие обеим таблицам.

Он может обнаруживать записи, не имеющие соответствия в объединенной таблице. Он возвращает значения NULL для записей объединенной таблицы, если совпадение не найдено.

Звучит странно? Давайте рассмотрим пример –

ВЛЕВО

Предположим, теперь вы хотите получить титулы всех фильмов вместе с именами участников, которые их арендовали. Понятно, что некоторые фильмы не сдаются никому. Мы можем просто использовать LEFT JOIN для этой цели.

LEFT JOIN возвращает все строки из таблицы слева, даже если в таблице справа не найдено совпадающих строк. Если в таблице справа не найдено совпадений, возвращается NULL.

Выполнение вышеуказанного скрипта в workbench MySQL дает. Вы можете видеть, что в возвращаемом результате, который указан ниже, для фильмов, которые не сданы в аренду, поля имени участника имеют значения NULL. Это означает, что ни один соответствующий элемент не нашел таблицу участников для этого конкретного фильма.

заглавие имя Фамилия
СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ Адам кузнец
Реальная сталь (2012) Ravi Кумар
Безопасный (2012) Сьюзен Davidson
Срок (2009) Дженни Адрианна
Марли и я подветренный Pong
Элвин и бурундуки НОЛЬ НОЛЬ
Приключения оловянного олова НОЛЬ НОЛЬ
Безопасный дом (2012) НОЛЬ НОЛЬ
GIA НОЛЬ НОЛЬ
Грязная картинка НОЛЬ НОЛЬ

Примечание: Null возвращается для несоответствующих строк справа

ПРАВОЕ СОЕДИНЕНИЕ

ПРАВОЕ СОЕДИНЕНИЕ, очевидно, противоположно ЛЕВЫМ СОЕДИНЕНИЕМ. RIGHT JOIN возвращает все столбцы из таблицы справа, даже если в таблице слева не найдено совпадающих строк. Если в таблице слева не найдено совпадений, возвращается NULL.

В нашем примере давайте предположим, что вам нужно получить имена участников и фильмов, снятых ими. Теперь у нас есть новый участник, который еще не снимал фильм

Выполнение вышеуказанного скрипта в workbench MySQL дает следующие результаты.

имя Фамилия заглавие
Адам кузнец СОЗДАНИЕ АССАСИНА: ЭМБЕРЫ
Ravi Кумар Реальная сталь (2012)
Сьюзен Davidson Безопасный (2012)
Дженни Адрианна Срок (2009)
подветренный Pong Марли и я
НОЛЬ НОЛЬ Элвин и бурундуки
НОЛЬ НОЛЬ Приключения оловянного олова
НОЛЬ НОЛЬ Безопасный дом (2012)
НОЛЬ НОЛЬ GIA
НОЛЬ НОЛЬ Грязная картинка

Примечание: Null возвращается для не совпадающих строк слева

Предложения “ON” и “USING”

В приведенных выше примерах запросов JOIN мы использовали предложение ON для сопоставления записей между таблицами.

Предложение USING также может использоваться для этой же цели. Разница с ИСПОЛЬЗОВАНИЕМ заключается в том, что в обеих таблицах должны быть одинаковые имена для сопоставленных столбцов.

В таблице “movies” до сих пор мы использовали свой первичный ключ с именем “id”. Мы упоминали об этом в таблице “members” с именем “movie_id”.

Давайте переименуем поле “id” в “movies”, чтобы иметь имя “movie_id”. Мы делаем это, чтобы иметь идентичные совпадающие имена полей.

Затем давайте использовать ИСПОЛЬЗОВАНИЕ с приведенным выше примером LEFT JOIN.

Помимо использования ON и USING с JOINs вы можете использовать многие другие предложения MySQL, такие как GROUP BY, WHERE и даже такие функции, как SUM , AVG и т. Д.

Почему мы должны использовать соединения?

Теперь вы можете подумать, почему мы используем JOINs, когда мы можем выполнять ту же задачу, что и выполняемые запросы. Особенно, если у вас есть некоторый опыт программирования баз данных, вы знаете, что мы можем запускать запросы один за другим, использовать вывод каждого в последовательных запросах. Конечно, это возможно. Но используя JOINs, вы можете выполнить эту работу, используя только один запрос с любыми параметрами поиска. С другой стороны, MySQL может достичь лучшей производительности с помощью JOINs, поскольку он может использовать индексирование. Простое использование одного запроса JOIN вместо запуска нескольких запросов уменьшает накладные расходы сервера. Вместо этого используется несколько запросов, что ведет к большей передаче данных между MySQL и приложениями (программным обеспечением). Кроме того, это требует большего количества манипуляций с данными в конце приложения.

Понятно, что мы можем добиться лучших результатов работы MySQL и приложений, используя JOIN.

Резюме

  • JOINS позволяют объединять данные из более чем одной таблицы в единый результирующий набор.
  • JOINS имеют лучшую производительность по сравнению с подзапросами
  • INNER JOINS возвращают только строки, соответствующие заданным критериям.
  • OUTER JOINS также могут возвращать строки, в которых совпадений не найдено. Непревзойденные строки возвращаются с помощью ключевого слова NULL.
  • Основные типы JOIN включают Inner, Left Outer, Right Outer, Cross JOINS и т. Д.
  • Часто используемое предложение в операциях JOIN – “ВКЛ”. Предложение “ИСПОЛЬЗОВАНИЕ” требует, чтобы соответствующие столбцы имели одно и то же имя.
  • JOINS также можно использовать в других разделах, таких как GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS и т. Д.
0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *