SlideShare a Scribd company logo
22/07/04 Ing. Ronchi Sergio 1
SQL : Ricerca di dati univoci
Questa query visualizza solo i dati distinti
SELECT DISTINCT COGNOME,NOME, DATA
FROM ANAGRAFICA;
Questa può essere usata per eliminare i duplicati:
INSERT INTO NewAnagrafica (................)
SELECT DISTINCT ........... FROM ANAGRAFICA;
ovviamente sarebbe stato meglio creare un indice univoco:
CREATE UNIQUE INDEX index_unico ON
ANAGRAFICA (COGNOME,NOME,DATA);
22/07/04 Ing. Ronchi Sergio 2
Query di Selezione
La clausola where estrae solo i record che rispettano la condizione:
SELECT COGNOME, NOME
FROM ANAGRAFICA
WHERE PROVINCIA='MI'
Ovviamente sono possibili tutti i tipi di confronti logici, i vari operatori logici
AND OR NOT e l'uso di funzioni o operatori aritmetici:
SELECT COGNOME, NOME, ALTEZZA
FROM ANAGRAFICA
WHERE PROVINCIA!='MI' AND ALTEZZA>1.70
AND YEAR(DATA)>1980 AND YEAR(DATA)<1990;
22/07/04 Ing. Ronchi Sergio 3
Query di Selezione
Uso di Between...and
SELECT COGNOME, NOME FROM ANAGRAFICA
WHERE DATA BETWEEN '1980-01-01' AND '1990-12-31'
Ordinamento del risultato di una query:
SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA
WHERE PROVINCIA!='MI' ORDER BY COGNOME, NOME;
Ovviamente è possibile invertire l'ordine utilizzando DESC:
SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA
ORDER BY ALTEZZA DESC;
Nell'order by è possibile utilizzare anche gli ALIAS:
SELECT COGNOME, PESO-ALTEZZA*100 SOVRAPPESO
FROM ANAGRAFICA
ORDER BY SOVRAPPESO;
22/07/04 Ing. Ronchi Sergio 4
Query di Raggruppamento
Permettere di ottenere totalizzazioni su tutta la tabella o
su dati congruenti e raggruppati.
Se si vuole calcolare un valore senza raggruppare i dati:
SELECT AVG(ALTEZZA) FROM ANAGRAFICA; MEDIA
Altre funzioni di raggruppamento sono
SUM() somma
COUNT() conteggio
MIN() minimo
MAX() massimo
STDDEV() deviazione standard (anche STD())
è possibile ovviamente utilizzare la clausola WHERE
22/07/04 Ing. Ronchi Sergio 5
Query di Raggruppamento
Se si vuole calcolare un valore per raggruppamenti:
SELECT PROVINCIA, AVG(ALTEZZA)
FROM ANAGRAFICA GROUP BY PROVINCIA;
SELECT PROVINCIA, SESSO, AVG(ALTEZZA)
FROM ANAGRAFICA GROUP BY PROVINCIA,SESSO;
Uso di WHERE – GROUP BY – ORDER BY:
SELECT PROVINCIA, SESSO, AVG(ALTEZZA) MEDIA
FROM ANAGRAFICA WHERE PESO>50
GROUP BY PROVINCIA, SESSO
ORDER BY MEDIA;
da notare l'uso dell'alias nel ORDER BY
SELECT PROVINCIA, SESSO, AVG(ALTEZZA) MEDIA
FROM ANAGRAFICA
GROUP BY PROVINCIA, SESSO
HAVING PROVINCIA!=‘EE’
ORDER BY MEDIA;
22/07/04 Ing. Ronchi Sergio 6
Query con Join tra tabelle
JOIN NATURALE
SELECT COGNOME, ANAGRAFICA.NOME, PROVINCE.NOME
FROM ANAGRAFICA, PROVINCE
WHERE ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA
vengono visualizzati solo i record che hanno il codice (sigla)
corrispondente.
In alternativa si può usare la sintassi:
SELECT COGNOME, ANAGRAFICA.NOME, PROVINCE.NOME
FROM ANAGRAFICA INNER JOIN PROVINCE
ON ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA
22/07/04 Ing. Ronchi Sergio 7
Query con Join tra tabelle
OUTER JOIN
- LEFT JOIN
SELECT COGNOME, PROVINCIA.NOME
FROM ANAGRAFICA LEFT JOIN PROVINCE
ON ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA
mostra tutti i record della tabella di sinistra e solo quelli corrispondenti
della tabella di destra.
- RIGHT JOIN
SELECT COGNOME, PROVINCIA.NOME
FROM ANAGRAFICA RIGHT JOIN PROVINCE
ON ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA
mostra tutti i record della tabella di destra
22/07/04 Ing. Ronchi Sergio 8
Query con Join tra tabelle
AUTO JOIN
in alcuni casi è necessario eseguire una join su campi della stessa tabella:
Ad esempio se volessi trovare tutti coloro che hanno nome e cognome uguali,
ma codici diversi.
SELECT A1.COGNOME, A1.NOME, A1.DATA, A2.DATA
FROM ANAGRAFICA A1 INNER JOIN ANAGRAFICA A2
ON A1.COGNOME=A2.COGNOME AND
A1.NOME=A2.NOME
WHERE A1.CODICE>A2.CODICE;
22/07/04 Ing. Ronchi Sergio 9
Query con Join tra tabelle
AUTO JOIN
Voglio visualizzare cognome e nome di una persona e cognome e nome della madre.
Tutte le persone si trovano nella stessa tabella
SELECT CONCAT(FIGLIO.COGNOME,’, ‘,FIGLIO.NOME) PERSONA,
CONCAT(MADRE.COGNOME,’, ‘, MADRE.NOME) MAMMA
FROM ANAGRAFICA FIGLIO LEFT JOIN ANAGRAFICA MADRE
ON FIGLIO.GENITORE=MADRE.CODICE;
22/07/04 Ing. Ronchi Sergio 10
Query con Join tra tabelle
Tabelle relazionate più volte con la stessa tabella. Ad esempio la relazione tra I Voli
(origine e destinazione) e gli Aeroporti.
SELECT CODVOLO,ORIGINE.NOME, DESTINAZIONE.NOME, DATA
FROM VOLI, AEROPORTI ORIGINE, AEROPORTI DESTINAZIONE
WHERE VOLI.ORIGINE=ORIGINE.CODICE AND
VOLI.DEST=DESTINAZIONE.CODICE;
22/07/04 Ing. Ronchi Sergio 11
Subqueries
Non sono supportate dalla versione 3.23 di MySQL.
Permettono diverse operazioni che altrimenti dovrebbero essere realizzate con
più di una query.
Estrae le persone con altezza superiore alla media
SELECT COGNOME, NOME, ALTEZZA
FROM ANAGRAFICA
WHERE ALTEZZA> (SELECT AVG(ALTEZZA) FROM ANAGRAFICA);
Estrae le persone della lombardia
SELECT COGNOME, NOME, ALTEZZA
FROM ANAGRAFICA WHERE PROVINCIA IN (SELECT SIGLA FROM PROVINCE
WHERE REGIONE='Lombardia');
La stessa fatta con una JOIN
SELECT COGNOME, NOME, ALTEZZA
FROM ANAGRAFICA, PROVINCE WHERE
ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA AND
PROVINCE.REGIONE='Lombardia';
22/07/04 Ing. Ronchi Sergio 12
Subqueries
In alcuni casi sI usano le subqueries anche nel SELECT
Ad esempio se voglio estrarre l'altezza massima
e la persona che ha quell'altezza per ogni provincia
SELECT PROVINCE.NOME, PROVINCE.SIGLA, MAX(ALTEZZA) MASSIMO,
(SELECT NOME FROM ANAGRAFICA
WHERE PROVINCIA=SIGLA AND
ALTEZZA=MASSIMO)
FROM PROVINCE, ANAGRAFICA
WHERE PROVINCIA.SIGLA=ANAGRAFICA.PROVINCIA
GROUP BY PROVINCE.NOME;
22/07/04 Ing. Ronchi Sergio 13
UNION
Permettono di ottenere una vista in cui record provenienti da più
tabelle vengono accodati, purché dello stesso tipo.
SELECT CODICE, NOME FROM LIBRI
UNION
SELECT CODICE, NOME FROM SOFTWARE;

More Related Content

Viewers also liked

Database
DatabaseDatabase
Database
Sergio Ronchi
 
Java lezione 5
Java lezione 5Java lezione 5
Java lezione 5
Sergio Ronchi
 
Java lezione 3
Java lezione 3Java lezione 3
Java lezione 3
Sergio Ronchi
 
55 conservation text
55 conservation text55 conservation text
55 conservation text
Adarsh Khiloji
 
Database Entity
Database EntityDatabase Entity
Database Entity
Sergio Ronchi
 
Oracle PL sql 1
Oracle PL sql 1Oracle PL sql 1
Oracle PL sql 1
Sergio Ronchi
 
Java lezione 6
Java lezione 6Java lezione 6
Java lezione 6
Sergio Ronchi
 
Java lezione 12
Java lezione 12Java lezione 12
Java lezione 12
Sergio Ronchi
 
Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
Sergio Ronchi
 
Java lezione 18
Java lezione 18Java lezione 18
Java lezione 18
Sergio Ronchi
 
Oracle PLSql 4
Oracle PLSql 4Oracle PLSql 4
Oracle PLSql 4
Sergio Ronchi
 
Oracle 1
Oracle 1Oracle 1
Oracle 1
Sergio Ronchi
 
Java lezione 16
Java lezione 16Java lezione 16
Java lezione 16
Sergio Ronchi
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
Sergio Ronchi
 

Viewers also liked (14)

Database
DatabaseDatabase
Database
 
Java lezione 5
Java lezione 5Java lezione 5
Java lezione 5
 
Java lezione 3
Java lezione 3Java lezione 3
Java lezione 3
 
55 conservation text
55 conservation text55 conservation text
55 conservation text
 
Database Entity
Database EntityDatabase Entity
Database Entity
 
Oracle PL sql 1
Oracle PL sql 1Oracle PL sql 1
Oracle PL sql 1
 
Java lezione 6
Java lezione 6Java lezione 6
Java lezione 6
 
Java lezione 12
Java lezione 12Java lezione 12
Java lezione 12
 
Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
 
Java lezione 18
Java lezione 18Java lezione 18
Java lezione 18
 
Oracle PLSql 4
Oracle PLSql 4Oracle PLSql 4
Oracle PLSql 4
 
Oracle 1
Oracle 1Oracle 1
Oracle 1
 
Java lezione 16
Java lezione 16Java lezione 16
Java lezione 16
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 

More from Sergio Ronchi

Java lezione 19
Java lezione 19Java lezione 19
Java lezione 19
Sergio Ronchi
 
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
Sergio Ronchi
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
Sergio Ronchi
 
Java lezione 13
Java lezione 13Java lezione 13
Java lezione 13
Sergio Ronchi
 
Java lezione 11
Java lezione 11Java lezione 11
Java lezione 11
Sergio Ronchi
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
Sergio Ronchi
 
Java lezione 9
Java lezione 9Java lezione 9
Java lezione 9
Sergio Ronchi
 
Java lezione 8
Java lezione 8Java lezione 8
Java lezione 8
Sergio Ronchi
 
Java lezione 2
Java lezione 2Java lezione 2
Java lezione 2
Sergio Ronchi
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
Sergio Ronchi
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
Sergio Ronchi
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Sergio Ronchi
 
Oracle PL sql 3
Oracle PL sql 3Oracle PL sql 3
Oracle PL sql 3
Sergio Ronchi
 
Oracle PL sql 2
Oracle PL sql 2Oracle PL sql 2
Oracle PL sql 2
Sergio Ronchi
 
Oracle 3 (sq lnet)
Oracle 3 (sq lnet)Oracle 3 (sq lnet)
Oracle 3 (sq lnet)
Sergio Ronchi
 
Oracle 2 (sqlplus)
Oracle 2 (sqlplus)Oracle 2 (sqlplus)
Oracle 2 (sqlplus)
Sergio Ronchi
 
Sql 5
Sql 5Sql 5
Sql 4
Sql 4Sql 4

More from Sergio Ronchi (18)

Java lezione 19
Java lezione 19Java lezione 19
Java lezione 19
 
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Java lezione 13
Java lezione 13Java lezione 13
Java lezione 13
 
Java lezione 11
Java lezione 11Java lezione 11
Java lezione 11
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Java lezione 9
Java lezione 9Java lezione 9
Java lezione 9
 
Java lezione 8
Java lezione 8Java lezione 8
Java lezione 8
 
Java lezione 2
Java lezione 2Java lezione 2
Java lezione 2
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Oracle PL sql 3
Oracle PL sql 3Oracle PL sql 3
Oracle PL sql 3
 
Oracle PL sql 2
Oracle PL sql 2Oracle PL sql 2
Oracle PL sql 2
 
Oracle 3 (sq lnet)
Oracle 3 (sq lnet)Oracle 3 (sq lnet)
Oracle 3 (sq lnet)
 
Oracle 2 (sqlplus)
Oracle 2 (sqlplus)Oracle 2 (sqlplus)
Oracle 2 (sqlplus)
 
Sql 5
Sql 5Sql 5
Sql 5
 
Sql 4
Sql 4Sql 4
Sql 4
 

MySQL Database

  • 1. 22/07/04 Ing. Ronchi Sergio 1 SQL : Ricerca di dati univoci Questa query visualizza solo i dati distinti SELECT DISTINCT COGNOME,NOME, DATA FROM ANAGRAFICA; Questa può essere usata per eliminare i duplicati: INSERT INTO NewAnagrafica (................) SELECT DISTINCT ........... FROM ANAGRAFICA; ovviamente sarebbe stato meglio creare un indice univoco: CREATE UNIQUE INDEX index_unico ON ANAGRAFICA (COGNOME,NOME,DATA);
  • 2. 22/07/04 Ing. Ronchi Sergio 2 Query di Selezione La clausola where estrae solo i record che rispettano la condizione: SELECT COGNOME, NOME FROM ANAGRAFICA WHERE PROVINCIA='MI' Ovviamente sono possibili tutti i tipi di confronti logici, i vari operatori logici AND OR NOT e l'uso di funzioni o operatori aritmetici: SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA WHERE PROVINCIA!='MI' AND ALTEZZA>1.70 AND YEAR(DATA)>1980 AND YEAR(DATA)<1990;
  • 3. 22/07/04 Ing. Ronchi Sergio 3 Query di Selezione Uso di Between...and SELECT COGNOME, NOME FROM ANAGRAFICA WHERE DATA BETWEEN '1980-01-01' AND '1990-12-31' Ordinamento del risultato di una query: SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA WHERE PROVINCIA!='MI' ORDER BY COGNOME, NOME; Ovviamente è possibile invertire l'ordine utilizzando DESC: SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA ORDER BY ALTEZZA DESC; Nell'order by è possibile utilizzare anche gli ALIAS: SELECT COGNOME, PESO-ALTEZZA*100 SOVRAPPESO FROM ANAGRAFICA ORDER BY SOVRAPPESO;
  • 4. 22/07/04 Ing. Ronchi Sergio 4 Query di Raggruppamento Permettere di ottenere totalizzazioni su tutta la tabella o su dati congruenti e raggruppati. Se si vuole calcolare un valore senza raggruppare i dati: SELECT AVG(ALTEZZA) FROM ANAGRAFICA; MEDIA Altre funzioni di raggruppamento sono SUM() somma COUNT() conteggio MIN() minimo MAX() massimo STDDEV() deviazione standard (anche STD()) è possibile ovviamente utilizzare la clausola WHERE
  • 5. 22/07/04 Ing. Ronchi Sergio 5 Query di Raggruppamento Se si vuole calcolare un valore per raggruppamenti: SELECT PROVINCIA, AVG(ALTEZZA) FROM ANAGRAFICA GROUP BY PROVINCIA; SELECT PROVINCIA, SESSO, AVG(ALTEZZA) FROM ANAGRAFICA GROUP BY PROVINCIA,SESSO; Uso di WHERE – GROUP BY – ORDER BY: SELECT PROVINCIA, SESSO, AVG(ALTEZZA) MEDIA FROM ANAGRAFICA WHERE PESO>50 GROUP BY PROVINCIA, SESSO ORDER BY MEDIA; da notare l'uso dell'alias nel ORDER BY SELECT PROVINCIA, SESSO, AVG(ALTEZZA) MEDIA FROM ANAGRAFICA GROUP BY PROVINCIA, SESSO HAVING PROVINCIA!=‘EE’ ORDER BY MEDIA;
  • 6. 22/07/04 Ing. Ronchi Sergio 6 Query con Join tra tabelle JOIN NATURALE SELECT COGNOME, ANAGRAFICA.NOME, PROVINCE.NOME FROM ANAGRAFICA, PROVINCE WHERE ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA vengono visualizzati solo i record che hanno il codice (sigla) corrispondente. In alternativa si può usare la sintassi: SELECT COGNOME, ANAGRAFICA.NOME, PROVINCE.NOME FROM ANAGRAFICA INNER JOIN PROVINCE ON ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA
  • 7. 22/07/04 Ing. Ronchi Sergio 7 Query con Join tra tabelle OUTER JOIN - LEFT JOIN SELECT COGNOME, PROVINCIA.NOME FROM ANAGRAFICA LEFT JOIN PROVINCE ON ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA mostra tutti i record della tabella di sinistra e solo quelli corrispondenti della tabella di destra. - RIGHT JOIN SELECT COGNOME, PROVINCIA.NOME FROM ANAGRAFICA RIGHT JOIN PROVINCE ON ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA mostra tutti i record della tabella di destra
  • 8. 22/07/04 Ing. Ronchi Sergio 8 Query con Join tra tabelle AUTO JOIN in alcuni casi è necessario eseguire una join su campi della stessa tabella: Ad esempio se volessi trovare tutti coloro che hanno nome e cognome uguali, ma codici diversi. SELECT A1.COGNOME, A1.NOME, A1.DATA, A2.DATA FROM ANAGRAFICA A1 INNER JOIN ANAGRAFICA A2 ON A1.COGNOME=A2.COGNOME AND A1.NOME=A2.NOME WHERE A1.CODICE>A2.CODICE;
  • 9. 22/07/04 Ing. Ronchi Sergio 9 Query con Join tra tabelle AUTO JOIN Voglio visualizzare cognome e nome di una persona e cognome e nome della madre. Tutte le persone si trovano nella stessa tabella SELECT CONCAT(FIGLIO.COGNOME,’, ‘,FIGLIO.NOME) PERSONA, CONCAT(MADRE.COGNOME,’, ‘, MADRE.NOME) MAMMA FROM ANAGRAFICA FIGLIO LEFT JOIN ANAGRAFICA MADRE ON FIGLIO.GENITORE=MADRE.CODICE;
  • 10. 22/07/04 Ing. Ronchi Sergio 10 Query con Join tra tabelle Tabelle relazionate più volte con la stessa tabella. Ad esempio la relazione tra I Voli (origine e destinazione) e gli Aeroporti. SELECT CODVOLO,ORIGINE.NOME, DESTINAZIONE.NOME, DATA FROM VOLI, AEROPORTI ORIGINE, AEROPORTI DESTINAZIONE WHERE VOLI.ORIGINE=ORIGINE.CODICE AND VOLI.DEST=DESTINAZIONE.CODICE;
  • 11. 22/07/04 Ing. Ronchi Sergio 11 Subqueries Non sono supportate dalla versione 3.23 di MySQL. Permettono diverse operazioni che altrimenti dovrebbero essere realizzate con più di una query. Estrae le persone con altezza superiore alla media SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA WHERE ALTEZZA> (SELECT AVG(ALTEZZA) FROM ANAGRAFICA); Estrae le persone della lombardia SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA WHERE PROVINCIA IN (SELECT SIGLA FROM PROVINCE WHERE REGIONE='Lombardia'); La stessa fatta con una JOIN SELECT COGNOME, NOME, ALTEZZA FROM ANAGRAFICA, PROVINCE WHERE ANAGRAFICA.PROVINCIA=PROVINCE.SIGLA AND PROVINCE.REGIONE='Lombardia';
  • 12. 22/07/04 Ing. Ronchi Sergio 12 Subqueries In alcuni casi sI usano le subqueries anche nel SELECT Ad esempio se voglio estrarre l'altezza massima e la persona che ha quell'altezza per ogni provincia SELECT PROVINCE.NOME, PROVINCE.SIGLA, MAX(ALTEZZA) MASSIMO, (SELECT NOME FROM ANAGRAFICA WHERE PROVINCIA=SIGLA AND ALTEZZA=MASSIMO) FROM PROVINCE, ANAGRAFICA WHERE PROVINCIA.SIGLA=ANAGRAFICA.PROVINCIA GROUP BY PROVINCE.NOME;
  • 13. 22/07/04 Ing. Ronchi Sergio 13 UNION Permettono di ottenere una vista in cui record provenienti da più tabelle vengono accodati, purché dello stesso tipo. SELECT CODICE, NOME FROM LIBRI UNION SELECT CODICE, NOME FROM SOFTWARE;