SQL - Soluzioni esercizi cap. 5
Indice
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
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
applicando l’add_months ad alcuni sql editor online appare il seguente messaggio di errore:
[“date” is not a recognized table hints option. If it is intended as a parameter to a table-valued function or to the CHANGETABLE function, ensure that your database compatibility mode is set to 90.]
SQL Editor utilizzati
https://rextester.com/l/sql_server_online_compiler
http://www.sqlfiddle.com/#!18/28da7/1
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.
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.
guida molto interessante grazie se ci fossero anche le istruzioni per creare la tabella sarebbe completa secondo me
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?
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
Grazie guida molto utile per imparare da 0.
Veramente complimenti, una guida dettagliata, semplice e adatta a tutti 🙂
FortyZone
Davvero complimenti ragazzi. La prima guida che per chi parte da zero è manna dal cielo…PERFETTA!!
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;
un ottimo Manuale unico errore (se vogliamo chiamarlo cosi) i tipi di dati Char(5) number(5,2) cosa sono e come si usano
Complimenti ottimo sito! fatto davvero bene. Grazie!
ma come si crea il database?
È stata spiegato molto bene.