mysql join tutorial inner
Дізнайтеся про різні оператори MySQL JOIN, такі як Inner, Outer, Cross, Left, Right та And Self з прикладами синтаксису та програмування:
У цьому підручнику ми дізнаємося про MySQL JOIN, а також зрозуміємо різні типи об’єднань, які підтримуються в MySQL. JOIN у найпростішій формі можна розглядати як засіб отримання / оновлення або видалення даних з декількох таблиць за одним запитом.
Отже, по суті, JOIN поєднує 2 або більше таблиць для отримання даних щодо певної умови.
MySQL також підтримує інші різні способи запиту даних з декількох таблиць за допомогою - підзапитів та шляхом об'єднання декількох запитів за допомогою UNION тощо.
Що ви дізнаєтесь:
- Нормалізовані таблиці
- MySQL ПРИЄДНАЙТЕСЬ
- Типи MySQL ПРИЄДНАЙТЕСЬ
- MySQL ПРИЄДНАЙТЕСЯ З ОНОВЛЕННЯМ І ВИДАЛЕННЯМ
- Висновок
Нормалізовані таблиці
У нормалізованих базах даних MySQL таблиці мають відношення до загальних стовпців за допомогою обмежень ключів, таких як Зовнішні ключі.
Спробуємо зрозуміти це на прикладі - Припустимо, є 2 таблиці, EMPLOYEE та EMPLOYEE_DEPARTMENT. Тепер у денормалізованій базі даних - тобто в одній таблиці, що має всі стовпці, багато інформації, наприклад про Департамент, буде продубльовано, оскільки може бути багато співробітників, які є частиною одного Департаменту.
Таким чином, щоб зменшити дублювання та заощадити на зберіганні, бази даних зберігаються в нормалізованому стані.
Отже, у цьому випадку ми звертаємось до Департаменту за допомогою поля Department_id у таблиці EMPLOYEE, і вся відповідна інформація, пов’язана з Департаментом, як-от Інформація про Департамент, керівник Департаменту тощо може зберігатися як частина таблиці EMPLOYEE_DEPARTMENT.
Отже, у двох словах - EMPLOYEE та EMPLOYEE_DEPARTMENT пов’язані між собою через поле Department_id, яке виконує функцію ІНОЗЕМНОГО КЛЮЧУ для таблиці EMPLOYEE та ПЕРВИННОГО КЛЮЧА для таблиці EMPLOYEE_DEPARTMENT.
Нижче зображення зображено зображення, що має зв'язок між цими таблицями за допомогою Обмеження зовнішнього ключа
MySQL ПРИЄДНАЙТЕСЬ
MySQL JOIN використовується для отримання, оновлення або видалення даних з 2 або більше таблиць щодо певної умови. Отже, JOIN завжди використовується разом із операторами SELECT, UPDATE або DELETE
Синтаксис команди JOIN:
ПРИЄДНАЙТЕСЬ із SELECT
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
ПРИЄДНАЙТЕСЯ ОНОВИТИ
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
ПРИЄДНАЙТЕСЬ ДО ВИДАЛИТИ
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
Зверніть увагу, що JOIN можна застосувати до кількох таблиць в одному запиті, але для простоти спробуємо спочатку зрозуміти, як використовувати об’єднання з 2 таблицями.
Різні частини синтаксису включають:
- {column_list} - Це представляє імена стовпців, які ми хочемо отримати в результаті нашого запиту.
- {JoinType} - Це вказує на тип Приєднання, який ми застосовуємо. Існують такі різні типи ПРИЄДНАНЬ, які можуть отримувати дані:
- ВНУТРІШНЄ З'ЄДНАННЯ
- ВНЕШНЄ ПРИЄДНАННЯ
- ЛІВО ВНЕШНЄ ПРИЄДНАННЯ
- ПРАВИЛЬНО ВНЕШНЄ ПРИЄДНАННЯ
- ХРЕСТ ПРИЄДНАЙТЕСЬ
Про всі ці різні типи ПІДКЛЮЧЕНЬ ми дізнаємось у наступних розділах підручника.
- {JoinCondition} - Це умови стовпця, які будуть використовуватися для JOIN для запиту та отримання даних.
У наступному розділі ми обговоримо різні типи об'єднань, доступних у MySQL.
Типи MySQL ПРИЄДНАЙТЕСЬ
Підготовка зразків даних
Для використання JOINS ми використовуватимемо 2 таблиці Employee та Employee_Department з деталями нижче. Ви можете скористатися корисним веб-сайтом або звернутися до нього тут з метою створення фіктивних даних для схеми.
Запити щодо створення та вставки таблиці:
CREATE TABLE IF NOT EXISTS Employee_Department ( name varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS Employee ( name varchar(100), id int not null auto_increment, address varchar(100), Department_id int, PRIMARY KEY (id), FOREIGN KEY (Department_id) references Employee_Department(id) ); INSERT INTO `Employee_Department` VALUES ('Information Technology','1'), ('HR','2'), ('Finance','3'), ('Accounting','4'), ('Housekeeping','5'), ('Security','6'), ('Support','7'), ('Contract Staff','8'), ('Sales','9'), ('Management','10'); INSERT INTO `Employee` VALUES ('Veniam','1','640 Damon Junction
East Mathew, NY 68818','3'), ('Molestiae','2','6658 Hollis Club
Ernamouth, TX 19743','10'), ('Officiis','3','59965 Mason Neck Apt. 985
Kareemborough, NV 85535','9'), ('Rerum','4','91067 Geovany Fort
Hanefort, WA 92863','6'), ('Et','5','7647 Reva Shores Suite 970
New Audrafort, OH 17846-5397','2'), ('Et','6','9419 Carmela Burg Apt. 687
Aimeebury, SD 32389-4489','8'), ('Laborum','7','6961 Weissnat Drive
Donnellyfort, MT 53947','6'), ('Cupiditate','8','117 Nellie Summit Suite 982
South Heavenfurt, CA 45675','8'), ('Eveniet','9','9086 Mariam Square Suite 698
South Dulce, MT 82861-3079','2'), ('Rerum','10','783 Goodwin Burgs Apt. 429
Willmsfort, UT 42820-1019','9'), ('Quis','11','42928 Ernesto Trail
East Jules, WV 87169-2851','1'), ('Esse','12','161 Kassulke Stravenue Apt. 937
Williamsonton, MS 62622','7'), ('Dolores','13','22811 Liliana Trail Apt. 890
South Ernesto, MT 04134','10'), ('Ut','14','981 Laron Overpass Suite 361
West Olahaven, FL 46982-7801','10'), ('Mollitia','15','411 Louisa Mill
South Maximefort, MA 04903','8'), ('Necessitatibus','16','2853 Jonathon Turnpike
Quitzonville, KY 54776','4'), ('Fugit','17','3647 Rosalinda Corner
Maureenstad, RI 96605','5'), ('Corporis','18','03559 Nicholas Circle Apt. 364
West Zettaberg, ID 58592-3447','8'), ('Neque','19','56111 Alysson Gateway Apt. 212
Leschbury, VT 90605-2306','8'), ('Velit','20','263 O'Keefe Avenue Apt. 884
West Missouri, IL 50303','6'),
ВНУТРІШНЄ З'ЄДНАННЯ
ВНУТРІШНЄ ПРИЄДНАННЯ - найпоширеніша форма СПІЛКИ та дуже широко використовується. Майже всі з вас мали використовувати це в той чи інший момент. Давайте подивимось синтаксис, а потім кілька зразків запитів.
Синтаксис:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
Запит на отримання назв відділів для всіх службовців із вищезазначених таблиць (Employee та Employee_Department):
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id
Ось результат вищевказаного запиту:
Ім'я працівника | Ім'я_відділу |
---|---|
речі | Безпека |
ВООЗ | Інформаційні технології |
І | HR |
випадок | HR |
Я | Фінанси |
потреби | Бухгалтерський облік |
Фгіт | Ведення домашнього господарства |
закуски | Безпека |
будь ласка | Безпека |
Це | Підтримка |
І | Контрактний персонал |
завзяття | Контрактний персонал |
стійкість | Контрактний персонал |
тіло | Контрактний персонал |
Ярмарок | Контрактний персонал |
офіси | Продажі |
речі | Продажі |
досади | Управління |
Болі | Управління |
Вийшов | Управління |
Примітка: Тут ми використовували псевдоніми назв стовпців. Приклад: Employee.name як Employee_name - лише для того, щоб зробити результати більш читабельними та всебічними.
Давайте змінимо цей запит, щоб отримати лише імена, що починаються на букву „m“.
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id WHERE Employee.name like 'm%'
Нижче наведено результати:
Ім'я працівника | Ім'я_відділу | |||||
---|---|---|---|---|---|---|
закуски | 7 | 6961 Вайснат Драйв Доннелліфорт, MT 53947 | 6 | НУЛЬ | НУЛЬ | НУЛЬ |
досади | Управління | |||||
стійкість | Контрактний персонал |
А тепер давайте зрозуміємо ВНУТРІШНЄ ПРИЄДНАННЯ за допомогою діаграми Венна, як показано нижче. Результатні рядки, що повертаються, складаються з даних, що перекриваються між обома таблицями, як відповідність умові JOIN.
ВНЕШНЄ ПРИЄДНАННЯ
OUTER JOIN використовується для отримання даних з 2 або більше таблиць, за винятком включення нерівних рядків (або рядків, що містять нульові дані для запитуваних стовпців).
Щоб краще зрозуміти Зовнішнє приєднання, додайте нову таблицю office_locations з полями - ідентифікатором та адресою та додайте новий стовпець `office_id` до спочатку створеної таблиці службовців.
Ось запити на те саме:
CREATE TABLE IF NOT EXISTS office_locations ( address varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); ALTER TABLE Employee ADD COLUMN office_id int; INSERT INTO `office_locations`(address) VALUES('Bangalore'), ('Mumbai'), ('Seattle'), ('Santa Clara'); UPDATE Employee SET office_id=1 where id % 2 = 0; UPDATE Employee SET office_id=2 where id % 3 = 0;
Будь ласка, зверніться до діаграми Венна нижче, щоб зрозуміти ЗОВНІШНІ ПІДКЛЮЧЕННЯ:
Існує 2 типи ЗОВНІШНЬОГО ПРИЄДНАННЯ
а) ЛІВО ВНЕШНЄ ПРИЄДНАННЯ
Як випливає з назви, цей тип Приєднання отримає всі рядки (включаючи значення NULL) із таблиці, яка знаходиться ліворуч від запиту JOIN. Простими словами, всі результати / рядки, які не відповідають умові JOIN, будуть повернуті з результатом, що має значення NULL для правильної таблиці.
Наприклад, нам потрібні дані про місцезнаходження всіх співробітників - тобто з’ясувати, якою є офісна адреса всіх працівників.
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Вихід з вищезазначеного запиту:
Ім'я | Ідентифікатор | Адреса | Відділ_ід | Office_id | Адреса офісу | Ідентифікатор |
---|---|---|---|---|---|---|
Я | 1 | 640 Деймон Джанкшн Іст-Метью, Нью-Йорк 68818 | 3 | НУЛЬ | НУЛЬ | НУЛЬ |
досади | два | 6658 Клуб Холліса Ернамут, Техас 19743 | 10 | 1 | Бангалор | 1 |
офіси | 3 | 59965 Mason Neck Apt. 985 Карімборо, Невада, 85535 | 9 | два | Мумбаї | два |
речі | 4 | 91067 Форт Джеовані) Ханефорт, штат Вашингтон 92863 | 6 | 1 | Бангалор | 1 |
І | 5 | Люкс 7647 Reva Shores 970 New Audrafort, OH 17846-5397 | два | НУЛЬ | НУЛЬ | НУЛЬ |
І | 6 | 9419 Кармела Бург, кв. 687 Емібері, SD 32389-4489 | 8 | два | Мумбаї | два |
завзяття | 8 | 117 Люкс на вершині Неллі 982 Південний Небесний місто, Каліфорнія, 45675 | 8 | 1 | Бангалор | 1 |
випадок | 9 | Люкс 9086 Mariam Square 698 Саут-Дульсе, MT 82861-3079 | два | два | Мумбаї | два |
речі | 10 | 783 Гудвін Бергс, кв. 429 Віллсфорт, UT 42820-1019 | 9 | 1 | Бангалор | 1 |
ВООЗ | одинадцять | 42928 Стежка Ернесто Іст-Жуль, WV 87169-2851 | 1 | НУЛЬ | НУЛЬ | НУЛЬ |
Це | 12 | 161 проспект Кассульке, кв. 937 Вільямсонтон, МС 62622 | 7 | два | Мумбаї | два |
Болі | 13 | 22811 Liliana Trail Apt. 890 Південний Ернесто, MT 04134 | 10 | НУЛЬ | НУЛЬ | НУЛЬ |
Вийшов | 14 | 981 Люкс для естакади Ларона 361 Вест-Олахавен, Флорида 46982-7801 | 10 | 1 | Бангалор | 1 |
стійкість | п’ятнадцять | 411 Луїза Мілл Південний Максимефорт, Массачусетс 04903 | 8 | два | Мумбаї | два |
потреби | 16 | 2853 Магістраль Джонатан Quitzonville, KY 54776 | 4 | 1 | Бангалор | 1 |
FLED | 17 | 3647 Розалінда Куточок Морінстад, РІ 96605 | 5 | НУЛЬ | НУЛЬ | НУЛЬ |
тіло | 18 | 03559 Миколаївське коло кв. 364 Західний Цеттаберг, ID 58592-3447 | 8 | два | Мумбаї | два |
або | 19 | 56111 Alysson Gateway Apt. 212 Лешбері, VT 90605-2306 | 8 | НУЛЬ | НУЛЬ | НУЛЬ |
будь ласка | двадцять | 263 O'Keefe Avenue Apt. 884 Західний Міссурі, IL 50303 | 6 | 1 | Бангалор | 1 |
б) ПРАВО ЗОВНІШНЄ ПРИЄДНАННЯ
Подібно до LEFT JOIN, при цьому типі Join всі записи, які не збігаються з правої таблиці, повертаються зі значеннями NULL у стовпці лівої бічної таблиці.
шаблон прийняття тесту на прийняття користувача
Наприклад, з нашими зразковими таблицями, якщо ми запустимо RIGHT JOIN за тим самим запитом, який ми використовували для LEFT JOIN, ми отримаємо NULL значення для міст 'Сіетл' і 'Санта Клара', оскільки в таблиці службовців немає рядків, які мають встановлене місце розташування до цих значень.
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Вихід з вищезазначеного запиту:
Ім'я | Ідентифікатор | Адреса | Відділ_ід | Office_id | Адреса офісу | Ідентифікатор |
---|---|---|---|---|---|---|
будь ласка | двадцять | 263 O'Keefe Avenue Apt. 884 Західний Міссурі, IL 50303 | 6 | 1 | Бангалор | 1 |
досади | два | 6658 Клуб Холліса Ернамут, Техас 19743 | 10 | 1 | Бангалор | 1 |
речі | 4 | 91067 Форт Джовані Ханефорт, штат Вашингтон 92863 | 6 | 1 | Бангалор | 1 |
завзяття | 8 | 117 Люкс на вершині Неллі 982 Південний Небесний місто, Каліфорнія, 45675 | 8 | 1 | Бангалор | 1 |
речі | 10 | 783 Гудвін Бергс, кв. 429 Віллсфорт, UT 42820-1019 | 9 | 1 | Бангалор | 1 |
Вийшов | 14 | 981 Люкс для естакади Ларона 361 Вест-Олахавен, Флорида 46982-7801 | 10 | 1 | Бангалор | 1 |
потреби | 16 | 2853 Магістраль Джонатан Quitzonville, KY 54776 | 4 | 1 | Бангалор | 1 |
офіси | 3 | 59965 Mason Neck Apt. 985 Карімборо, Невада, 85535 | 9 | два | Мумбаї | два |
І | 6 | 9419 Кармела Бург, кв. 687 Емібері, SD 32389-4489 | 8 | два | Мумбаї | два |
випадок | 9 | Люкс 9086 Mariam Square 698 Саут-Дульсе, MT 82861-3079 | два | два | Мумбаї | два |
Це | 12 | 161 проспект Кассульке, кв. 937 Вільямсонтон, МС 62622 | 7 | два | Мумбаї | два |
стійкість | п’ятнадцять | 411 Луїза Мілл Південний Максимефорт, Массачусетс 04903 | 8 | два | Мумбаї | два |
тіло | 18 | 03559 Миколаївське коло кв. 364 Західний Цеттаберг, ID 58592-3447 | 8 | два | Мумбаї | два |
НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | Сіетлі | 3 |
НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | Санта Клара | 4 |
Примітки / поради:
- В інших реляційних базах даних, таких як Microsoft SQL, ви можете знайти інший тип ЗОВНІШНЬОГО СПІЛКУВАННЯ, який називається ПОВНЕ ЗОВНІШНЄ ПРИЄДНАННЯ. Це не що інше, як поєднання як ВНУТРІШНЬОГО, так і ЗОВНІШНЬОГО З’єднання - тобто воно поверне значення NULL з таблиць LEFT та RIGHT.
- Для детального обговорення, а також пояснення та прикладів щодо відмінностей між ВНУТРІШНЬИМ І ЗОВНІШНЬИМ ПРИЄДНАННЯМИ, будь ласка, зверніться до нашого посібника тут.
- У запитах OUTER JOIN - ПРАВО ЗОВНІШНЄ ПРИЄДНАННЯ та LEFT OUTER JOIN можна просто вказати як RIGHT JOIN та LEFT JOIN відповідно для більшої читабельності.
ХРЕСТ ПРИЄДНАЙТЕСЬ
ХРЕСТОВЕ ПРИЄДНАННЯ також називають декартовим продуктом. Він повертає результат щодо відповідних умов Приєднання із загальною кількістю m x n рядків, де m та n - це кількість відповідних рядків у таблиці1 та таблиці2 щодо умови ПРИЄДНАННЯ.
Давайте подивимося зразок запиту для CROSS JOIN для отримання результатів з 2 таблиць - Employee і office_locations
SELECT * from Employee CROSS JOIN office_locations
Повернутий результат буде містити загалом 80 рядків, що є нічим іншим, як добутком рядків в обох таблицях - Співробітник (20) x office_locations (4) => 80
Будь ласка, зверніть увагу, що, виконуючи функцію CROSS JOIN, вам не потрібно вказувати будь-яку умову JOIN, оскільки в будь-якому випадку ви отримаєте результат m x n.
Примітки / поради:
Ви не знайдете багато разів за допомогою CROSS JOIN, оскільки з ним не пов’язано багато випадків використання. Це об’єднання зазвичай виконується, коли хтось хоче отримати всі можливі комбінації з даними з 2 таблиць.
Наприклад: Припустимо, ви експортер одягу, і у вас є 2 таблиці - одна з кольоровими даними, а інша - з розмірами. Тут, щоб забезпечити інвентаризацію, ви можете розглянути можливість перехресного приєднання обох столів, щоб переконатись, що вся одяг закуплена для будь-яких поєднань розмірів та кольорів.
САМО ПРИЄДНАЙТЕСЬ
SELF JOIN подібно до будь-якого іншого ВНУТРІШНЬОГО або ЗОВНІШНЬОГО Приєднання, за винятком того, що обидві таблиці, тобто таблиця Приєднання та Приєднання, однакові.
Зазвичай ми використовуємо SELF Joins, коли хочемо з’ясувати взаємозв’язок між рядками однієї таблиці. Наприклад, якщо в таблиці є ідентифікатор працівника та ідентифікатор працівника керівника, ми можемо приєднати таблицю проти неї самої, якщо хочемо дізнатись ім’я менеджера проти імені працівника.
Зверніть увагу, що для САМОГО ПРИЄДНАННЯ слід використовувати псевдоніми таблиць, щоб можна було вказати умови Приєднання, посилаючись на правильну таблицю.
Давайте подивимося приклад тут:
SELECT e1.name as Employee1, e2.name as Employee2 from Employee e1 inner join Employee e2 on e1.office_id = e2.office_id where e1.Department_id = e2.Department_id
Тут ми приєднали таблицю Employee до себе, щоб з’ясувати імена співробітників, які мають однакове місцезнаходження офісу та відділу
Працівник1 | Працівник2 |
---|---|
І | стійкість |
досади | досади |
досади | Вийшов |
Офіцій | офіси |
речі | речі |
речі | будь ласка |
І | І |
І | тіло |
завзяття | завзяття |
випадок | випадок |
речі | речі |
Це | Це |
Вийшов | досади |
Вийшов | Вийшов |
стійкість | І |
стійкість | стійкість |
стійкість | тіло |
потреби | потреби |
тіло | І |
тіло | стійкість |
тіло | тіло |
будь ласка | речі |
будь ласка | будь ласка |
Як ми вже обговорювали, SELF JOIN просто має об’єднання та об’єднані таблиці як однакові, ми можемо використовувати SELF JOIN із внутрішніми або зовнішніми об’єднаннями.
MySQL ПРИЄДНАЙТЕСЯ З ОНОВЛЕННЯМ І ВИДАЛЕННЯМ
Наразі ми обговорювали об’єднання з операторами SELECT. Однак об'єднання також можна використовувати з операторами MySQL DELETE та UPDATE.
Синтаксис тут залишається незмінним. Давайте розглянемо кілька прикладів, щоб краще зрозуміти цю концепцію.
ОНОВЛЕННЯ ВНУТРІШНЬИМ ПРИЄДНАННЯМ
Припустимо, ми хочемо змінити адресу в таблиці Employee на ім’я місцезнаходження офісу, яке присутнє в таблиці office_locations. Тут ми можемо використовувати INNER JOIN, щоб отримати назву міста з office_locations та оновити той самий запит.
Зразок запиту:
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
Подібно до цього, UPDATE можна використовувати і з іншими типами об’єднань, залежно від вимог щодо конкретних випадків використання.
ВИДАЛИТИ З ВНУТРІШНЬИМ ПРИЄДНАННЯМ
Ми будемо використовувати таблиці, Employee та Employee_Departments як приклад. Припустимо, ми хочемо видалити всі записи співробітників, які належать до відділу продажів, і ми також хочемо видалити запис для відділу продажів.
Оскільки ми використовували Department_id як обмеження ЗОВНІШНЬОГО КЛЮЧУ, отже, спочатку слід ВИДАЛИТИ це обмеження, перш ніж використовувати DELETE with JOIN для кількох таблиць.
Давайте спочатку з’ясуємо назву обмеження, яке було створено для Department_id у таблиці Employee. Просто запустіть команду, щоб отримати команду CREATE TABLE.
show create table Employee
Ви отримаєте результат як:
CREATE TABLE `Employee` ( `name` varchar(100) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `address` varchar(100) DEFAULT NULL, `Department_id` int DEFAULT NULL, `office_id` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `Department_id` (`Department_id`), CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`Department_id`) REFERENCES `Employee_Department` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Тепер ви можете вказати ім’я обмеження FOREIGN_KEY з наведеної вище команди, яка є „Employee_ibfk_1“, і ми можемо використовувати це ім’я, щоб скинути це обмеження з таблиці Employee, виконавши наведену нижче команду:
alter table Employee drop constraint Employee_ibfk_1
Тепер запустімо команду DELETE за допомогою INNER JOIN
delete emp_dept, emp from Employee emp inner join Employee_Department emp_dept on emp.Department_id = emp_dept.id where emp.Department_id = 9
Результатом цієї команди буде ні. рядків видалено (і це має успішно ВИДАЛИТИ рядки з обох таблиць, на які посилається в запиті JOIN вище)
Часті запитання
Q # 1) Скільки типів об'єднань існує в MySQL?
Відповідь: MySQL підтримує в основному 3 типи об'єднань. Це:
- Внутрішнє з'єднання
- Зовнішнє приєднання - ліве зовнішнє приєднання та праве зовнішнє приєднання
- Перехресне приєднання
Q # 2) Чи можна Join просто використовувати для 2 таблиць?
Відповідь: Об'єднання можна застосувати до 2 або більше 2 таблиць. Найчастіше об’єднання використовуються для 2 таблиць.
Нижче наведено приклад ВНУТРІШНЬОГО ПРИЄДНАННЯ з використанням 3 таблиць:
select Employee.name as emp_name, Employee_Department.name as dept_name, office_locations.address as office_location from Employee inner join Employee_Department on Employee.Department_id = Employee_Department.id inner join office_locations on Employee.office_id = office_locations.id
Вихід з вищезазначеного запиту:
ім'я_виправлення | ім'я_відділу | місце_розташування |
---|---|---|
Вийшов | Управління | Бангалор |
досади | Управління | Бангалор |
речі | Безпека | Бангалор |
І | Контрактний персонал | Мумбаї |
завзяття | Контрактний персонал | Бангалор |
випадок | HR | Мумбаї |
Це | Підтримка | Мумбаї |
стійкість | Контрактний персонал | Мумбаї |
потреби | Бухгалтерський облік | Бангалор |
тіло | Контрактний персонал | Мумбаї |
будь ласка | Безпека | Бангалор |
Q # 3) Як використовувати псевдоніми таблиць із Joins?
Відповідь: Псевдоніми - це спосіб отримати тимчасову назву таблиці, на яку можна посилатись у запиті. Оскільки запити JOIN часом складні, і щоб зробити запити читабельними та уникати посилань на імена таблиць для кожного посилання на стовпець, ми можемо скоротити імена з псевдонімами.
найкраще програмне забезпечення для видалення вірусів для ПК -
Давайте напишемо запит INNER JOIN, щоб отримати дані для всіх імен співробітників та назв підрозділів із таблиць Employee та Employee_Departments відповідно.
select emp.name as emp_name, Department.name as dept_name from Employee emp inner join Employee_Department as Department on emp.Department_id = Department.id
У наведеному вище запиті ви можете бачити, що ми створили псевдонім таблиці Employee як emp і таблиці Employee_Department як Department і використовували псевдоніми для посилань на імена стовпців та умови приєднання.
Q # 4) Що таке ХРЕСТОВЕ ПРИЄДНАННЯ?
Відповідь: CROSS JOIN - це тип Приєднання, де користувач хоче отримати декартовий добуток таблиць, що приєднуються.
Результатом CROSS JOIN є m x n, де m - число збігаються рядків у першій таблиці, а n - число збігаються рядків у другій таблиці.
Q # 5) Як отримати ПОВНЕ ВНЕШНЄ ПРИЄДНАННЯ в MySQL
Відповідь: MySQL не надає ПОВНЕ ЗОВНІШНЄ ПРИЄДНАННЯ як окремий тип Приєднання, на відміну від інших баз даних, таких як Microsoft SQL. Однак, щоб отримати результати, як це було б отримано ПОВНЕ ВНЕШНЄ ПРИЄДНАННЯ, ми можемо поєднати результати ЛІВОГО ВНЕШНЬОГО ПРИЄДНАННЯ та ПРАВОГО ВНІШНЬОГО ПРИЄДНАННЯ.
Наприклад, ми можемо отримати деталі співробітників та підрозділів та застосувати об’єднання до лівого та правого зовнішнього об’єднання.
Рекомендована література = >> MySQL Union Operator
Висновок
У цьому підручнику ми дізналися про різні типи об’єднань, доступних у MySQL.
Ми обговорили INNER, OUTER, CROSS та SELF Joins, а також побачили, як запити JOIN можна використовувати з операторами UPDATE та DELETE, щоб мати ефективні та оптимізовані запити для об’єднаних даних між 2 або більше 2 таблицями.
JOINS - це один з найосновніших використовуваних запитів, і кожен, хто користується базами даних на базі SQL або їх вивчає, повинен глибоко розуміти SQL Joins.
Рекомендована література
- Внутрішнє приєднання проти зовнішнього приєднання: Точна різниця з прикладами
- Підручник із створення перегляду MySQL із прикладами коду
- Заява про видалення MySQL - Видалення синтаксису команди та прикладів
- MySQL Insert Into Table - Вставте синтаксис заяви та приклади
- Підручник із заяв на оновлення MySQL - Синтаксис та приклади оновлення запитів
- Різниця між SQL Vs MySQL Vs SQL Server (з прикладами)
- Що таке MySQL і чому він використовується?
- 20+ навчальних посібників MongoDB для початківців: Безкоштовний курс MongoDB