mysql union comprehensive tutorial with union examples
Цей посібник пояснює команду MySQL UNION, її типи, Union vs Union All та приклади поєднання даних із 2 або більше запитів:
MySQL UNION використовується для об'єднання результатів з декількох запитів SELECT в один набір результатів. Також можливо мати всі складні запити / операції в запитах SELECT і виконати UNION з іншими операторами SELECT, щоб отримати комбінований результат.
різниця між переадресацією портів та активацією
Характеристикою за замовчуванням для оператора UNION буде видалення повторюваних записів або рядків із результуючого набору рядків, однак він надає способи отримання повторюваних записів, а також за допомогою речення UNION ALL.
Що ви дізнаєтесь:
- Розуміння СОЮЗУ через теорію множин
- Яку проблему вирішує MySQL UNION
- MySQL UNION проти UNION ALL
- Висновок
Розуміння СОЮЗУ через теорію множин
Операцію UNION можна було б дуже добре зрозуміти з принципів теорії SET.
Припустимо, у нас є таблиці A і B, представлені наборами нижче, і вони мають деякі дані, що перекриваються (або вони також можуть бути абсолютно не пов’язаними) - UNION буде включати комбінацію даних з обох таблиць.
Давайте подивимось приклад, коли набори A & B мають деякі загальні елементи. UNION буде містити всі значення з набору A & B, а повторювані значення пропущені.
Що, якщо набори A & B не перетинаються і не містять загальних елементів? І тут СОЮЗ поверне той самий результат.
Давайте обговоримо сценарій, коли між наборами є елементи, що перекриваються, і ми хочемо, щоб повторювані значення також відображались у наборі результатів.
MySQL пропонує спосіб зробити це, використовуючи опцію UNION ALL, як показано на малюнку нижче.
Яку проблему вирішує MySQL UNION
MySQL UNION використовується, коли у вас є схожі дані в 2 або більше таблицях, і ви хочете бачити комбінований вигляд даних, що містяться в обох таблицях, а не запускати оператори SELECT для окремих таблиць.
Наприклад - Припустимо, є 2 таблиці - Співробітник і Студент. І ви працюєте над базою даних людей, яка просто хоче вказати ім’я, вік та дату народження для всіх працівників та студентів.
Без UNION вам потрібно буде виконати окремі запити SELECT для обох таблиць, а потім виконати бажане обчислення з отриманим набором результатів.
Синтаксис MySQL UNION
Наведені нижче запити повернуть UNION із 2 або більше ніж 2 операторів SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Спробуємо побачити різні компоненти синтаксису
- Ми бачимо, що можна поєднати кілька запитів SELECT із UNION, щоб отримати результуючий набір рядків.
- Назва стовпця та типи даних. Важливо розуміти, що стовпці, які ми хочемо об’єднати, повинні мати однаковий або сумісний тип даних. Наприклад: якщо у вас стовпець1 як STRING, тоді стовпець3 також повинен бути STRING (або сумісний із STRING).
- Імена та позиції стовпців визначаються з першого оператора SELECT у запиті UNION. Наприклад, у наведеному вище синтаксисі: стовпці1 та стовпці2 називаються стовпцями заголовків у наборі результатів, а значення стовпця3 та стовпця4 відображаються відповідно до стовпця1 та стовпця2.
- Результати запиту UNION за замовчуванням видаляють повторювані записи. Наприклад, у цьому випадку, якщо є повторюваний запис, який має точну відповідність і має однакові значення для стовпця1 та стовпця2, тоді ці рядки буде опущено із набору результатів.
Якщо потрібні дублікати, тоді ми можемо використовувати параметр «ВСЕ» разом із СОЮЗОМ.
Використання ВІДМІНЕННЯ мається на увазі за замовчуванням. Зверніть увагу, що це також може бути вказано явно для більшої читабельності.
Давайте подивимося приклад прикладу запиту UNION.
Припустимо, є 2 таблиці - співробітник та студент - кожна з яких має особисту інформацію.
CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100)); CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Тепер введіть кілька фіктивних даних в обидві ці таблиці, як показано нижче:
INSERT INTO employee values (1,'Darren', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 20, '2000-05-12', 'TRAINEE'); ---------------------------------------------- INSERT INTO student values (1,'Akash', 22, '1998-05-17', 'COMPUTER'), (2,'Ian', 26, '1994-06-18', 'COMPUTER'), (3,'Shirley', 19, '2001-11-20', 'MECHANICAL'), (4,'Joana', 21, '1999-05-21', 'ELECTRONICS'), (5,'Kartik', 20, '2000-05-12', 'COMPUTER');
Як ви можете бачити вище, ми навмисно додали рядок, який має однакові атрибути для імені, віку та дати народження.
Давайте тепер подивимося, як ми можемо комбінувати дані в цих 2 таблицях за допомогою команд UNION. Ми будемо запитувати ім’я користувача та вік з обох таблиць.
Простий СОЮЗ
Запит:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
У результаті ви побачите 9 записів (це означає, що у наведеному вище запиті пропущено повторюваний запис).
Вихід:
ім'я | вік |
---|---|
Ян | 26 |
Даррен | 32 |
Абхішек | 28 |
Аміт | 30 |
Стівен | 40 |
Картик | двадцять |
Акаш | 22 |
Ширлі | 19 |
Джоана | двадцять один |
СОЮЗ З СОЮЗОМ ВСІХ
Використання пропозиції UNION з ALL забезпечить відображення повторюваних записів.
Запит:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Вихід:
ім'я | вік |
---|---|
Ян | 26 |
Даррен | 32 |
Абхішек | 28 |
Аміт | 30 |
Стівен | 40 |
Картик | двадцять |
Акаш | 22 |
Ширлі | 19 |
Джоана | двадцять один |
Картик | двадцять |
СОЮЗ з умовою
Давайте додамо умови до тверджень SELECT, де нам потрібні дані працівників віком до 30 років та студентів віком до 25 років.
Запит:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Вихід:
ім'я | вік |
---|---|
Аміт | 30 |
Абхішек | 28 |
Картик | двадцять |
Акаш | 22 |
Ширлі | 19 |
Джоана | двадцять один |
Як ви можете бачити вище, набір результатів включає комбінований результат з валідованими окремими умовами SELECT.
Замовлення результатів СОЮЗУ
Результати запиту UNION за замовчуванням не упорядковані.
Для того, щоб нав'язати порядок за допомогою стовпця, що існує в результуючому наборі, в кінці команди UNION можна вказати речення ORDER BY.
Давайте скористаємось тими ж даними про співробітників / студентів і впорядкуємо результати СОЮЗУ за зростанням за віком.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Вихід:
ім'я | вік |
---|---|
Ширлі | 19 |
Картик | двадцять |
Джоана | двадцять один |
Акаш | 22 |
Ян | 26 |
Абхішек | 28 |
Даррен | 32 |
Стівен | 40 |
Вищевказаний набір результатів упорядковується за віковими значеннями за зростанням. Ми також можемо використовувати псевдоніми стовпців для посилання на стовпці в реченні ORDER BY.
Наприклад: - Запит, наведений нижче, також дасть той самий результат.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Існує ще один спосіб використовувати речення ORDER BY, просто згадавши позицію стовпця замість імені стовпця.
Наприклад: У наведеному вище запиті UNION ми обираємо ім’я та вік, що означає, що ці стовпці знаходяться у позиціях 1 та 2 відповідно.
Отже, щоб ЗАМОВИТИ ЗА віком, ми можемо просто вказати позицію замість фактичного імені стовпця.
Отже, наведений нижче запит також дасть той самий результат.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION проти UNION ALL
MySQL пропонує 2 варіанти UNION, тобто СОЮЗНА ВИЗНАЧЕННЯ і СОЮЗ ВСІХ
Зверніть увагу, що DISTINCT мається на увазі за замовчуванням, навіть якщо він не вказаний.
Основною відмінністю між ними є UNION ALL, яка також дозволяє комбінувати та повертати повторювані рядки, тоді як UNION просто повертає об'єднані рядки, видаляючи дублікати.
У наведеній нижче таблиці пояснюються подробиці:
Параметр | СОЮЗ | СОЮЗ ВСІХ |
---|---|---|
Визначення | Еквівалентно UNION DISTINCT - ігнорує повторювані рядки даних під час повернення результату | Повертає всі рядки, включаючи дублікати |
Синтаксис | ВИБЕРІТЬ {columnList} ІЗ {таблиці1} СОЮЗ ВИБЕРІТЬ {columnList} ІЗ {таблиці2} | ВИБЕРІТЬ {columnList} ІЗ {таблиці1} СОЮЗ ВСІХ ВИБЕРІТЬ {columnList} ІЗ {таблиці2} |
Вимоги до даних | Дані, що об’єднуються, повинні мати подібні типи даних і отримувати їх в однаковому порядку, коли їх отримують із кількох таблиць | Те саме, що СОЮЗ |
Часті запитання
Q # 1) Чи є Union швидшим, ніж JOIN?
Відповідь: UNION та JOIN використовуються практично для двох різних цілей.
Технічно кажучи, UNION набагато швидший, ніж JOIN (особливо для великих наборів даних), оскільки UNION просто об'єднує рядки даних з окремих операторів SELECT.
Q # 2) Що таке оператор UNION ALL?
Відповідь: Подібно до UNION, оператор UNION ALL також повертає UNION між 2 запитами SELECT, але різниця полягає в тому, що він також містить повторювані рядки / записи.
Q # 3) Яка різниця між UNION та JOIN?
Відповідь: І UNION, і JOIN використовуються для об'єднання даних з 2 або більше таблиць. Але є величезна різниця щодо отриманого набору результатів та способу отримання даних.
Подібності та відмінності між JOIN та UNION наведено в таблиці нижче:
СОЮЗ | ПРИЄДНАЙТЕСЬ |
---|---|
Поєднує дані з декількох таблиць | Поєднує дані з декількох таблиць |
Не потрібно будь-якої конкретної умови для сортування або об’єднання даних | JOIN працює за умовою JOIN, яка необхідна для перевірки даних, що надходять у набір результатів |
Дані з різних таблиць приймаються як різні рядки набору результатів | Дані з різних таблиць об'єднуються в один рядок - наприклад, рядок у наборі результатів може містити 2 стовпці з таблиці1, 3 стовпці з таблиці 2 тощо, залежно від стану JOIN та запиту SELECT |
СОЮЗИ прості та зрозумілі | СПІЛКИ вимагають складних умов, і залежно від потреб можуть використовуватися декілька типів об’єднань, такі як INNER / OUTER тощо. |
Висновок
У цьому підручнику ми дізналися про використання MySQL UNION для поєднання даних із 2 або більше операторів SELECT.
Заява UNION дійсно корисна для збору подібних даних із великих наборів різних таблиць, а потім для аналізу комбінованих даних.
Команда UNION також підтримує речення ALL, яке також дозволяє отримати повторювані записи.
Рекомендована література
- Що таке MySQL і чому він використовується?
- Різниця між SQL Vs MySQL Vs SQL Server (з прикладами)
- Внутрішнє приєднання проти зовнішнього приєднання: Точна різниця з прикладами
- Підручник з MySQL JOIN: Внутрішній, Зовнішній, Хрестовий, Лівий, Правий та Я
- Підручник із створення перегляду MySQL із прикладами коду
- MySQL Створення таблиці Підручник з прикладами
- Підручник із заяв на оновлення MySQL - Синтаксис та приклади оновлення запитів
- 40 найкращих запитань та відповідей на інтерв’ю MySQL (2021 запитання)