SELECT
Struttura comando
SELECT [DINSTINCT] lista_attributi
FROM lista_tabelle
WHERE condizioni
ORDER BY condizioni_ordinamento;
Tabella Dipendente
codD | cognome | dipartimento | stipendio |
---|---|---|---|
d1 | Rossi | Marketing | 100 |
d2 | Rossi | Amministrazione | 60 |
d3 | Neri | Produzione | 80 |
d4 | Verdi | Produzione | 120 |
d5 | Gialli | Marketing | 90 |
Singolo attributo
SELECT cognome FROM Dipendente;
cognome |
---|
Rossi |
Rossi |
Neri |
Verdi |
Gialli |
Attributi multipli
SELECT cognome, codD codice FROM Dipendente
cognome | codice |
---|---|
Rossi | d1 |
Rossi | d2 |
Neri | d3 |
Verdi | d4 |
Gialli | d5 |
Clausola WHERE
SELECT cognome, dipartimento
FROM Dipendente
WHERE dipartimento='Marketing' OR dipartimento='Produzione'
SELECT stipendio/12
FROM Dipendente
WHERE codD='d3';
stipendio/12 |
---|
6,67 |
Possiamo rinominarlo
SELECT stipendio/12 stipendio_mensile
FROM Dipendente
WHERE codD='d3';
stipendio_mensile |
---|
6,67 |
Clausola ORDER BY
SELECT cognome, dipartimento
FROM Dipendente
ORDER BY cognome;
cognome | dipartimento |
---|---|
Gialli | Marketing |
Neri | Produzione |
Rossi | Marketing |
Rossi | Amministrazione |
Verdi | Produzione |
Posso usare ASC
e DESC
per scegliere il tipo di ordinamento: ORDER BY cognome DESC
Clausola DISTINCT
SELECT DISTINCT cognome
FROM Dipendente;
Prenderà tutti i cognomi in modo univoco
Clausola LIKE
SELECT *
FROM Dipendente
WHERE cognome LIKE 'R%i';
Prende tutti i dipendenti con cognome che inizia per R
e finisce per i
(case sensitive).
SELECT *
FROM Dipendente
WHERE cognome LIKE 'R___i';
Prende tutti i dipendenti con cognome che inizia per R
e finisce per i
con 3 caratteri nel mezzo, indicati dal numero di underscore _
.
Operatori di aggregazione
SUM
AVG
MAX
MIN
COUNT
Tabelle multiple
Tabella Dipartimento
nome | sede | budget |
---|---|---|
Marketing | Milano | 1000 |
Amministrazione | Padova | 800 |
Produzione | Legnago | 600 |
Join tra tabelle
SELECT *
FROM Dipendente, Dipartimento
WHERE Dipendente.dipartimento=Dipartimento.nome;
d1 | Rossi | Marketing | 100 | Marketing | Milano | 1000 |
d2 | Rossi | Amministrazione | 60 | Amministrazione | Padova | 800 |
etc... |
Per un singolo valore
SELECT Dipartimento.sede
FROM Dipendente, Dipartimento
WHERE Dipendente.dipartimento=Dipartimento.nome;
Rinominando
SELECT d2.sede
FROM Dipendente d1, Dipartimento d2
WHERE d1.dipartimento=d2.nome;
Per tutti i valori di una tabella
SELECT d2.*
FROM Dipendente d1, Dipartimento d2
WHERE d1.dipartimento=d2.nome;
Il .
non è necessario se l’attributo a cui bisogna fare riferimento compare in una sola tabella
Join avanzato
SELECT attributi FROM tabella1 as alias tipo-join join tabella2 as alias on condizioni
Il tipo-join può essere:
- Interno
- inner join (default) → mette insieme le righe che hanno dati comuni tra le due tabelle
- Esterno
- right outer → outer è opzionale, aggiunge le righe della tabella di destra non coinvolte nell’inner join
- left outer → come right outer ma aggiunge la tabella di sinistra invece che quella di destra
- full outer → come right outer ma aggiunge sia le righe della tabella di sinistra che quelle della tabella di destra
Esempio:
SELECT *
FROM Dipartimento d INNER JOIN Dipendente di ON d.nome=d.dipartimento
All & Any
SELECT *
FROM [tabella]
WHERE attributo = [ANY or IN] [SELECT SQL]
Interrogazioni insiemistiche
Riprendono i concette dell’algebra relazionale. Gli operatori utilizzati sono:
- Union → tutti gli elementi (quelli in comune presi solo una volta a meno che non sia incluso
ALL
)
- Except → Tutti elementi prima select tranne quelli in comune con la seconda
- Intersect → solo elementi in comune presi una sola volta
[SELECT SQL] UNION | EXCEPT | INTERSECT (ALL) [SELECT SQL]
ALL
è opzionale ed include i ripetuti degli elementi in comune