Anteprima
Vedrai una selezione di 4 pagine su 13
Le basi del linguaggio SQL Pag. 1 Le basi del linguaggio SQL Pag. 2
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Le basi del linguaggio SQL Pag. 6
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Le basi del linguaggio SQL Pag. 11
1 su 13
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Utilizzo degli alias nelle query SQL

WHERE Tab1.codice = Tab2.codice; come si può notare, sono stati utilizzati degli "alias" per i nomi della tabella, proprio per indicare quali campi di quali tabelle confrontare. Se, ad esempio, si esegue la stessa query prendendo in considerazione solo i nomi e i cognomi degli studenti e dei genitori, si utilizzerà una SELECT simile:

SELECT Tab1.Nome, Tab1.Cognome, Tab2.Nome, Tab2.Cognome
FROM Genitore AS Tab1, Studenti AS Tab2
WHERE Tab1.codice = Tab2.codice;

Funzioni di aggregazione

Nel comando SELECT possono essere utilizzate opportune funzioni predefinite in grado di agire sui valori contenuti in un insieme di righe di una tabella; tali funzioni vengono chiamate funzioni di aggregazione.

Funzione COUNT

La funzione COUNT conta il numero di righe presenti in una tabella:

SELECT COUNT (*)
FROM Studenti;

oppure:

SELECT COUNT (Nome)
FROM Studenti;

La differenza tra questi due comandi sta nel fatto che, mentre per la prima vengono prese in considerazione tutte le righe, nella seconda vengono considerate solo le righe in cui il campo "Nome" non è nullo.

seconda vengono prese in considerazione tutte le righe in cui il valore di "Nome" è specificato e che quindi non è Null. Anche qui è possibile utilizzare la clausola DISTINCT, in questo modo:

<SELECT COUNT(DISTINCT Nome)
FROM Studenti;>

Funzione SUM

La funzione SUM restituisce il valore della somma di tutti i valori presenti in una colonna. Ad esempio, volendo la somma degli stipendi, si esegue la seguente query:

<SELECT SUM (Stipendio)
FROM Dipendenti;>

se vogliamo la somma dei valori degli stipendi, aumentati del 10%, possiamo eseguire la query:

<SELECT SUM (Stipendio * 1.10) AS Totale
FROM Dipendenti;>

in output avremo un campo di nome "Totale" con la somma degli stipendi, aumentati del 10%. È possibile utilizzare questa funzione anche con la clausola WHERE:

<SELECT SUM (Stipendio * 1.15) AS Totale
FROM Dipendenti
WHERE Stipendio < 1500;>

Funzione AVG

Questa funzione calcola la media dei valori numerici contenuti in una colonna. AVG deriva dall'inglese

Average che significa appunto media. Ad esempio, possiamo calcolare la media degli stipendi dei dipendenti: <SELECT AVG(Stipendio) AS Totale FROM Dipendenti;> funziona in modo analogo a SUM. Funzioni MIN e MAX Queste funzioni restituiscono rispettivamente il valore minimo e il valore massimo tra i valori (che possono essere numerici o alfanumerici) della colonna specificata. Ad esempio, se vogliamo i valori, minimo e massimo, degli stipendi, si scriverà: <SELECT MIN(Stipendio), MAX(Stipendio) FROM Dipendenti;> Ordinamenti e raggruppamenti Per ottenere dei valori ordinati viene utilizzata la clausola ORDER BY. Se ad esempio vogliamo il nome e il cognome degli studenti ordinati alfabeticamente, si esegue la seguente query: <SELECT Cognome, Nome FROM Studenti ORDER BY Cognome ASC, Nome;> Vi sono due tipi di ordinamento: in ascendente (ASC) e in discendente (DESC). Si utilizza la clausola GROUP BY per raggruppare un insieme di righe aventi lo stesso valore nelle colonne indicate. Se, ad esempio, si vuole...

recuperare la somma degli stipendi dei dipendenti per categoria e il numero di dipendenti per categoria, conviene utilizzare la clausola GROUP BY per raggruppare i dipendenti appartenenti alla stessa categoria:

SELECT Categoria, SUM(Stipendio), COUNT(*)
FROM Dipendenti
GROUP BY Categoria;

Una SELECT con funzioni di aggregazione e raggruppamenti può essere ampliata sottoponendo i gruppi al controllo di una o più condizioni. In questi casi può essere utile la clausola HAVING.

Ad esempio, volendo recuperare la somma degli stipendi dei dipendenti per categoria, solo per le categorie aventi più di tre dipendenti:

SELECT Categoria, SUM(Stipendio)
FROM Dipendenti
GROUP BY Categoria
HAVING COUNT(*) > 3;

La clausola HAVING viene sempre utilizzata insieme a GROUP BY, proprio perché rappresenta una condizione, come WHERE, con la differenza che, anziché per le righe, viene utilizzata per funzioni di aggregazione applicate a gruppi di righe.

La ricerca

Con particolari

condizione opposta. LIKE L'operatore LIKE viene utilizzato per cercare un pattern all'interno di una stringa. È possibile utilizzare i caratteri speciali "%" e "_" per rappresentare rispettivamente una sequenza di caratteri arbitraria e un singolo carattere. Ad esempio, per recuperare i nomi dei dipendenti che iniziano con la lettera "A", si può eseguire la query: SELECT Nome FROM Dipendenti WHERE Nome LIKE 'A%'; ORDER BY La clausola ORDER BY viene utilizzata per ordinare i risultati di una query in base a una o più colonne. È possibile specificare l'ordine di ordinamento utilizzando le parole chiave ASC (ascendente) o DESC (discendente). Ad esempio, per ordinare i dipendenti per cognome in ordine alfabetico discendente, si può eseguire la query: SELECT Cognome, Nome FROM Dipendenti ORDER BY Cognome DESC; LIMIT La clausola LIMIT viene utilizzata per limitare il numero di righe restituite da una query. È possibile specificare il numero massimo di righe da restituire utilizzando un valore numerico. Ad esempio, per restituire solo i primi 10 dipendenti, si può eseguire la query: SELECT Cognome, Nome FROM Dipendenti LIMIT 10;

La condizione opposta. L'operatore LIKE confronta il valore di un attributo di tipo carattere (char) con un modello di stringa che può contenere caratteri jolly.

I caratteri jolly sono:

  • _ : (underline), per indicare un singolo carattere in una determinata posizione della stringa;
  • %: (percento), per indicare una sequenza qualsiasi di caratteri in una posizione determinata della stringa.

Ad esempio:

  • con LIKE 'Ni%' vengono ricercate tutte le stringhe che iniziano con 'Ni';
  • con LIKE '%o' vengono ricercate tutte le stringhe che finiscono con 'o';
  • con LIKE '%io%' vengono ricercate tutte le stringhe che contengono 'io';
  • con LIKE 'Nic_' ricerca le stringhe di 4 caratteri che iniziano per 'Nic'.

Un esempio è:

SELECT Cognome, Nome
FROM Dipendenti
WHERE Cognome LIKE 'Nic%';

Questa query ricerca i Cognomi e i Nomi dei dipendenti che iniziano con 'Nic' per cognome.

Anche con LIKE è

possibile utilizzare l'operatore logico NOT, prima di LIKE, per prendere in considerazione la condizione opposta. <p>Il predicato IS NULL controlla se un valore in una colonna è nullo. Ad esempio, volendo recuperare i Cognomi degli studenti il cui nome non è specificato, si scriverà:</p> <pre>SELECT Cognome FROM Studenti WHERE Nome IS NULL;</pre> <p>Anche con IS NULL è possibile utilizzare l'operatore logico NOT, per prendere in considerazione la condizione opposta (IS NOT NULL).</p> <p>Join tra tabelle</p> <p>Nell'SQL l'operazione di "selezione", che permette di ricavare da una tabella un'altra tabella che contiene solo le tuple (le righe) che soddisfano una determinata condizione, si realizza usando la clausola WHERE, mentre l'operazione di "proiezione", che consente di ricavare una tabella che contiene solo alcuni attributi della tabella di partenza, si realizza semplicemente indicando l'elenco degli attributi richiesti.</p> <p>Se la struttura delle tabelle è tale che è possibile stabilire una relazione tra di esse, è possibile utilizzare l'operatore JOIN per combinare i dati di più tabelle in un'unica query. L'operatore JOIN specifica come le tabelle sono collegate tra di loro, utilizzando le chiavi primarie e le chiavi esterne.</p>tabelle è omogenea, è possibile applicare le normali operazioni insiemistiche di unione, intersezione e differenza. Ora si vuole illustrare l'operazione di "congiunzione" (join) di due tabelle in base ad un attributo comune. Consideriamo due tabelle, A e B:
Tabella A Tabella B
id_dipartimento id Nome
1 Architettura Gino
2 Economia Pino
3 Storia Maria
4 Scienze Rosa
5 Filosofia
e immaginiamo che siano 2 insiemi. Intersecando i due insiemi otterremo una zona condivisa e due aree separate. I diversi tipi di Join si occupano di selezionare queste aree estrapolando diversi gruppi di risultati. INNER JOIN In base all'esistenza o meno della condizione (clausola WHERE), l'Inner Join restituisce solo i record verificati esistenti in entrambe le tabelle: tutte quelle righe che non hanno corrispondenza verranno escluse. Per fare un esempio pensiamo ad una query di questo tipo: SELECT * FROM TabellaA INNER JOIN TabellaB ON TabellaA.id_dipartimento = tabellaB.id;risultato è:
id dipartimento nome id_dipartimento
1 Architettura Gino
2 Economia Pino
3 Storia Maria
4 Filosofia Rosa

Il dipartimento di Scienze, non avendo iscritti, non è stato considerato. Nel caso dei due insiemi, viene presa in considerazione solo la parte che si sovrappone.

OUTER JOIN

L'Outer Join restituisce tutti i record che non corrispondono alle chiavi di ricerca. È il contrario della Inner Join. Ciò avviene solo in linea teorica, poiché verrebbero estratti solo i risultati non corrispondenti visualizzati con una serie di NULL. In realtà l'Outer Join si utilizza insieme a Left o Right diventando Left Outer Join o Right Outer Join.

Nel caso dei due insiemi viene selezionato tutto ciò che sta al di fuori dall'intersezione.

LEFT OUTER JOIN (RIGHT OUTER JOIN)

Questo tipo di selezione si ottiene mettendo insieme il concetto di Inner Join e Outer Join. Il risultato che si ottiene è la selezione di tutti i record della

TabellaA TabellaB
id_dipartimento id
1 1
2 2
3 3
4 NULL
5 5

TabellaA che hanno corrispondenza con la TabellaB, più i record della TabellaA che non hanno corrispondenza. I record che non trovano corrispondenza vengono impostati a valore NULL. Esiste anche la Right Outer Join ma in genere non si usa e per ottenere lo stesso risultato si cambia l'ordine delle tabelle. A volte è possibile omettere il termine OUTER, quindi rimane semplicemente LEFT JOIN o RIGHT JOIN.

Vediamo un esempio:

SELECT * FROM TabellaA LEFT JOIN TabellaB ON TabellaA.id_dipartimenti = TabellaB.id;

Il risultato è:

id_dipartimento nome id_dipartimento
1 Architettura Gino
2 Economia Pino
3 Storia Maria
4 Scienze NULL
5 Filosofia Rosa

In questo caso anche la riga Scienze è stata inserita, ma, dal momento che non vi sono iscritti, viene inserito NULL nel campi che non hanno corrispondenza.

Subquery

Per introdurre il concetto di Subquery, rivediamo innanzitutto l'utilizzo della specifica IN. La clausola IN controlla se un valore è presente in una

  • In altre parole il predicato IN formulato con: campo IN (a, b, c, ...); è equivalente a campo = a OR campo = b OR campo = c OR ...;
  • I valori della lista potrebbero essere quelli selezionati da uno statement SELECT e cioè potremmo fare una sottoquery per ricavare i dati della lista che ci interessano.
  • Ad esempio potremmo usare:
    SELECT NOME, INDIRIZZO FROM XYZ WHERE NOME IN(SELECT NOME FROM ZYX WHERE CITTA = 'Roma');
  • Il SELECT tra parentesi seleziona tutti i campi NOME della tabella
Dettagli
Publisher
A.A. 2020-2021
13 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Omar2 di informazioni apprese con la frequenza delle lezioni di Conoscenze informatiche e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma Tor Vergata o del prof Scienze matematiche Prof.