Введение в Joins в MySQL
MySQL Joins играет важную роль, когда нам нужно объединить две таблицы на основе одного или нескольких общих значений, совместно используемых двумя таблицами.
Пример : давайте рассмотрим, что у нас есть две таблицы, одна из них - таблица сотрудников, состоящая из employee_id, phn_no, salary и Department. Другая таблица - это таблица адресов, которая состоит из employee_id и address. Если нам нужно выяснить employee_id, отдел и адрес, то мы должны объединить обе таблицы с общим полем как employee_id.
Запрос :
SELECT e1.employee_id, e1.department, a1.address
FROM employee e1
INNER JOIN address a1
ON e1.employee_id = a1.employee_id;
6 лучших типов соединений в MySQL
В MySQL есть разные типы соединений. Приведенные ниже объединения встречаются в повседневном использовании и наиболее полезны при выполнении многих запросов в реальных сценариях.
- Внутреннее соединение
- Левый присоединиться
- Право присоединиться
- Полное внешнее соединение
- Автообъединение
- Перекрестное соединение
1. Внутреннее соединение
Внутреннее соединение возвращает значение, совпадающее в обеих таблицах.
Эта часть поступает в вывод, как показано на рисунке выше.
Пример № 1:
emp_id | отдел | Оплата труда |
1001 | ЭТО | 1000 |
1002 | КСО | 800 |
1003 | ЭТО | 2000 |
Это таблица сотрудников.
emp_id | Адрес |
1002 | Дели |
1003 | Бангалор |
1005 | Bbsr |
Вот таблица адресов этих сотрудников. Первичный ключ сотрудника родительской таблицы emp_id используется в качестве внешнего ключа в таблице адресов, которая является дочерней таблицей. Мы найдем emp_id, отдел и адрес одного сотрудника, используя внутреннее соединение. Поскольку внутреннее соединение объединяет, оно выбирает записи, которые присутствуют / общие в обеих таблицах.
Запрос:
SELECT emp.emp_id, emp.department, ads.address
FROM employee AS emp
INNER JOIN address AS ads
ON emp.emp_id = ads.emp_id;
Мы даем псевдоним имени таблицы, чтобы избежать более трудоемких. В приведенном выше запросе мы используем псевдоним «emp» для таблицы сотрудников и «ads» для таблицы адресов.
Выход:
emp_id | отдел | Адрес |
1002 | КСО | Дели |
1003 | ЭТО | Бангалор |
Так как в приведенном выше примере emp_id 1002 и 1003 были общими для обеих таблиц, команда внутреннего соединения выбирает выходные данные только для этих сотрудников.
Пример № 2:
Здесь у нас есть 2 таблицы, table1 и table2. Обе таблицы состоят из одного атрибута, каждый как столбец A и столбец B соответственно.
Таблица 1
Столбец А |
1 |
1 |
2 |
3 |
4 |
Таблица 2
Колонна B |
1 |
2 |
2 |
3 |
3 |
5 |
Запрос:
If we apply inner join here,
SELECT * FROM Table1
INNER JOIN table2
ON columnA = columnB;
Выход:
Столбец А | Колонна B |
1 | 1 |
1 | Значение NULL |
2 | 2 |
Значение NULL | 2 |
3 | 3 |
Значение NULL | 3 |
2. Левое соединение
Это объединение возвращает все записи из левой таблицы и сопоставленные записи из правой таблицы.
Как показано на диаграмме выше, она состоит из всех записей таблицы A и общих записей из A и B.
Пример № 1:
Пользовательский ИД | имя | город |
1 | Хариш | Cuttack |
2 | Дэвид | Бангалор |
3 | Махеш | Бхубанесвар |
4 | Сэм | Kolkata |
Таблица клиентов:
Номер заказа | Количество | Пользовательский ИД |
19868 | 7575, 00 | 4 |
19976 | 434654, 00 | 2 |
99680 | 7457, 00 | 3 |
Стол заказов:
Мы узнаем customer_id, name и order_id, связанные с использованием левого соединения.
Запрос:
SELECT cust.Customer_id, cust.Name, ord.Order_id
FROM customer cust
LEFT JOIN order ord
ON cust.customer_id = ord.customer_id;
Выход:
Пользовательский ИД | имя | Номер заказа |
1 | Хариш | значение NULL |
2 | Дэвид | 19976 |
3 | Махеш | 99680 |
4 | Сэм | 19868 |
Как мы уже говорили, это левое соединение извлекало все идентификаторы клиентов из таблицы клиентов и общие идентификаторы между обеими таблицами. Для customer_id '1' он будет отображаться как 'null', потому что '1' customer_id отсутствует в таблице заказов.
Пример № 2:
Здесь у нас есть 2 таблицы, table1 и table2. Обе таблицы состоят из одного атрибута, каждый как столбец A и столбец B соответственно.
Таблица 1
Столбец А |
1 |
1 |
2 |
2 |
3 |
Таблица 2
Колонна B |
1 |
2 |
2 |
4 |
4 |
5 |
5 |
Запрос:
If we apply left join on above 2 tables,
SELECT * FROM table1
LEFT JOIN table2
ON columnA = columnB;
Столбец А | Колонна B |
1 | 1 |
1 | Значение NULL |
2 | 2 |
2 | 2 |
3 | Значение NULL |
3. Правильное соединение
Это объединение возвращает все записи из правой таблицы и соответствующие записи из левой таблицы.
Вышеприведенная диаграмма показывает, что он выбирает все записи из таблицы B и общую запись, которая присутствует в обеих таблицах.
Пример:
Пользовательский ИД | имя | город |
3 | Махеш | Бхубанесвар |
4 | Сэм | Kolkata |
5 | ОЗУ | Mumbai |
Таблица клиентов:
Номер заказа | Количество | Пользовательский ИД |
19868 | 7575, 00 | 4 |
19976 | 434654, 00 | 2 |
99680 | 7457, 00 | 3 |
Стол заказов:
Мы узнаем customer_id, name и order_id, связанные с ним, используя правильное соединение.
Запрос:
SELECT cust.Customer_id, cust.Name, ord.Order_id
FROM customer cust
RIGHT JOIN order ord
ON cust.customer_id = ord.customer_id;
Выход:
Пользовательский ИД | имя | Номер заказа |
2 | значение NULL | 19976 |
3 | Махеш | 99680 |
4 | Сэм | 19868 |
Поскольку мы выполнили правильное соединение здесь, то запрос извлек все идентификаторы клиентов из таблицы заказов и общие записи, которые находятся в обеих таблицах.
4. Полное внешнее соединение
Полное внешнее соединение возвращает все записи из обеих таблиц, если имеется общее поле общего доступа.
Пример:
Пользовательский ИД | имя | город |
3 | Махеш | Бхубанесвар |
4 | Сэм | Kolkata |
5 | ОЗУ | Mumbai |
Таблица клиентов:
Номер заказа | Количество | Пользовательский ИД |
19868 | 7575, 00 | 4 |
19976 | 434654, 00 | 2 |
99680 | 7457, 00 | 3 |
Стол заказов:
Мы узнаем customer_id, name и order_id, связанные с ним, используя полное внешнее соединение.
Запрос:
SELECT cust.Customer_id, cust.Name, ord.Order_id
FROM customer cust
FULL OUTER JOIN order ord
ON cust.customer_id = ord.customer_id;
Выход:
Пользовательский ИД | имя | Номер заказа |
2 | значение NULL | 19976 |
3 | Махеш | 99680 |
4 | Сэм | 19868 |
5 | ОЗУ | значение NULL |
Это полное внешнее соединение извлекало весь идентификатор клиента из таблицы клиентов, а также из таблицы заказов.
5. Самостоятельное присоединение
Самостоятельное соединение - это обычное соединение, и здесь таблица объединяется только сама с собой.
emp_id | имя | Телефонный номер | город | Страна |
1001 | Р. Мадхван | 9687687698 | Бангалор | Индия |
1002 | Гобу Шарма | 9856453423 | Пуна | Индия |
1003 | Дебашиш Дас | 8765456787 | Mumbai | Индия |
1004 | Амит Раут | 4567788635 | Пуна | Индия |
1005 | Самбит Кар | 8789887873 | Хайдарабад | Индия |
Вот таблица сотрудников, состоящая из нескольких полей. Мы узнаем сотрудников, живущих в том же городе.
Запрос :
SELECT e1.name AS Employee_name1, e2.name AS employee_name2, e1.City
FROM employee e1, employee e2
WHERE e1.name e2.name
AND e1.city = e2.city;
Выход :
Employee_name1 | Employee_name2 | e1.city |
Гобу Шарма | Амит Раут | Пуна |
Амит Раут | Гобу Шарма | Пуна |
6. Перекрестное соединение
Это объединение приводит к результату, в котором количество строк в первой таблице умножается на строки во второй таблице. Этот вид результата называется декартовым произведением. Если мы используем предложение WHERE с этим соединением, то это будет работать как внутреннее соединение.
Пример:
Prod_id | Наименование товара | Prod_unit | Идентификатор компании |
1 | Chex Mix | штук | 12 |
2 | Cheez-он | штук | 15 |
3 | Печенье | штук | 16 |
Таблица продуктов :
Идентификатор компании | Название компании | Company_city |
15 | Гурманы | Дели |
16 | Джек н Джилл | Cuttack |
17 | натуральный | Бангалор |
Таблица компании :
Мы применим перекрестное соединение к этим таблицам.
Запрос :
SELECT p.product_name, p.prod_unit, c.company_name
FROM product p
CROSS JOIN company c;
Выход :
p.product_name | p.prod_unit | c.company_name |
Chex Mix | штук | Гурманы |
Cheez-он | штук | Гурманы |
Печенье | штук | Гурманы |
Chex Mix | штук | Джек н Джилл |
Cheez-он | штук | Джек н Джилл |
Печенье | штук | Джек н Джилл |
Chex Mix | штук | натуральный |
Cheez-он | штук | натуральный |
Печенье | штук | натуральный |
Вывод
Значение этих объединений очень важно при работе в сценариях в реальном времени, а также в некоторых других технологиях. В таких визуализациях, как Tableau и Power BI, объединения играют важную роль. Структурированная практика этого является ключом для внедрения этих новых методов и навыков.
Рекомендуемая статья
Это руководство по соединениям в MySQL. Здесь мы обсуждаем 6 лучших типов соединений в MySQL, таких как Inner, Left, Right, Full, Self, Cross и их примеры, а также Query и Output. Вы также можете просмотреть наши предлагаемые статьи, чтобы узнать больше -
- Лучшие 10 команд MySQL
- Введение в MySQL Operators
- MySQL против SQLite | Топ 14 Сравнение
- Лучшие 23 функции MySQL String
- Объясните команду вставки в MySQL с примерами
- Топ 6 отличий первичного ключа от внешнего ключа