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 по подразбиране са неподредени.
За да се наложи подреждане от колона, съществуваща в получения набор, може да бъде посочена клауза ORDER BY в края на командата UNION.
Нека използваме същите данни за служители / студенти и да нареждаме резултатите от UNION във възходящ ред по възраст.
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} ОТ {table1} СЪЮЗ ИЗБЕРЕТЕ {columnList} ОТ {table2} | ИЗБЕРЕТЕ {columnList} ОТ {table1} СЪЮЗ ВСИЧКИ ИЗБЕРЕТЕ {columnList} ОТ {table2} |
Изисквания за данни | Данните, които се комбинират, трябва да имат сходни типове данни и трябва да се извличат в същия ред, когато се извличат от множество таблици | Същото като UNION |
често задавани въпроси
В # 1) Съюзът по-бърз ли е от JOIN?
Отговор: UNION и JOIN се използват практически за две различни цели.
Технически погледнато, UNION е много по-бърз от JOIN (особено за големи масиви от данни), тъй като UNION просто обединява редове данни от отделните оператори SELECT.
В # 2) Какво представлява операторът UNION ALL?
Отговор: Подобно на UNION, операторът UNION ALL също връща UNION между 2 SELECT заявки, но разликата е, че той също съдържа дублиращите се редове / записи.
В # 3) Каква е разликата между UNION и JOIN?
Отговор: И UNION, и JOIN се използват за комбиниране на данни от 2 или повече таблици. Но има огромна разлика по отношение на получения набор от резултати и начина на извличане на данните.
Приликите и разликите между JOIN и UNION са изброени в таблицата по-долу:
СЪЮЗ | ПРИСЪЕДИНЯВАНЕ |
---|---|
Комбинира данни от множество таблици | Комбинира данни от множество таблици |
Не изисква някакво конкретно условие за съпоставяне или комбиниране на данни | JOIN работи при условие JOIN, което е необходимо за проверка на данните, постъпващи в набор от резултати |
Данните от различни таблици се приемат като различни редове от набора от резултати | Данните от различни таблици се комбинират в един ред - за един ред в набора от резултати може да съдържа 2 колони от table1, 3 колони от таблица 2 и т.н. в зависимост от условието JOIN и заявка SELECT |
СЪЮЗИТЕ са прости и ясни | JOINS изискват сложни условия и в зависимост от нуждите могат да се използват множество видове съединения като INNER / OUTER и т.н. |
Заключение
В този урок научихме за използването на MySQL UNION за комбиниране на данни от 2 или повече SELECT израза.
Изявлението UNION е наистина полезно за съпоставяне на подобни данни от големи набори от различни таблици и след това за провеждане на анализ на комбинираните данни.
Командата UNION също поддържа клауза ALL, която позволява и извличане на дублиращите се записи.
Препоръчително четене
- Какво е MySQL и защо се използва?
- Разлика между SQL Vs MySQL Vs SQL Server (с примери)
- Вътрешно присъединяване срещу външно присъединяване: Точна разлика с примери
- Урок за присъединяване на MySQL: Вътрешен, Външен, Кръстосан, Ляв, Десен и Аз
- MySQL Урок за създаване на изглед с примери за кодове
- MySQL Създаване на урок за таблици с примери
- Урок за изявление за актуализация на MySQL - Синтаксис и примери за актуализиране на заявки
- Топ 40 най-добри въпроса и отговори за интервю за MySQL (2021 въпроса)