• intersect-oracle

    L’operatore INTERSECT in Oracle

    In questo articolo vedremo le caratteristiche dell’operatore insiemistico MINUS di Oracle.

    Le tabelle usate per gli esempi per l’operatore Minus

    In un precedente articolo dal titolo “Gli operatori set” abbiamo introdotto gli operatori insiemistici e le loro caratteristiche. Poi è seguito un articolo di dettaglio sugli operatori UNION e UNION ALL e infine un articolo di dettaglio sull’operatore MINUS. In questo articolo affronteremo l’operatore INTERSECT.

    Gli esempi che riporto fanno riferimento a due tabelle create appositamente: OLD_DEPT e NEW_DEPT. La tabella OLD_DEPT rappresenta una tabella creata con una vecchia versione di Oracle. I campi della tabella sono:

    • dated di tipo DATE (supponiamo che non era disponibile TIMESTAMP nella vecchia versione);
    • deptno di tipo NUMBER (anche con decimali);
    • dname di tipo CHAR (supponiamo che non era disponibile VARCHAR2 a lunghezza variabile nella vecchia versione);

    La tabella NEW_DEPT rappresenta una tabella creata con una nuova versione di Oracle. I campi della tabella sono:

    • started di tipo TIMESTAMP(6) (che può memorizzare per default data e ora con sei decimali di precisione sui secondi);
    • deptid di tipo NUMBER(38) (un NUMBER con fino a 38 cifre significative, non decimale);
    • dname di tipo VARCHAR2 (più performante in termini di spazio rispetto a CHAR);

    Lo script di creazione e popolamento delle tabelle sarà il seguente:

    Di seguito il risultato dell’interrogazione della tabella old_dept

    old_dept

    e di quella new_dept.
    new_dept

    L’operatore Intersect

    L’operatore Intersect esegue le query legate tra loro dall’operatore insiemistico e restituisce solo le righe comuni tra il primo insieme di risultati e il secondo, ordinando i risultati.

    La seguente query non restituisce alcuna riga, perché ogni riga della prima tabella è diversa da ciascuna riga della seconda.

    intersect

    Se invece vengono  applicate delle funzioni per eliminare alcune delle differenze, è possibile ottenere una riga in comune.

    intersect-con-risultato

    In questo caso, viene restituita solo una riga, ma se ci fossero state diverse righe comuni, il risultato sarebbe stato ordinato. L’ordine in cui appaiono le query nella query composta non ha alcun effetto sul risultato (a differenza di quanto avviene per l’operatore MINUS).

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">