MySQL UNION - пълен урок

Anonim

Какво е съюз?

Синдикатите обединяват резултатите от множество SELECT заявки в консолидиран набор от резултати.

Единствените изисквания за това да работи е, че броят на колоните трябва да бъде еднакъв от всички заявки SELECT, които трябва да се комбинират.

Да предположим, че имаме две таблици, както следва

Нека сега създадем UNION заявка за комбиниране на двете таблици с помощта на DISTINCT

SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;

Тук дублиращите се редове се премахват и се връщат само уникални редове.

Забележка: MySQL използва клаузата DISTINCT по подразбиране при изпълнение на UNION заявки, ако не е посочено нищо.

Нека сега създадем UNION заявка, която да комбинира двете таблици, използвайки ALL

SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;

Тук са включени дублиращи се редове и тъй като използваме ВСИЧКИ.

Защо да използвам синдикати

Да предположим, че има недостатък в дизайна на вашата база данни и използвате две различни таблици, предназначени за една и съща цел. Искате да консолидирате тези две таблици в една, като същевременно пропуснете дублиращи се записи от пълзене в новата таблица. В такива случаи можете да използвате UNION.

Обобщение

  • Командата UNION се използва за комбиниране на повече от един резултат от заявка SELECT в една заявка, съдържаща редове от всички заявки за избор.
  • Броят на колоните и типовете данни в операторите SELECT трябва да са еднакви, за да работи командата UNION.
  • Клаузата DISTINCT се използва за премахване на дублиращи се стойности от набора от резултати на заявката UNION. MySQL използва клаузата DISTINCT по подразбиране при изпълнение на UNION заявки, ако не е посочено нищо.
  • Клаузата ALL се използва за връщане на всички дори дублиращите се редове в заявката UNION.

Практически примери с използване на MySQL workbench

В нашия myFlixDB позволява комбиниране

member_number и full_names от таблицата Members

с

movie_id и заглавие от таблицата с филми

Можем да използваме следната заявка

SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;

Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава следните резултати, показани по-долу.

 
membership_number full_names
1 Janet Jones
2 Janet Smith Jones
3 Robert Phil
4 Gloria Williams
5 Leonard Hofstadter
6 Sheldon Cooper
7 Rajesh Koothrappali
8 Leslie Winkle
9 Howard Wolowitz
16 67% Guilty
6 Angels and Demons
4 Code Name Black
5 Daddy's Little Girls
7 Davinci Code
2 Forgetting Sarah Marshal
9 Honey mooners
19 movie 3
1 Pirates of the Caribean 4
18 sample movie
17 The Great Dictator
3 X-Men