Guadagna ON-Line

 » Home » DataBase Relazionali e linguaggio SQL

Comandi SQL Vari: Altre Subquery

 

Un altro uso comune delle Queries coinvolge l’uso di operatori per permettere ad una condizione di WHERE di includere l’output di una SELECT di una Query annidata.

Dapprima, si mostri la lista degli acquirenti che hanno comprato un oggetto dispendioso (ovvero con il prezzo dell’articolo che superi di 100 dollari il prezzo medio di tutti gli oggetti comprati):

SELECT IDAcquirente
FROM ANTICHITA
WHERE Prezzo >

    (SELECT AVG(Prezzo) + 100
        FROM ANTICHITA);

La query annidata fra parentesi calcola il prezzo medio, somma 100, ed usando il risultato, si stampa un IDAcquirente per ciascun oggetto venduto di prezzo superiore. Si può usare DISTINCT IDAcquirente per visualizzare una sola riga per ciascun IDAcquirente selezionato.

Stampa i Cognomi della tabella ANTIQUARI, solo se hanno comprato un oggetto:

SELECT COGNOMEANTIQUARIO
FROM ANTIQUARI
WHERE IDAntiquario IN

    (SELECT DISTINCT IDAcquirente
        FROM ANTICHITA);

La query annidata (o sottoquery) seleziona una lista di acquirenti, e stampa il cognome di un Antiquario se e solo se il suo IDAntiquario appare nella lista selezionata dalla sottoquery (talvolta chiamata lista dei candidati).
Nota: alcuni DBMS permettono di usare il segno uguale (‘=’) al posto di IN; per chiarezza, però, si preferisce l’uso di IN, in quanto la sottoquery non ritorna un valore singolo, bensì una lista.

Per un esempio relativo all' UPDATE, sappiamo che il gentiluomo che ha acquistato la libreria ha il Nome sbagliato nel database, e che il nome corretto è Giovanni:

UPDATE ANTIQUARI
SET NOMEANTIQUARIO = 'Giovanni'
WHERE IDAntiquario =

    (SELECT IDAcquirente
        FROM ANTICHITA
        WHERE OGGETTO = 'Libreria');

In primis, la sottoquery cerca l’IDAcquirente per la persona o le persone che hanno acquistato la libreria,
in secundis la query esterna aggiorna il Nome.

Regola delle sottoquery: quando si ha una sottoquery come parte di una condizione di WHERE, l’istruzione di SELECT deve avere un numero di colonne pari in numero e tipo a quelle contenute nella condizione di WHERE della query esterna.

In altre parole, se si ha:

“WHERE NomeColonna = (SELECT….);”

l’istruzione di Select deve avere solo una colonna, per trovare una corrispondenza con il NomeColonna della condizione di Where esterna; in più, il tipo deve essere il medesimo (due interi, due stringhe di caratteri, etc..).

 

di Pietro Suffritti







Indice
 Introduzione
Cos'e' un database?
Database Relazionali
Cos'e' SQL
Commit e Rollback
Gestione multiutenza
 Linguaggio SQL
Il comando SELECT
Selez. Condizionata
Operatori Relazionali
Condizioni complesse
IN, BETWEEN e NOT
LIKE e carattere %
I Join
Le Chiavi
Creare un Join
DISTINCT e Duplicati
Alias, In e Subquery
 Comandi SQL Vari
Funzioni di Aggregazione
Viste
Creare Nuove Tabelle
Modifica struttura tab.
Inserire dati in tabella
Eliminare dati da tabella
Modifica dei dati
Indici
GROUP BY ed HAVING
Altre Subquery
EXISTS ed ALL
UNION ed Outer Joins
 Sommario Sintassi
 Link utili SQL

     

by 1999-2012 , ADMEDIA multimedia software development, Tutti i diritti riservati.
Per utilizzare il materiale pubblicato su HarrrDito.it è necessario richiedere l'autorizzazione.
Tutti i marchi citati sono copyright dei rispettivi proprietari. - Note Legali -




cod: 2-1.15.54 - 38.107.179.221