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 condizioniIl 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.dipartimentoAll & 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