====== Set Operatoren ====== Mit Set Operatoren kann man die Rückgabemenge von zwei Queries gegeneinander abgleichen. Teilmenge 1 Schnittmenge |------------------|-------------| Menge 1 |------------------+-------------| (Teilmenge 2) | Menge 2 |-------------+------------------| |------------------+-------------+------------------| Gesamtmenge Die Gesamtmenge ermittelt man mit ''UNION'' (ohne Duplikate) und ''UNION ALL'' (mit Duplikate).\\ Die Schnittmenge wird mit ''INTERSECT'' ermittelt.\\ Die Teilmenge 1 ermittelt man über ''EXCEPT'' (ISO-SQL) bzw. ''MINUS'' (Oracle-spezifische Schreibweise). ===== Einige Beispiele für Set Operatoren ===== ==== UNION (ALL) ==== /* Erstelle einen Report nach folgenden Spezifikationen: - Nachnamen und Department-ID aller Mitarbeiter der EMPLOYEE Tabelle unabhängig davon, ob oder welchem Department sie angehören. - Department-ID und Department-Namen aller Departments der DEPARTMENTS Tabelle unabhängig, ob oder welche Mitarbeiter dort arbeiten. Schreibe einen Query, der beides in einen Report zusammenführt. */ SELECT last_name,department_id,TO_CHAR(null)dept_name FROM employees UNION SELECT TO_CHAR(null),department_id,department_name FROM departments; ==== INTERSECT ==== /* Erstelle eine Liste von Mitarbeiternummern aller Vertriebsmitarbeiter (job_id=SA_REP), die auch im Vertriebs-Department (department_name=Sales) arbeiten. */ SELECT employee_id FROM EMPLOYEES WHERE job_id='SA_REP' INTERSECT SELECT employee_id FROM EMPLOYEES e JOIN DEPARTMENTS d USING(department_id) WHERE d.DEPARTMENT_NAME = 'Sales'; ==== EXCEPT / MINUS ==== /* Erstelle eine Liste aller Länder, in denen es keine Departments gibt. Die Auflistung soll die country_id und country_name anzeigen. */ SELECT country_id, country_name FROM COUNTRIES EXCEPT SELECT c.country_id, c.country_name FROM COUNTRIES c JOIN LOCATIONS l ON c.COUNTRY_ID = l.COUNTRY_ID JOIN DEPARTMENTS d ON l.LOCATION_ID = d.LOCATION_ID; -- Oder Oracle Schreibweise: SELECT country_id, country_name FROM COUNTRIES MINUS SELECT c.country_id, c.country_name FROM COUNTRIES c JOIN LOCATIONS l ON c.COUNTRY_ID = l.COUNTRY_ID JOIN DEPARTMENTS d ON l.LOCATION_ID = d.LOCATION_ID; [[opendocks:oracle-sql-nutshell-doku:nutshell-doku-05|Zurück]] - [[opendocks:oracle-sql-nutshell-doku:nutshell-doku-07|Weiter]]