Операторът, използван за свързване или комбиниране на две заявки, не е нищо друго освен оператори SET. Операторите, категоризирани в оператори SET, са както следва:
- Оператор UNION.
- Оператор UNION ALL’.
- Оператор INTERSECT.
- МИНУС оператор.
Правилата, които трябва да се спазват, за да работите с SET оператор, са следните:
- Броят на колоните и редът на колоните трябва да са еднакви.
- Типът данни трябва да е съвместим.
Нека разберем всеки от операторите SET с примери.
Разгледайте следните таблици заедно с дадените записи.
Таблица 1:Служители
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID | WORKING_HOURS | POL |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 | 9 | М |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 | 10 | М |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 | 10 | F |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 | 12 | М |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 | 9 | F |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 | 9 | F |
3002 | ANUJA | КЪДЕ | 50500 | ДЖАЙПУР | FMW | 2 | 9 | F |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 | 12 | М |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 | 10 | М |
Таблица 2:Служител.
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID | WORKING_HOURS | POL |
1001 | Вайбхав | Шарма | 65 000 | ПУНА | ORACLE | 1 | 12 | М |
1002 | Нихил | Вани | 60 000 | NOIDA | ORACLE | 1 | 9 | М |
1003 | Вайбхави | Мишра | 50 000 | ДЖАЙПУР | FMW | 2 | 10 | F |
2001 | Ручика | Джайн | 55500 | ЧАНДИГАР | ORACLE | 1 | 10 | F |
2002 | Прачи | Шарма | 65500 | ПУНА | FMW | 2 | 12 | F |
2003 | Бхавеш | Джайн | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 | 9 | М |
3001 | Дийпам | Джаухари | 55500 | ПУНА | JAVA | 3 | 9 | М |
3002 | ANUJA | КЪДЕ | 50500 | ДЖАЙПУР | FMW | 2 | 9 | F |
3003 | Праноти | Шенде | 58500 | МУМБАЙ | JAVA | 3 | 12 | F |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 | 10 | М |
Таблица3:Мениджър.
Managerid | име_на_мениджър | мениджърски отдел |
1 | Снехдип Каур | ORACLE |
2 | Кирти Киртане | FMW |
3 | Абхишек Маниш | JAVA |
4 | Анупам Мишра | ТЕСТВАНЕ |
Таблица 4:Мениджър1.
Managerid | име_на_мениджър | мениджърски отдел |
1 | Ишита Агравал | ORACLE |
2 | Кирти Киртане | FMW |
3 | Абхишек Маниш | JAVA |
4 | Пол Оукип | ТЕСТВАНЕ |
Оператор UNION
UNION операторът е първият оператор, използван за сливане или комбиниране на два или повече оператора SELECT. Ако и само ако броят им на колоните и редът на колоните са еднакви.
Дублираните редове няма да бъдат взети предвид в резултата, получен след изпълнение на операцията UNION.
Синтаксисът за операция UNION е както следва,
SELECT * FROM TABLE_NAME1 UNION SELECT * FROM TABLE_NAME2;
Пример 1: Изпълнете заявка за изпълнение на операция UNION между таблицата Employees и Employee table.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от служителите, а втората заявка SELECT извлича данните от данните за служителите, а операцията UNION се изпълнява и за двете заявки SELECT.
Операцията UNION ще отхвърли дублиращи се редове между двете таблици. Следният изход се показва като:
Показват се и двата записа в таблицата с изключение на дублиращи се записи.
Пример 2: Изпълнете заявка за изпълнение на операция UNION между таблица Employees и Employee таблица. Но показвайте само записите на служителите от таблицата на служителите, които принадлежат на град Мумбай, а от таблицата на служителите само записите на служителите, чиято заплата на служителите е по-голяма от 50 000 и по-малка от 60 000.
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION SELECT * FROM EMPLOYEE WHERE SALARY > 50000 AND SALARY < 60000;
В горната заявка използвахме две заявки SELECT. Заявката First SELECT извлича само онези записи, чийто служител принадлежи към град Мумбай от таблицата Employees. И изпълнете операция UNION с втората заявка SELECT, извлича само онези записи, чиято заплата на служителите е по-голяма от 50000, но по-малка от 60000 от таблицата на служителите. Операцията UNION ще отхвърли дублиращи се редове между двете таблици.
Следният изход се показва като:
Показват се и двата записа в таблицата с изключение на дублиращи се записи.
Пример 3: Изпълнете заявка за изпълнение на операция UNION между таблица Employees и Employee таблица. Искаме само онези записи от таблицата на служителите, чийто град на служителите принадлежи на „Пуна“ и „Джайпур“.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'JAIPUR') UNION SELECT * FROM EMPLOYEE;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича онези записи, чиито служители принадлежат към град „Пуна“ и „Джайпур“ от таблицата „Служители“. Операцията UNION се изпълнява със записите, извлечени от втората заявка SELECT от служителя на таблицата.
Операцията UNION ще отхвърли дублиращи се редове между двете таблици. Следният изход се показва като:
Както всички можем да видим, резултатите от първите пет записа са тези служители, които принадлежат към град Пуна или Джайпур. А останалите записи са от таблицата на служителите, втората заявка SELECT.
Показват се и двата записа в таблицата с изключение на дублиращи се записи.
Пример 4: Изпълнете заявка за изпълнение на операция UNION между таблица Employees и Employee таблица. Искаме само онези записи от таблицата на служителите, чийто служител започва с V.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE WHERE FIRST_NAME LIKE 'V%';
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича всички записи от таблицата Employees. Операцията UNION се изпълнява със записите, извлечени от втората заявка SELECT от служителя на таблицата, чието име започва с „V“.
Операцията UNION ще отхвърли дублиращи се редове между двете таблици. Следният изход се показва като:
Както всички можем, първите 10 резултата са от таблицата „Служители“, а останалите са от таблицата „Служители“, чийто служител започва с „V“.
Пример 5: Изпълнете заявка за изпълнение на операция UNION между таблицата на мениджър и таблицата на мениджър1.
SELECT * FROM MANAGER UNION SELECT * FROM MANAGER1;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от мениджъра, а втората заявка SELECT извлича данните от данни на мениджър1, а операцията UNION се изпълнява и за двете заявки SELECT.
Операцията UNION ще отхвърли дублиращи се редове между двете таблици. Следният изход се показва като:
Показват се и двата записа в таблицата с изключение на дублиращи се записи.
ОБЪЕДИНЕНИЕ НА ВСИЧКИ оператори
Оператор UNION ALL комбинира всички данни от двете заявки. В оператора UNION дублиращите се записи не бяха взети предвид в резултата, но UNION ALL считаше дублиращи се записи в резултата, получен след извършване на операцията UNION ALL.
Синтаксисът за операция UNION ALL е както следва,
SELECT * FROM TABLE_NAME1 UNION ALL SELECT * FROM TABLE_NAME2;
Пример 1: Изпълнете заявка за извършване на операция UNION ALL между таблицата Employees и Employee table.
SELECT * FROM EMPLOYEES UNION ALL SELECT * FROM EMPLOYEE;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от служителите и изпълнява операция UNION ALL с данните, извлечени от втората заявка SELECT, извлича данните от таблицата на служителите.
Следният изход се показва като:
Всички записи ще се показват и от двете таблици „Служители“ и „Служител“, дублираните записи също се показват, докато изпълняваме операция UNION ALL.
Пример 2: Изпълнете заявка за изпълнение на операция UNION ALL между таблица Employees и Employee таблица. Но показвайте само записите на служителите от таблицата на служителите, които принадлежат на град Мумбай. От таблицата на служителите се виждат само регистрите на служителите, чиято заплата на служителите е 60 500, а градът е „Мумбай“.
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION ALL SELECT * FROM EMPLOYEE WHERE SALARY = 60500 AND CITY = 'MUMBAI';
В горната заявка използвахме две заявки SELECT. Заявката First SELECT извлича само онези записи, чийто служител принадлежи към град Мумбай от таблицата Employees. И изпълнете операция UNION ALL с втората заявка SELECT, извлича само онези записи, чиято заплата на служителите е 60 500 и градът е „Мумбай“ от таблицата на служителите.
Следният изход се показва като:
Показват се и двата записа в таблицата, включително дублиращи се записи, докато изпълняваме операции UNION ALL.
Пример 3: Изпълнете заявка за изпълнение на операция UNION между таблица Employees и Employee таблица. Искаме само онези записи от таблицата „Служители“, чийто град на служителите принадлежи на „Пуна“, „Мумбай“ и „Джайпур“.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'MUMBAI', 'JAIPUR') UNION ALL SELECT * FROM EMPLOYEE;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича онези записи, чиито служители принадлежат към град „Пуна“, „Мумбай“ и „Джайпур“ от таблицата „Служители“. Операцията UNION ALL се изпълнява със записите, извлечени от втората заявка SELECT от служителя на таблицата.
Следният изход се показва като:
Показват се и двата записа в таблицата, включително дублиращи се записи, докато изпълняваме операции UNION ALL.
Пример 4: Изпълнете заявка за изпълнение на операция UNION ALL между таблицата на мениджър и таблицата на мениджър1.
SELECT * FROM MANAGER UNION ALL SELECT * FROM MANAGER1;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от мениджъра и изпълнява операции UNION ALL с данните, извлечени от втората заявка SELECT, извлича данните от таблицата manager1.
Следният изход се показва като:
Всички записи ще бъдат показани и от двете таблици Manager и Manager1; дублиращи се записи се показват, докато изпълняваме операции UNION ALL.
Оператори INTERSECT
Операторът Intersect се използва за комбиниране на два или повече оператора SELECT, но показва само данните, подобни на оператора SELECT.
Синтаксисът за операция INTERSECT е както следва,
SELECT * FROM TABLE_NAME1 INTERSECT SELECT * FROM TABLE_NAME2;
Пример 1: Изпълнете заявка за извършване на операция INTERSECT между таблицата Employees и Employee table.
SELECT * FROM EMPLOYEES INTERSECT SELECT * FROM EMPLOYEE;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от служителите и извършва операция INTERSECT с данните, извлечени от втората заявка SELECT, извлича данните от таблицата на служителите.
Следният изход се показва като:
Само подобни записи ще се показват и от двете таблици, тъй като извършихме операция INTERSECT между таблицата Employees и Employee table.
Пример 2: Изпълнете заявка за извършване на операция INTERSECT между таблицата Manager и таблицата Manager1.
SELECT * FROM MANAGER INTERSECT SELECT * FROM MANAGER1;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от Manager и изпълнява операция INTERSECT с данните, извлечени от втората заявка SELECT, извлича данните от таблицата Manager1.
Следният изход се показва като:
Само подобни записи ще се показват и от двете таблици, тъй като извършихме операция INTERSECT между таблицата на мениджър и таблицата на мениджър1.
МИНУС оператори
Операторът MINUS се използва за връщане на редовете, присъстващи в първата заявка, но отсъстващи в останалите заявки без дубликати.
Синтаксисът за операция MINUS е както следва.
SELECT * FROM TABLE_NAME1 EXCEPT SELECT * FROM TABLE_NAME2;
Забележка: Ключовата дума MINUS се поддържа само в бази данни ORACLE. Можем да използваме ключова дума EXCEPT за други бази данни, за да извършим подобна операция.
Пример 1: Изпълнете заявка за извършване на операция MINUS между таблицата Employees и Employee table.
SELECT * FROM EMPLOYEES EXCEPT SELECT * FROM EMPLOYEE;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от служителите и извършва операция MINUS с данните, извлечени от втората заявка SELECT, извлича данните от таблицата на служителите.
Следният изход се показва като:
Само несъвпадащи записи ще се показват и от двете таблици, тъй като извършихме операция МИНУС между таблицата Employees и Employee table.
Пример 2: Изпълнете заявка за извършване на операция MINUS между таблицата Manager и таблицата Manager1.
SELECT * FROM MANAGER EXCEPT SELECT * FROM MANAGER1;
В горната заявка използвахме две заявки SELECT. Първата заявка SELECT извлича данните от Manager и извършва операция MINUS с данните, извлечени от втората заявка SELECT, извлича данните от таблицата Manager1.
Следният изход се показва като:
Само несъвпадащи записи ще се показват и от двете таблици, тъй като извършихме операция МИНУС между таблицата на мениджър и таблицата на мениджър 1.