Clausole SQL - Esercizi capitolo 4
Indice
Capitolo 4
ESERCIZI
1) È corretta questa query? se giusta o sbagliata, spiegare il perché.
SELECT COGNOME, AVG(STIPENDIO), REPARTO
FROM DIPENDENTI
WHERE REPARTO = ‘VENDITE’
ORDER BY COGNOME
GROUP BY REPARTO;
2) Si può applicare la clausola ORDER BY a una colonna che non appare fra quelle citate nell’istruzione
SELECT ?
3) Quando usiamo la clausola HAVING, dobbiamo necessariamente utilizzare anche la clausola GROUP BY ?
4) Si può applicare l’istruzione SELECT a una colonna che non appare fra quelle citate nella clausola GROUP BY ?
5) Scrivere una query che ci permetta di estrapolare da una tabella contenente dati su libri, quei generi in cui non sono presenti libri con prezzo inferiore o uguale a £10.000.
Quanto detto, significa in parole più semplici, che dobbiamo visualizzare quei generi dove non ci sono libri il cui costo sia uguale o inferiore a £ 10.000. Se ad esempio il libro Le Crociate che appartiene al genere di Storia costa £ 9.500, non dovrà apparire nella select il genere Storia.
LIBRI (TITOLO, AUTORE, GENERE, PREZZO, EDITORE)
6) Se applicassimo la seguente select
SELECT DIVISIONE
FROM DIPENDENTI
GROUP BY DIVISIIONE
HAVING MAX(STIPENDIO) < 4 800 000 ;
alla tabella DIPENDENTI, indicare quali sarebbero le divisioni estrapolate.
DIPENDENTI | ||||
NOME | DIVISIONE | STIPENDIO | GIORNI_MUTUA | FERIE_GODUTE |
ROSSI | VENDITE | 2 000 000 | 33 | 5 |
BIANCHI | VENDITE | 2 100 000 | 1 | 0 |
BRUNI | RICERCA | 3 300 000 | 0 | 9 |
VERDI | ACQUISTI | 1 800 000 | 32 | 20 |
GIALLI | RICERCA | 4 800 000 | 0 | 0 |
NERI | RICERCA | 3 400 000 | 2 | 1 |
MANCINI | AMMINISTRAZIONE | 2 400 000 | 9 | 24 |
MARCHETTI | VENDITE | 2 000 000 | 99 | 12 |
7) Scrivere una select che ci permetta di estrapolare, dalla tabella DIPENDENTI, le divisioni in cui non
compaiono lavoratori che non hanno goduto di giorni di ferie. Ovvero, bisogna visualizzare solo quelle
divisioni dove non c’è neanche un dipendente con zero giorni di ferie.
8) Scrivere una query che, dalla tabella ASSEGNI, ci permette di estrapolare i beneficiari che gli è stato
versato perlomeno un assegno di cifra superiore alle 400 000.
ASSEGNI | |||
ASSEGNO | BENEFICIARIO | IMPORTO | NOTE |
1 | COMPUTER SHOP | 50 000 | DISCHETTI E CD-ROM |
2 | LIBRERIE CULTURA | 245 000 | LIBRI, CANCELLERIA |
3 | COMPUTER SHOP | 200 000 | TELEFONO CELLULARE |
4 | BIOGAS SRL | 88 000 | GAS |
5 | SUPERMARCHET GS | 150 000 | ALIMENTARI |
16 | ASSICURAZIONI ASSO | 425 000 | ASSICURAZIONE CASA |
17 | GAS S.P.A. | 25 000 | GAS |
21 | COMPUTER SHOP | 34 000 | CONTROLLER |
20 | ABITI BELLA | 110 000 | PANTALONI |
9 | ABITI BELLA | 224 000 | COMPLETO DONNA |
8 | COMPUTER SHOP | 134 000 | JOYSTICK |
9) Scrivere una query che, dalla tabella ASSEGNI, ci permette di estrapolare i beneficiari la cui media degli importi degli assegni versati sia superiore alle 300 000. La lista dei beneficiari deve apparire ordinata in modo discendente.
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.