opendocks:oracle-sql-nutshell-doku:nutshell-doku-06
Inhaltsverzeichnis
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-06.txt · Zuletzt geändert: 2026/04/23 15:05 von heiko
