Want to create interactive content? It’s easy in Genially!

Get started free

Presentazione Essenziale

giuseppe.caldarone

Created on January 23, 2024

Start designing with a free template

Discover more than 1500 professional designs like these:

Smart Presentation

Practical Presentation

Essential Presentation

Akihabara Presentation

Pastel Color Presentation

Visual Presentation

Relaxing Presentation

Transcript

CONFRONTO FRA I PREDICATI

PREDICATI CHE ANALIZZERE SONO : IN, NOT IN, ANY, ALL, EXISTS

go!

INTRODUZIONE

IN e NOT in possono essere utilizzati (sotto opportune condizioni) per costruire le operazioni insiemistiche di intersezioni e di differenza di tabelle. La condizione principale è che entrambe le tabelle abbiano una chiave.

Creazione di due tabelle (Impiegati e NuoviDipendenti entrambi con lo stesso schema)

  1. Id
  2. Nome
  3. Cognome
  4. Residenza
  5. Dipartimento

NuoviDipendenti (Id,Nome,Cognome,Residenza,Dipartimento)

2.Dipendenti presenti in entrambe le tabelleImpiegati INTERSECT NuoviDipendenti

  1. Per ragioni organizzative alcuni dipendenti della tabella NuoviDipendenti sono stati inseriti nella tabella Impiegati e altri no.Desideriamo quindi sapere chi sono i nuovi assunti presenti nella tabella Impiegati

3.Per mostrare solo i dipendenti di una delle due tabelle bisogna utilizzare EXCEPT

Index

IN/ NOT IN

ANY

ALL

EXISTS

IN/NOT IN

  • RITORNANDO AL SECONDO PUNTO (Dipendenti presenti in entrambe le tabelle Impiegati INTERSECT NuoviDipendenti) Questa intersezione può essere rappresentata attraverso un'interrogazione.
  • Utilizziamo il predicato IN perché controlla se il valore appartiene ad una serie di valori che vengono inseriti dopo l'in(subquery)

SELECT * FROM Impiegati WHERE ID IN ( SELECT ID FROM Nuovi Dipendenti );

  • PER QUANTO RIGUARDA IL TERZO PUNTO(Per mostrare solo i dipendenti di una delle due tabelle bisogna utilizzare EXCEPT).Questo può essere rappresentanto attraverso un'interrogazione.

SELECT * FROM NuoviDipendenti WHERE ID NOT IN ( SELECT ID FROM Impiegati );

ANY

  • La condizione di confronto di ricerca è vera se il confronto è vero per almeno uno dei valori dell'elenco .
  • Il predicato ANY è falso se la subquery restituisce un insieme vuoto oppure se il confronto è falso per ciascun valore della subquery stessa.
  • Il predicato ANY corrisponde a il predicato IN

ESEMPIO PRODUTTORE(IDProd,RagioneSociale,Indirizzo,Nazione,Ntel,Email) SOFTWARE(IDSoft,Nome,Versione,Lingua,Supporto,Prezzo,IDProd(fk),IDCat(fk)) CATEGORIA(IDCat,Denominazione Visualizzare la ragione sociale e l'indirizzo dei produttori di nazionalità inglese con codice produttore uguale a quelllo di almeno un produttore che realizza dei software con un prezzo superiore a 30 euro SELECT PRODUTTORE.RagioneSociale,PRODUTTORE.Indirizzo FROM PRODUTTORE WHERE PRODUTTORE.Nazione='Inghilterra' AND PRODUTTORE.IDProd = ANY ( SELECT SOFTWARE.IDProd FROM SOFTWARE WHERE SOFTWARE.Prezzo>30);

ALL

  • La condizione di ricerca è vera se il confronto è vero per ciascun dei valori dell'elenco.
  • La condizione di ricerca è falsa se il confronto è falso per almeno uno dei valori della subquery.
  • Il predicato ALL corrisponde a NOT IN

Visualizzare il codice del software la ragione sociale e l'indirizzo dei produttori di nazionalità inglese con codice produttore uguale a quello di tutti i produttori che realizza dei software con un prezzo superiore a 30 euro

SELECT PRODUTTORE.RagioneSociale,PRODUTTORE.Indirizzo FROM PRODUTTORE WHERE PRODUTTORE.Nazione='Inghilterra' AND PRODUTTORE.IDProd = ALL ( SELECT SOFTWARE.IDProd FROM SOFTWARE WHERE SOFTWARE.Prezzo>30);

Il risultato che appare è l'opposto del risultato precedente

EXISTS

  • Il predicato EXISTS controlla se vengono restituite righe dalla subquery.
  • La condizione di ricerca è vera solo se esiste almeno una riga come risultato
  • La condizione di ricerca è falsa se la subquery restituisce un insieme vuoto.
  • Il predicato EXISTS è l'unico che non mette in relazione un valore con quello della subquery, per questo motivo si utilizza la forma SELECT* nella subquery stessa

Visualizzare la ragione sociale e l'indirizzo dei produttori,solo se esistono produttori di nazionalità inglese

SELECT PRODUTTORE.RagioneSociale,PRODUTTORE.Indirizzo FROM PRODUTTORE WHERE EXISTS ( SELECT* FROM PRODUTTORE WHERE PRODUTTORE.Nazione='Inghilterra' );