SQL (Structured Query Language)
Un corso completo sul linguaggio SQL (Structured Query Language): definizioni, esempi ed esercizi

da | 6 Feb 2006 | Informatica | 15 commenti

SQL - Soluzioni esercizi cap. 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

15 Commenti

  1. Gian

    SAlve, quindi non esiste una funzione come p.e. in Excel, che estragga alcuni caratteri a destra o sinistra?
    Ho provato cn right(nome, 3) ma non lo riconosce

    Rispondi
  2. Angelo

    SELECT COUNT (*)
    Buongiorno

    FROM IMPIEGATO
    WHERE DIPARTIMENTO = ‘PRODUZIONE’

    genera il seguente errore:
    “The data types text and varchar are incompatible in the equal to operator”.

    Invece, sostituendo con WHERE DIPARTIMENTO LIKE ‘PRODUZIONE’, la query funziona.

    Rispondi
  3. Itrecensioni.top

    Ho imparato alcune cose buone qui. Certamente merita il bookmarking per la rivisitazione.

    Mi chiedo quanti sforzi hai impostato per creare questo tipo di fantastico sito informativo.

    Rispondi
  4. Angelo

    guida molto interessante grazie se ci fossero anche le istruzioni per creare la tabella sarebbe completa secondo me

    Rispondi
  5. Stefano

    Grazie per la guida. Semplice, interessante ed utile.
    Vorremmo segnalare due cose. Un errore ed un dubbio.
    Errore:
    SELECT DIVISIONE, AVG(STIPENDIO)
    FROM DIPENDENTI
    HAVING AVG(STIPENDIO) > 2200000;

    manca la “group by DIVISIONE” prima della HAVING.

    Di conseguenza il dubbio sul punto 6.
    HAVING non è necessario che venga posta dopo la clausola GROUP BY.
    Sicuri?

    Rispondi
  6. Davide

    Guida Molto utile, segnalo un errore nella query 9, capitolo 2, delle soluzioni:
    PrezzoIngrosso è moltiplicato * 1,5 ma si chiedeva un aumento del 15%, ciò significa moltiplicare * 1,15

    Rispondi
  7. V

    Grazie guida molto utile per imparare da 0.

    Rispondi
  8. FortyZone

    Veramente complimenti, una guida dettagliata, semplice e adatta a tutti 🙂

    FortyZone

    Rispondi
  9. Andrea

    Davvero complimenti ragazzi. La prima guida che per chi parte da zero è manna dal cielo…PERFETTA!!

    Rispondi
  10. James

    nel punto 8 la soluzione non dovrebbe essere con HAVING MIN(IMPORTO) > 400 000; cioè: SELECT BENEFICIARI FROM ASSEGNI GROUP BY BENEFICIARIO HAVING MIN(IMPORTO) > 400 000;

    Rispondi
  11. Luca

    un ottimo Manuale unico errore (se vogliamo chiamarlo cosi) i tipi di dati Char(5) number(5,2) cosa sono e come si usano

    Rispondi
  12. Valerio

    Complimenti ottimo sito! fatto davvero bene. Grazie!

    Rispondi
  13. Lorenzo

    ma come si crea il database?

    Rispondi
  14. Alessia

    È stata spiegato molto bene.

    Rispondi

Invia un commento

Il tuo indirizzo email non sarà pubblicato.

Share This