SOLUZIONI ESERCIZI CAPITOLO 5


1) Possiamo ottenere quanto richiesto utilizzando una delle seguenti select.

La seconda select utilizza usa una sintassi non implementabile tramite SQL Plus 8.0; notiamo che i nomi dei campi specificati in ON sono preceduti dal nome della tabella a cui appartengono.

SELECT ISCRITTI.NOME, FAMILIARI.NOME, PARENTELA
FROM ISCRITTI, FAMILIARI
WHERE MATRICOLA = MATRICOLA_DEL_PARENTE_ISCRITTO;

SELECT ISCRITTI.NOME, FAMILIARI.NOME, PARENTELA
FROM ISCRITTI INNER JOIN FAMILIARI
ON ISCRITTI.MATRICOLA = FAMILIARI.MATRICOLA_DEL_PARENTE_ISCRITTO;

2)

SELECT ISCRITTI.NOME, FAMILIARI.NOME, PARENTELA
FROM ISCRITTI LEFT JOIN FAMILIARI
ON ISCRITTI.MATRICOLA = FAMILIARI.MATRICOLA_DEL_PARENTE_ISCRITTO;

3) Possiamo utilizzare una delle seguenti select.

SELECT ISCRITTI.NOME, FAMILIARI.NOME, PARENTELA
FROM ISCRITTI INNER JOIN FAMILIARI
ON
(ISCRITTI.MATRICOLA = FAMILIARI.MATRICOLA_DEL_PARENTE_ISCRITTO AND ETA < 20);

SELECT ISCRITTI.NOME, FAMILIARI.NOME, PARENTELA
FROM ISCRITTI, FAMILIARI
WHERE ISCRITTI.MATRICOLA = FAMILIARI.MATRICOLA_DEL_PARENTE_ISCRITTO
AND ETA < 20;

4) Una possibile soluzione del problema è la seguente select:

SELECT MARCHE.COD_CASA, NOME_CASA, CITTA, NOME_AUTO
FROM MARCHE, MODELLI
WHERE MARCHE.COD_CASA = MODELLI.COD_CASA
AND CILINDRATA BETWEEN 1000 AND 2000
AND TIPO = 'SPORT';

Possiamo ottenere lo stesso risultato utilizzando le parole chiave INNER JONI e/o adoperare gli operatori di confronto classici invece di BETWEEN e END.

5) Possiamo utilizzare una delle seguenti select.

SELECT MARCHE.COD_CASA, NOME_CASA
FROM MARCHE, MODELLI
WHERE MARCHE.COD_CASA = MODELLI.COD_CASA
AND TIPO = 'SPORT'
GROUP BY MARCHE.COD_CASA, NOME_CASA
HAVING COUNT(*) > 2;

SELECT MARCHE.COD_CASA, NOME_CASA
FROM MARCHE INNER JOIN MODELLI
ON
        (MARCHE.COD_CASA = MODELLI.COD_CASA
         AND TIPO = 'SPORT')
GROUP BY MARCHE.COD_CASA, NOME_CASA
HAVING COUNT(*) > 2;

6) Possiamo utilizzare una delle seguenti soluzioni:

SELECT NUMERO
FROM TABELLA1
INTERSECT
SELECT NUMERO
FROM TABELLA2;

La parola chiave INTERSECT non è implementata da Access.

SELECT TABELLA1.NUMERO
FROM TABELLA1, TABELLA2
WHERE TABELLA1.NUMERO = TABELLA2.NUMERO;

SELECT TABELLA1.NUMERO
FROM TABELLA1 INNER JOIN TABELLA2
ON TABELLA1.NUMERO = TABELLA2.NUMERO;

Quest’ultima sintassi non è accettata da SQL Plus 8.0


 
Precedente
INDICE
Segue
pag. 19 di 20