Title: SELECT
1SELECT
SELECT ltpredicatogt ltlista-selectgt FROM
ltlista-fromgt WHERE ltcondizionegt ORDER BY
ltlista-ordergt ASCDESC GROUP BY...
ltelenco-campigtHAVING...
2ltpredicatogt
ALL SELECT FROM tabClienti ORDER BY Cognome SELECT ALL FROM tabClienti ORDER BY Cognome
DISTINCT SELECT DISTINCT IDCliente FROM tabOrdini Se si omette DISTINCT, la query restituirà tutti i recod con anche gli id duplicati. SELECT DISTINCT tabOrdini.IDCliente, Nome FROM tabClienti INNER JOIN tabOrdini ON tabClienti.IDCliente tabOrdini.IDCliente
3ltpredicatogt
DISTINCTROW SELECT DISTINCTROW NomeFROM tabClienti INNER JOIN tabOrdiniON tabClienti.IDCliente tabOrdini.IDClienteORDER BY Nome
TOP n PERCENT SELECT TOP 3 FROM tabClientiORDER BY Nome DESC SELECT TOP 50 PERCENT Nome FROM tabClienti ORDER BY Nome ASC
4ltlista-selectgt
Selezionare per tutti i clienti il nome e il
cognome
SELECT Nome, Cognome FROM tabClienti
Seleziona IDCliente, IDOrdine e codice
dellordine Moltiplicato per 10.
SELECT IDOrdine, IDCliente, CodiceOrdine10 AS CodiceNormalizzato FROM tabOrdini La clausola AS permette di assegnare un nome ad un campo calcolato, che altrimenti sarebbe etichettato con un nome generico.
5ltlista-selectgt
Funzioni aggregate (COUNT, AVG, SUM, MIN, MAX )
conta il numero di righe (COUNT) ALL
trascura i null (COUNT, AVG, SUM) DISTINCT
trascura i null ed elimina i duplicati (COUNT,
AVG, SUM)
Conta quanti sono i clienti, quanti di essi
hanno o non hanno specificato il CAP
SELECT COUNT(CAP) AS Clienti con CAP, COUNT() AS Clienti, COUNT() - COUNT(CAP) AS Clienti senza CAP FROM tabClienti
6Funzioni aggregate
Calcola la media, la somma, il numero, il minimo
e il massimo di tutti i codice ordine.
SELECT AVG(CodiceOrdine) AS Media, SUM(CodiceOrdine) AS Somma, COUNT(CodiceOrdine) AS ContaOrdini, SUM(CodiceOrdine) /COUNT(CodiceOrdine) AS MediaCalcolata, MIN(CodiceOrdine) AS Minimo, MAX(CodiceOrdine) AS Massimo FROM tabClienti INNER JOIN tabOrdini ON tabOrdini.IDClientetabClienti.IDCliente
7ltlista-fromgt
Loperazione di join viene usata per recuperare
dati da due tabelle correlate per mezzo di un
campo comune. L'espressione può essere un singolo
nome di tabella, un nome di query salvato o un
nome composto risultante da un INNER JOIN, un
LEFT JOIN o un RIGHT JOIN. La proposizione FROM è
necessaria in tutte le istruzioni SELECT che la
precedono.
Selezionare tutti gli ordini di ogni cliente,
specificando per il cliente, nome e cognome, per
gli ordini codice, stato, data ordine e consegna.
SELECT tabClienti.Nome, tabClienti.Cognome, tabOrdini.CodiceOrdine, tabOrdini.Stato, tabOrdini.DataOrdine, tabOrdini.DataConsegna FROM tabClienti INNER JOIN tabOrdini ON tabClienti.IDCliente tabOrdini.IDCliente
8ltlista-fromgt
La sintassi del JOIN è la seguente FROM tab1
INNER LEFT RIGHT JOIN tab2 ON tab1.campo1
ltconfrontogt tab2.campo2 Le operazioni di JOIN
sono composte delle parti descritte di
seguito. Parte Descrizione tab1, tab2
Nomi delle tabelle dalle quali vengono combinati
i record. campo1, campo2 Nomi dei campi tra i
quali viene creato il join.
I campi devono essere dello stesso tipo
di dati e devono
contenere dati della stessa natura, ma non è
necessario che
abbiano lo stesso nome. ltconfrontogt Operatori
di confronto relazionali
"", "lt", "gt", "lt", "gt" o
"ltgt". Utilizzare un'operazione LEFT JOIN per
creare un join esterno sinistro. Il join esterno
sinistro include tutti i record della prima
tabella (di sinistra), anche se non ci sono
valori corrispondenti ai record nella seconda
tabella (di destra). Utilizzare un'operazione
RIGHT JOIN per creare un join esterno destro. Il
join esterno destro include tutti i record della
seconda tabella (di destra), anche se non ci sono
valori corrispondenti ai record della prima
tabella (di sinistra).
9ltlista-fromgt
Troviamo tutti gli ordini, che hanno almeno un
articolo associato, con la relativa descrizione
e il prezzo
SELECT tabArticolo.Descrizione, tabOrdini.CodiceOrdine, tabOrdini.IDOrdine, tabComposizioneOrdine.Prezzo FROM tabOrdini INNER JOIN (tabArticolo INNER JOIN tabComposizioneOrdine ON tabArticolo.IDArticolo tabComposizioneOrdine.IDArticolo) ON tabOrdini.IDOrdine tabComposizioneOrdine.IDOrdine
10ltcondizionegt
STRINGHE selezionare tutti i clienti con un
certo nome, predefinito o da immettere al
momento
SELECT Nome, Cognome FROM tabClienti WHERE Nome Alessandra OR Nome Marco SELECT Nome, Cognome FROM tabClienti WHERE Nome Immettere il nome del cliente da selezionare
11ltcondizionegt
STRINGHE seleziona tutti i clienti il cui nome
comincia con una certa iniziale
SELECT Nome, Cognome FROM tabClienti WHERE Nome LIKE A ATTENZIONE questo predicato può essere usato solo con le stringhe!! I campi nella select devono essere messi tra parentesi quadre se contengono spazi o altri simboli. ES Codice Ordine
12ltcondizionegt
NUMERI Seleziona tutti I clienti che hanno
IDCliente maggiore di 4.
SELECT tabClienti.Nome, tabClienti.Cognome, tabClienti.CAP FROM tabClienti WHERE IDClientegt4
Seleziona tutti i clienti con IDCliente compreso
tra 1 e 5
SELECT tabClienti.Nome, tabClienti.Cognome FROM tabClienti WHERE IDCliente BETWEEN 1 AND 5
Seleziona tutti i clienti con IDCliente uguale
tra 2, 3 o 5
SELECT tabClienti.Nome, tabClienti.Cognome FROM tabClienti WHERE IDCliente IN (2,3,5)
13ltcondizionegt
DATE trovare i record in cui la data
dellordine è 27 novembre 2002
SELECT tabClienti.Nome, tabClienti.Cognome, tabOrdini.DataOrdine FROM tabClienti LEFT JOIN tabOrdini ON tabClienti.IDCliente tabOrdini.IDCliente WHERE tabOrdini.DataOrdine11/27/2002
14ltcondizionegt
È possibile anche utilizzare la funzione DateValue che permette di considerare le impostazioni internazionali stabilite da Microsoft Windows. Per gli Stati Uniti, ad esempio, utilizzare il seguente codice SELECT FROM Ordini WHERE DataSpedizione DateValue('5/10/96') Per l'Italia, utilizzare il seguente codice SELECT FROM Ordini WHERE DataSpedizione DateValue('10/5/96')
15ORDER BY
Ordina i record risultanti da una query in base a uno o più campi specificati in ordine crescente o decrescente. La proposizione ORDER BY è opzionale. Serve per visualizzare i dati in base ad un criterio di ordinamento. Il criterio di ordinamento predefinito è crescente, vale a dire da A a Z e da 0 a 9. Per effettuare un ordinamento decrescente, vale a dire da Z a A e da 9 a 0, aggiungere la parola riservata DESC alla fine di ogni campo che si desidera venga posto in ordine decrescente. SELECT Cognome, Nome FROM tabClienti ORDER BY Nome DESC, Cognome Nella proposizione ORDER BY è possibile includere più campi. I record vengono ordinati innanzitutto in base al primo campo elencato dopo ORDER BY. I record con valori uguali in quel campo vengono quindi ordinati in base al valore del secondo campo elencato e così via.
16GROUP BY
Consente di formare gruppi di record che hanno il medesimo valore degli attributi specificati, cioè combina in un record singolo tutti i record con valori identici presenti nell'elenco di campi specificato.
Contare i nomi uguali che cominciano con la
lettera A
SELECT COUNT() AS Numero nomi uguali
,Nome FROM tabClienti WHERE Nome LIKE "A" GROUP
BY Nome
17HAVING
La clausola having l'equivalente di where per gruppi di record. Ogni gruppo costruito dalla group by fa parte del risultato solo se soddisfa la clausola specificata in having.
Contare i nomi uguali e mostrare il risultato
solo se sono almeno 2
SELECT COUNT() AS Numero nomi uguali
,Nome FROM tabClienti GROUP BY Nome HAVING
COUNT()gt2
18UNION
Crea una query di unione che combina i risultati di due o più tabelle o query indipendenti. TABLE query1 UNION ALL TABLE Osservazioni È possibile unire i risultati di due o più query, tabelle e istruzioni SELECT in una combinazione qualsiasi in un'unica operazione UNION. SELECT IDCliente, Cognome, 'Cliente' AS Tipo FROM tabClienti UNION ALL SELECT IDCliente, CodiceOrdine, 'Ordine' AS Tipo FROM tabOrdini In base all'impostazione predefinita, quando si utilizza l'operazione UNION non vengono restituiti record duplicati tuttavia, è possibile includere il predicato ALL per assicurare che vengano restituiti tutti i record. Tutte le query in un'operazione UNION devono richiedere lo stesso numero di campi questi tuttavia, non devono essere delle stesse dimensioni o dello stesso tipo di dati.