Utilizzare una select per estrarre solo alcune colonne o righe specifiche è limitante rispetto alle suo enormi possibilità.
In particolare spesso si richiede ad esempio il nome delle persone nate in un certo anno, solo le persone con un il nome iniziante con la lettera a oppure ci si ricorda solo alcune lettere di un prodotto o di un cognome e si vogliono estrarre solo quelle che rientrano in opportuni criteri.
Se si ha, ad esempio, un elenco di prodotto con un certo prezzo, si vuole estrarre solo quelli all’interno di un certo range di valori.
Alcune regole pratiche:
- non tutti i programmi di gestione database accettano i comandi elencati purtroppo.
Faccio un esempio, per estrarre tutte i record aventi come colonna una data e solo quelli che hanno la data attuale si usa current_date.
Ancora in libre office il cancellato non viene considerato e bisogna usare le parentesi graffe; il cancelletto vale solo nella schermata tramite lo schema e non tramite sql nativo!
La seguente tabella fornisce l’intera pletora delle scelte che possono essere usate all’interno della clausola WHERE del comando SELECT.
CRITERI PER I CAMPI DI TIPO DATA/ORA
Per includere i record che | Utilizzare il criterio | Risultato della query |
---|---|---|
Corrispondono esattamente a un valore, ad esempio 2/2/2006 | #02.02.06# | Restituisce i record di transazioni avvenute il2 febbraio 2006. È necessario racchiudere i valori di tipo Data tracaratteri #in modo che Access sia in grado di distinguerli dai dati di tipo Testo. |
Non corrispondono a un valore, ad esempio 2/2/2006 | NOT #3/3/2006# | Restituisce i record di transazioni avvenute in un giorno diverso dal2 febbraio 2006. |
Contengono valori anteriori a una determinata data, ad esempio 2/2/2006 | <#2/2/2006# | Restituisce i record di transazioni avvenute prima del2 febbraio 2006.Per visualizzare transazioni avvenute prima o nella data specificata, utilizzare l’operatore <= invece di <. |
Contengono valori successivi a una determinata data, ad esempio 2/2/2006 | >#2/2/2006# | Restituisce i record di transazioni avvenute dopo il2 febbraio 2006.Per visualizzare transazioni avvenute dopo o nella data specificata, utilizzare l’operatore >= invece di >. |
Contengono valori compresi in un determinato intervallo di date | >#2/2/2006# AND <#4/2/2006# | Restituisce i record di transazioni avvenute tra il2 febbraio 2006 e il 4 febbraio 2006.È inoltre possibile utilizzare l’operatore Between per filtrare un determinato intervallo di valori, includendo i punti finali. Il criterio Between#2/2/2006# AND #4/2/2006# equivale a>=#2/2/2006# AND<=#4/2/2006#. |
Contengono valori esterni a un determinato intervallo | <#2/2/2006# OR >#4/2/2006# | Restituisce i record di transazioni avvenute prima del2 febbraio 2006o dopo il4 febbraio 2006. |
Contengono uno di due valori, ad esempio 2/2/2006 o 3/2/2006 | #2/2/2006# OR #3/2/2006# | Restituisce i record di transazioni avvenute il2 febbraio 2006o il3 febbraio 2006. |
Contengono uno di molti valori | In (#1/2/2006#, #1/3/2006#, #1/4/2006#) | Restituisce i record di transazioni avvenute in data1 febbraio 2006,1 marzo 2006o1 aprile 2006. |
Contengono una data di un determinato mese indipendentemente dall’anno, ad esempio dicembre | DatePart(“m”, [Data ordine]) = 12 | Restituisce i record di transazioni avvenute nel mese di dicembre di qualsiasi anno. |
Contengono una data di un determinato trimestre, indipendentemente dall’anno, ad esempio il primo trimestre | DatePart(“q”, [Data ordine]) = 1 | Restituisce i record di transazioni avvenute nel primo trimestre di qualsiasi anno. |
Contengono la data corrente | Date() | Restituisce i record di transazioni avvenute nel giorno corrente. Se la data corrente è ad esempio 2/2/2006, verranno visualizzati i record in cui il campo Data ordine è impostato sul2 febbraio 2006. |
Contengono la data del giorno precedente | Date()-1 | Restituisce i record di transazioni avvenute il giorno precedente a quello corrente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi al giorno1 febbraio 2006. |
Contengono la data del giorno successivo | Date() + 1 | Restituisce i record di transazioni che avranno luogo il giorno successivo a quello corrente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi al giorno3 febbraio 2006. |
Contengono le date della settimana corrente | DatePart(“ww”, [Data ordine]) = DatePart(“ww”, Date()) AND Year( [Data ordine]) = Year(Date()) | Restituisce i record di transazioni avvenute nella settimana corrente. La settimana inizia il lunedì e termina la domenica. |
Contengono date della settimana precedente | Year([Data ordine])* 53 + DatePart(“ww”, [Data ordine]) = Year(Date())* 53 + DatePart(“ww”, Date()) – 1 | Restituisce i record di transazioni avvenute nella settimana precedente. La settimana inizia il lunedì e termina la domenica. |
Contengono date della settimana successiva | Year([Data ordine])* 53+DatePart(“ww”, [Data ordine]) = Year(Date())* 53+DatePart(“ww”, Date()) + 1 | Restituisce i record di transazioni che avranno luogo nella settimana successiva. La settimana inizia il lunedì e termina la domenica. |
Contengono una data dei 7 giorni precedenti | Between Date() and Date()-6 | Restituisce record di transazioni avvenute durante i sette giorni precedenti. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati record relativi al periodo compreso tra il24 gennaio 2006e il2 febbraio 20006. |
Contengono una data del mese corrente | Year([Data ordine]) = Year(Now()) And Month([Data ordine]) = Month(Now()) | Restituisce i record relativi al mese corrente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi afebbraio 2006. |
Contengono una data del mese precedente | Year([Data ordine])* 12 + DatePart(“m”, [Data ordine]) = Year(Date())* 12 + DatePart(“m”, Date()) – 1 | Restituisce i record relativi al mese precedente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi agennaio 2006. |
Contengono una data del mese successivo | Year([Data ordine])* 12 + DatePart(“m”, [Data ordine]) = Year(Date())* 12 + DatePart(“m”, Date()) + 1 | Restituisce i record relativi al mese successivo. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi amarzo 2006. |
Contengono una data degli ultimi 30 o 31 giorni | Between Date( ) And DateAdd(“M”, -1, Date( )) | I record relativi agli ordini di un mese. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi al periodo compreso tra il2 gennaio 2006e il2 febbraio 2006. |
Contengono una data del trimestre corrente | Year([Data ordine]) = Year(Now()) And DatePart(“q”, Date()) = DatePart(“q”, Now()) | Restituisce i record relativi al trimestre corrente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi al primo trimestre 2006. |
Contengono una data del trimestre precedente | Year([Data ordine])*4+DatePart(“q”,[Data ordine]) = Year(Date())*4+DatePart(“q”,Date())- 1 | Restituisce i record relativi al trimestre precedente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi all’ultimo trimestre del 2005. |
Contengono una data del trimestre successivo | Year([Data ordine])*4+DatePart(“q”,[Data ordine]) = Year(Date())*4+DatePart(“q”,Date())+1 | Restituisce i record relativi al trimestre successivo. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi al secondo trimestre del 2006. |
Contengono una data dell’anno corrente | Year([Data ordine]) = Year(Date()) | Restituisce i record relativi all’anno corrente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi all’anno 2006. |
Contengono una data dell’anno precedente | Year([Data ordine]) = Year(Date()) – 1 | Restituisce i record di transazioni avvenute durante l’anno precedente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi all’anno 2005. |
Contengono una data dell’anno successivo | Year([Data ordine]) = Year(Date()) + 1 | Restituisce i record di transazioni contrassegnate da date dell’anno successivo. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi all’anno 2007. |
Contengono una data compresa tra il giorno 1 gennaio e quella corrente (record da inizio anno fino alla data corrente) | Year([Data ordine]) = Year(Date()) and Month([Data ordine]) <= Month(Date()) and Day([Data ordine]) <= Day (Date()) | Restituisce i record di transazioni contrassegnate con date comprese tra il giorno 1 gennaio dell’anno corrente e la data corrente. Se ad esempio la data corrente è 2/2/2006, verranno visualizzati i record relativi al periodo compreso tra il giorno1 gennaio 2006e il2/2/2006. |
Contengono una data anteriore a quella corrente | < Date() | Restituisce i record di transazioni avvenute in una data anteriore a quella corrente. |
Contengono una data successiva a quella corrente | > Date() | Restituisce i record di transazioni che avranno luogo in una data successiva a quella corrente. |
Filtro per valori Null (o mancanti) | Is Null | Restituisce i record che non contengono la data della transazione. |
Filtro per valori non Null | Is Not Null | Restituisce i record in cui la data di transazione è nota. |
CRITERIO PER I CAMPI DI TIPO NUMERICO
Per includere i record che | Utilizzare il criterio | Risultato della query |
---|---|---|
Corrispondono esattamente a un valore, ad esempio 100 | 100 | Restituisce i record in cui il prezzo unitario del prodotto è pari a € 100. |
Non corrispondono a un valore, ad esempio 1000 | NOT 1000 | Restituisce i record in cui il prezzo unitario del prodotto non corrisponde a € 1000. |
Contengono un valore minore di un altro valore specificato, ad esempio 100 | < 100 <= 100 |
Restituisce i record in cui il prezzo unitario è minore di € 100 (<100). La seconda espressione (<=100) visualizza i record in cui il prezzo unitario è minore o uguale a € 100. |
Contengono un valore maggiore di un altro valore specificato, ad esempio 99,99 | >99,99 >=99,99 |
Restituisce i record in cui il prezzo unitario è maggiore di € 99,99 (>99,99). La seconda espressione visualizza i record in cui il prezzo unitario è maggiore o uguale a € 99,99. |
Contengono uno di due valori, ad esempio 20 o 25 | 20 OR 25 | Restituisce i record in cui il prezzo unitario corrisponde a € 20 o € 25. |
Contengono un valore compreso in un determinato intervallo | >49,99 AND <99,99 -oppure- Between 50 AND 100 |
Restituisce i record in cui il prezzo unitario è compreso tra € 49,99 e € 99,99 (non inclusi). |
Contengono un valore esterno a un determinato intervallo | <50 OR >100 | Restituisce i record in cui il prezzo unitario non è compreso tra € 50 e € 100. |
Contengono uno dei valori specificati | In(20, 25, 30) | Restituisce i record in cui il prezzo unitario corrisponde a € 20, € 25 o € 30. |
Contengono un valore che termina con le cifre specificate | LIKE “*4,99” | Restituisce i record in cui il prezzo unitario termina con “4,99”, ad esempio € 4,99, € 14,99, € 24,99 e così via. Nota I caratteri * e %, quando vengono utilizzati in un’espressione, rappresentano un numero qualsiasi di caratteri e sono detti anche caratteri jolly. Il carattere % non può essere utilizzato nella stessa espressione che contiene il carattere * e neppure in un’espressione che contiene il carattere jolly ?. È possibile utilizzare il carattere jolly % in un’espressione che contiene anche il carattere jolly _. |
Contengono valori Null (o mancanti) | Is Null | Restituisce i record in cui il campo Prezzo unitario non contiene alcun valore. |
Contengono valori non Null | Is Not Null | Restituisce i record in cui nel campo Prezzo unitario è presente un valore. |
CRITERI PER I CAMPI DI TIPO TESTO
Corrispondono esattamente a un valore, ad esempio Cina | “Cina” | Restituisce i record in cui il campo Paese è impostato su Cina. |
Non corrispondono a un valore, ad esempio Messico | NOT “Messico” | Restituisce i record in cui il campo Paese è impostato su un valore diverso da Messico. |
Iniziano con la stringa specificata, ad esempio I | Like U* | Restituisce i record in cui il campo Paese contiene un nome che inizia con U, ad esempio Ungheria, Ucraina e così via. Nota Quando viene utilizzato in un’espressione, l’asterisco (*) rappresenta una stringa qualsiasi di caratteri. L’asterisco è inoltre detto carattere jolly. |
Non iniziano con la stringa specificata, ad esempio I | Not Like U* | Restituisce i record in cui il campo Paese contiene un nome che inizia con un carattere diverso da “U”. |
Contengono la stringa specificata, ad esempio Corea | LIKE “*Corea*” | Restituisce i record in cui il campo Paese contiene la stringa “Corea”. |
Non contengono la stringa specificata, ad esempio Corea | NOT LIKE “*Corea*” | Restituisce i record in cui il campo Paese non contiene la stringa “Corea”. |
Terminano con la stringa specificata, ad esempio “ina” | LIKE “*ina” | Restituisce i record in cui il campo Paese contiene un nome che termina in “ina”, ad esempio Cina e Argentina. |
Non terminano con la stringa specificata, ad esempio “*ina” | NOT LIKE “*ina” | Restituisce i record in cui il campo Paese contiene un nome che non termina in “ina”, ad esempio Cina e Argentina. |
Contengono valori Null (o mancanti) | Is Null | Restituisce i record che non contengono alcun valore nel campo. |
Non contengono valori Null | Is Not Null | Restituisce i record in cui è presente un valore nel campo. |
Contengono stringhe di lunghezza zero | “” (coppia di virgolette) | Restituisce i record in cui il campo è impostato su un valore vuoto diverso da Null. Ad esempio, i record relativi alle vendite realizzate per un altro reparto potrebbero contenere un valore vuoto nel campo Paese. |
Non contengono stringhe a lunghezza zero | NOT “” | Restituisce i record in cui il campo Paese contiene un valore non vuoto. |
Contengono valori Null o stringhe di lunghezza zero | “” Or Is Null | Restituisce i record in cui il campo non contiene valori o è impostato su un valore vuoto. |
Is not empty or blank | Is Not Null And Not “” | Restituisce i record in cui il campo Paese contiene un valore non vuoto o diverso da Null. |
Seguono un determinato valore, ad esempio Messico, se in ordine alfabetico | >= “Messico” | Restituisce i record di tutti i paesi, a partire da Messico fino alla fine dell’alfabeto. |
Sono compresi in un intervallo specifico, ad esempio tra A e D | LIKE “[A-D]*” | Restituisce i record contenenti i paesi i cui nomi iniziano con le lettere comprese tra “A” e “D”. |
Corrispondono a uno di due valori, ad esempio Italia o Irlanda | “Italia” OR “Irlanda” | Restituisce tutti i record contenenti Italia e Irlanda. |
Contengono uno dei valori inclusi in un elenco di valori | In(“Francia”, “Cina”, “Germania”, “Giappone”) | Restituisce i record contenenti i nomi dei paesi specificati nell’elenco. |
Contengono determinati caratteri in una posizione specifica nel valore del campo | Right([Paese], 1) = “y” | Restituisce tutti i record contenenti nomi di paesi la cui ultima lettera è “y”. |
Soddisfano i requisiti di lunghezza | Len([Paese]) > 10 | Restituisce i record contenenti paesi il cui nome è più lungo di 10 caratteri. |
Corrispondono a uno schema specifico | LIKE “Ci??” | Restituisce i record contenenti nomi di paese, quali Cina e Cile, composti da quattro caratteri dei quali i primi due sono “Ci”. Nota I caratteri ? e _, quando vengono utilizzati in un’espressione, rappresentano un singolo carattere e sono detti anche caratteri jolly. Il carattere _ non può essere utilizzato nella stessa espressione che contiene il carattere ? e neppure in un’espressione che contiene il carattere jolly *. È possibile utilizzare il carattere jolly _ in un’espressione che contiene anche il carattere |