Operátor používaný ke spojení nebo spojení dvou dotazů není nikdo jiný než operátor SET. Operátory kategorizované do operátorů SET jsou následující:
- Operátor UNION.
- Operátor UNION ALL.
- Operátor INTERSECT.
- Operátor MINUS.
Pravidla, která je třeba dodržovat při provozu pomocí SET Operator, jsou následující:
- Počet sloupců a pořadí sloupců musí být stejné.
- Typ dat musí být kompatibilní.
Pojďme pochopit každý z operátorů SET na příkladech.
Zvažte následující tabulky spolu s danými záznamy.
Tabulka1:Zaměstnanci
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE | PRACOVNÍ_HODINY | GENDER |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 | 10 | M |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 | 10 | F |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 | 12 | M |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 | 9 | F |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 | 9 | F |
3002 | ANUJA | KDE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 | 12 | M |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 | 10 | M |
Tabulka 2:Zaměstnanec.
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE | PRACOVNÍ_HODINY | GENDER |
1001 | Vaibhav | Sharma | 65 000 | PUNE | ORACLE | 1 | 12 | M |
1002 | Nikhil | Vani | 60 000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | Vaibhavi | Mishra | 50 000 | JAIPUR | FMW | 2 | 10 | F |
2001 | Ruchika | Jain | 55500 | CHANDIgarH | ORACLE | 1 | 10 | F |
2002 | Prachi | Sharma | 65500 | PUNE | FMW | 2 | 12 | F |
2003 | Bhavesh | Jain | 50 000 | MUMBAI | TESTOVÁNÍ | 4 | 9 | M |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 | 9 | M |
3002 | ANUJA | KDE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | Pranoti | Shende | 58500 | MUMBAI | JAVA | 3 | 12 | F |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 | 10 | M |
Tabulka 3:Správce.
Managerid | název_manažera | manažer_oddělení |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTOVÁNÍ |
Tabulka 4:Správce1.
Managerid | název_manažera | manažer_oddělení |
1 | Ishita Agrawal | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Paul Oakip | TESTOVÁNÍ |
Operátor UNION
Operátor UNION je prvním operátorem používaným ke sloučení nebo spojení dvou nebo více příkazů SELECT. Právě tehdy a jen tehdy, když jejich počet sloupců a pořadí sloupců jsou stejné.
Duplicitní řádky nebudou brány v úvahu ve výsledku získaném po provedení operace UNION.
Syntaxe operace UNION je následující,
SELECT * FROM TABLE_NAME1 UNION SELECT * FROM TABLE_NAME2;
Příklad 1: Proveďte dotaz k provedení operace UNION mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První dotaz SELECT načte data od zaměstnanců a druhý dotaz SELECT načte data z dat zaměstnanců a operace UNION se provede u obou dotazů SELECT.
Operace UNION zahodí duplicitní řádky mezi oběma tabulkami. Následující výstup je zobrazen jako:
Zobrazí se oba záznamy tabulky kromě duplicitních záznamů.
Příklad 2: Proveďte dotaz k provedení operace UNION mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci. Zobrazte však pouze záznamy zaměstnanců z tabulky zaměstnanců, kteří patří městu Bombaj, a z tabulky zaměstnanců pouze záznamy zaměstnanců, jejichž plat zaměstnanců je vyšší než 50 000 a nižší než 60 000.
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION SELECT * FROM EMPLOYEE WHERE SALARY > 50000 AND SALARY < 60000;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte z tabulky Zaměstnanci pouze ty záznamy, jejichž zaměstnanec patří do města Bombaj. A provedení operace UNION s druhým dotazem SELECT načte z tabulky zaměstnanců pouze ty záznamy, jejichž plat zaměstnance je větší než 50 000, ale menší než 60 000. Operace UNION zahodí duplicitní řádky mezi oběma tabulkami.
Následující výstup je zobrazen jako:
Zobrazí se oba záznamy tabulky kromě duplicitních záznamů.
Příklad 3: Proveďte dotaz k provedení operace UNION mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci. Chceme pouze ty záznamy z tabulky Zaměstnanci, jejichž město zaměstnanců patří do „Pune“ a „Džajpuru“.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'JAIPUR') UNION SELECT * FROM EMPLOYEE;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První dotaz SELECT načte záznamy, jejichž zaměstnanci patří do města „Pune“ a „Džajpur“ z tabulky Zaměstnanci. Operace UNION se provádí se záznamy získanými z druhého dotazu SELECT od zaměstnance tabulky.
Operace UNION zahodí duplicitní řádky mezi oběma tabulkami. Následující výstup je zobrazen jako:
Jak všichni vidíme, výsledkem prvních pěti záznamů jsou zaměstnanci, kteří patří do města Pune nebo Jaipur. A záznamy o odpočinku jsou z tabulky zaměstnanců, druhého dotazu SELECT.
Zobrazí se oba záznamy tabulky kromě duplicitních záznamů.
Příklad 4: Proveďte dotaz k provedení operace UNION mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci. Chceme pouze ty záznamy z tabulky Zaměstnanci, jejichž jméno zaměstnance začíná na V.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE WHERE FIRST_NAME LIKE 'V%';
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První dotaz SELECT načte všechny záznamy z tabulky Zaměstnanci. Operace UNION se provádí se záznamy získanými z druhého dotazu SELECT od zaměstnance tabulky, jehož křestní jméno začíná na 'V'.
Operace UNION zahodí duplicitní řádky mezi oběma tabulkami. Následující výstup je zobrazen jako:
Jak všichni můžeme, prvních 10 výsledků pochází z tabulky Zaměstnanci a zbytek je z tabulky Zaměstnanci, jehož křestní jméno zaměstnance začíná na „V“.
Příklad 5: Proveďte dotaz k provedení operace UNION mezi tabulkou Manager a tabulkou Manager1.
SELECT * FROM MANAGER UNION SELECT * FROM MANAGER1;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První dotaz SELECT načte data z manažera a druhý dotaz SELECT načte data z dat manažera1 a operace UNION se provede na obou dotazech SELECT.
Operace UNION zahodí duplicitní řádky mezi oběma tabulkami. Následující výstup je zobrazen jako:
Zobrazí se oba záznamy tabulky kromě duplicitních záznamů.
VŠICHNI Operátoři UNION
Operátor UNION ALL kombinuje všechna data z obou dotazů. V operátoru UNION nebyly duplicitní záznamy brány v úvahu ve výsledku, ale UNION ALL považoval za duplicitní záznamy ve výsledku získaném po provedení operace UNION ALL.
Syntaxe operace UNION ALL je následující,
SELECT * FROM TABLE_NAME1 UNION ALL SELECT * FROM TABLE_NAME2;
Příklad 1: Proveďte dotaz pro provedení operace UNION ALL mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci.
SELECT * FROM EMPLOYEES UNION ALL SELECT * FROM EMPLOYEE;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte data od zaměstnanců a provede operaci UNION ALL s daty načtenými druhým SELECT dotazem načte data z tabulky zaměstnanců.
Následující výstup je zobrazen jako:
Všechny záznamy se zobrazí z tabulek Zaměstnanci a Zaměstnanec, duplicitní záznamy se zobrazí také při provádění operace UNION ALL.
Příklad 2: Proveďte dotaz k provedení operace UNION ALL mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci. Ale zobrazte pouze záznamy zaměstnanců z tabulky zaměstnanců, které patří městu Bombaj. Z tabulky zaměstnanců se zobrazí pouze záznamy zaměstnanců, jejichž plat zaměstnance je 60 500 a město je „Bombaj“.
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION ALL SELECT * FROM EMPLOYEE WHERE SALARY = 60500 AND CITY = 'MUMBAI';
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte z tabulky Zaměstnanci pouze ty záznamy, jejichž zaměstnanec patří do města Bombaj. A proveďte operaci UNION ALL s druhým dotazem SELECT načte z tabulky zaměstnanců pouze ty záznamy, jejichž plat zaměstnance je 60 500 a město je „Bombaj“.
Následující výstup je zobrazen jako:
Při provádění operací UNION ALL jsou zobrazeny oba záznamy tabulky, včetně duplicitních záznamů.
Příklad 3: Proveďte dotaz k provedení operace UNION mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci. Chceme pouze ty záznamy z tabulky Zaměstnanci, jejichž město zaměstnanců patří do 'Pune', 'Bombaj' a 'Džajpuru'.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'MUMBAI', 'JAIPUR') UNION ALL SELECT * FROM EMPLOYEE;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První dotaz SELECT načte ty záznamy, jejichž zaměstnanci patří do města „Pune“, „Bombaj“ a „Džajpur“ z tabulky Zaměstnanci. Operace UNION ALL se provádí se záznamy získanými z druhého dotazu SELECT od zaměstnance tabulky.
Následující výstup je zobrazen jako:
Při provádění operací UNION ALL jsou zobrazeny oba záznamy tabulky, včetně duplicitních záznamů.
Příklad 4: Proveďte dotaz pro provedení operace UNION ALL mezi tabulkou Manager a tabulkou Manager1.
SELECT * FROM MANAGER UNION ALL SELECT * FROM MANAGER1;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte data z Manageru a provede operace UNION ALL s daty načtenými Druhým SELECT dotazem načte data z tabulky manager1.
Následující výstup je zobrazen jako:
Zobrazí se všechny záznamy z obou tabulek Manager a Manager1; duplicitní záznamy se zobrazují při provádění operací UNION ALL.
Operátoři INTERSECTU
Operátor Intersect se používá ke kombinaci dvou nebo více příkazů SELECT, ale zobrazuje pouze data podobná příkazu SELECT.
Syntaxe operace INTERSECT je následující,
SELECT * FROM TABLE_NAME1 INTERSECT SELECT * FROM TABLE_NAME2;
Příklad 1: Proveďte dotaz pro provedení operace INTERSECT mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci.
SELECT * FROM EMPLOYEES INTERSECT SELECT * FROM EMPLOYEE;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte data od zaměstnanců a provede operaci INTERSECT s daty načtenými druhým SELECT dotazem načte data z tabulky zaměstnanců.
Následující výstup je zobrazen jako:
Z obou tabulek se zobrazí pouze podobné záznamy, protože jsme provedli operaci INTERSECT mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci.
Příklad 2: Proveďte dotaz pro provedení operace INTERSECT mezi tabulkou Manager a tabulkou Manager1.
SELECT * FROM MANAGER INTERSECT SELECT * FROM MANAGER1;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte data z manažera a provede operaci INTERSECT s daty načtenými druhým SELECT dotazem načte data z tabulky Manager1.
Následující výstup je zobrazen jako:
Z obou tabulek se zobrazí pouze podobné záznamy, protože jsme provedli operaci INTERSECT mezi tabulkou Manager a tabulkou Manager1.
Operátoři MÍNUS
Operátor MINUS se používá k vrácení řádků přítomných v prvním dotazu, ale chybějících ve zbývajících dotazech bez duplicit.
Syntaxe operace MINUS je následující.
SELECT * FROM TABLE_NAME1 EXCEPT SELECT * FROM TABLE_NAME2;
Poznámka: Klíčové slovo MINUS je podporováno pouze v databázích ORACLE. K provedení podobné operace můžeme použít klíčové slovo EXCEPT pro jiné databáze.
Příklad 1: Proveďte dotaz pro provedení operace MINUS mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci.
SELECT * FROM EMPLOYEES EXCEPT SELECT * FROM EMPLOYEE;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte data od zaměstnanců a provede operaci MINUS s daty načtenými druhým SELECT dotazem načte data z tabulky zaměstnanců.
Následující výstup je zobrazen jako:
Z obou tabulek se zobrazí pouze neshodné záznamy, protože jsme provedli operaci MINUS mezi tabulkou Zaměstnanci a tabulkou Zaměstnanci.
Příklad 2: Proveďte dotaz pro provedení operace MINUS mezi tabulkou Manager a tabulkou Manager1.
SELECT * FROM MANAGER EXCEPT SELECT * FROM MANAGER1;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte data z manažera a provede operaci MINUS s daty načtenými druhým SELECT dotazem načte data z tabulky Manager1.
Následující výstup je zobrazen jako:
Z obou tabulek se zobrazí pouze neshodné záznamy, protože jsme provedli operaci MINUS mezi tabulkou Manager a tabulkou Manager1.