Benutzer-Werkzeuge

Webseiten-Werkzeuge


opendocks:oracle-sql-nutshell-doku:nutshell-doku-06

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;

Zurück - Weiter

opendocks/oracle-sql-nutshell-doku/nutshell-doku-06.txt · Zuletzt geändert: 2026/04/23 15:05 von heiko

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki