Query SQL
Indice
Capitolo 1
Introduzione alle query
Prime elementari regole
La sintassi del linguaggio SQL è abbastanza flessibile, sebbene ci siano delle regole da rispettare come in qualsiasi linguaggio di programmazione.
SELECT COGNOME, NOME
FROM PRESIDENTE
WHERE COGNOME = ‘Pertini’
In questo esempio tutti i caratteri, a parte ‘Pertini’, sono scritti in maiuscolo, ma non deve essere necessariamente così. Avremmo potuto anche scrivere così:
select cognome, nome
from presidente
where cognome = ‘Pertini’
si noti però che ‘Pertini’ è scritto sempre nello stesso modo, infatti i riferimenti ai contenuti di un database devono essere scritti con lo stesso tipo di caratteri in cui sono stati registrati.
Le parole chiave che abbiamo usato nella query sono:
- SELECT
- FROM
- WHERE
‘cognome’ e ‘nome’ sono dei campi e ‘presidente’ è una tabella. Quindi il comando recita: seleziona visualizzandoli, i campi cognome e nome della tabella presidente la dove cognome = ‘Pertini’.
Esempio:
ASSEGNI | |||
Assegno | Beneficiari | Importo | Note |
1 | Computer Shop | 500.000 | Stampante |
2 | Assicurazioni ASSO | 954.000 | Assicurazioni automobili |
3 | SNAM | 650.000 | Riscaldamento casa |
4 | Supermarket GS | 490.000 | Alimentari |
5 | Scuola | 490.000 | Scuola di musica |
con l’espressione:
select * from assegni;
si ottiene:
Assegno | Beneficiari | Importo | Note |
1 | Computer Shop | 500.000 | Stampante |
2 | Assicurazioni ASSO | 954.000 | Assicurazioni automobili |
3 | SNAM | 650.000 | Riscaldamento casa |
4 | Supermarket GS | 490.000 | Alimentari |
5 | Scuola | 490.000 | Scuola di musica |
L’asterisco (*) di select * indica al database di fornire tutte le colonne associate alla tabella specificata dalla clausola FROM.
Come termina una istruzione SQL:
In alcune implementazioni si usa il punto e virgola (;) in altre il punto e virgola o lo slash (/).
Selezionare le colonne o cambiare l’ordine di apparizione
Esempi:
con l’espressione:
select importo, assegno from assegni;
dalla tabella precedente si ottiene:
Importo | Assegno |
500.000 | 1 |
954.000 | 2 |
650.000 | 3 |
490.000 | 4 |
490.000 | 5 |
Clausola DISTINCT (query senza duplicati)
Esaminando il contenuto del campo Importo della tabella ASSEGNI, si potrà notare che il valore 490.000 appare due volte. Possiamo visualizzare tale colonna facendo comparire i valori ripetuti una sola volta:
select distinct Importo from ASSEGNI;
Importo |
500.000 |
954.000 |
650.000 |
490.000 |
Altro esempio:
DOCENTI | ||
Nome | Cognome | Materia |
Lara | Bianco | Italiano |
Lara | Bianco | Storia |
Mario | Guidi | Diritto |
Mario | Guidi | Economia |
Anna | Rossi | Matematica |
Con l’espressione:
SELECT DISTINCT NOME, COGNOME
FROM DOCENTI;
si ottiene:
Nome | Cognome |
Lara | Bianco |
Mario | Guidi |
Anna | Rossi |
ESERCIZI (capitolo 1)
- Le seguenti query non funzionano. Perché?
- Select * from persone
- Select *
- Select nome cognome FROM persone;
- Le seguenti istruzioni forniscono lo stesso risultato?SELECT * FROM PERSONE;select * from persone;
- Quale delle seguenti istruzioni SQL è corretta?
- select * from persone;
- select * from persone/
- select *from persone;
- Utilizzando la tabella sottostante scrivere una query per selezionare soltanto il contenuto delle colonne ETA e NOME.
ANAGRAFICA NOME COGNOME ETA Giovanni Bruni 62 Antonio Rossi 43 Mario Rossi 49 Piero Bianchi 37 Esmeralda Gnocca 31 - Dalla tabella sottostante estrapolare, senza ripetizioni, le squadre di calcio presenti.
TIFOSERIA NOME COGNOME SQUADRA_APPARTENENZA ARTURO ROSSI LAZIO GIOVANNI ROSSI LAZIO MARIO ROSSI LAZIO MARIA MARCHETTI NAPOLI MARIA MARCHETTI ROMA - La seguente query è giusta? e se sbagliata, perché?SELECT NOME, DISTINCT SQUADRA_APPARTENENZAFROM TIFOSERIA;
- La seguente query è giusta? e se sbagliata, perché?SELECT DISTINCT COGNOME, NOMEFROM TIFOSERIA;
- La seguente query è giusta? e se sbagliata, perché?SELECT DISTINCT *FROM TIFOSERIA;
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.