In questo articolo, coprirò le basi dell’uso della clausola SQL SELECT per recuperare dati da una o più tabelle SQL Server. Spiegherò anche come recuperare colonne selezionate, nonché come utilizzare le clausole SQL WHERE e HAVING per filtrare le righe.
Gli esempi in questo articolo utilizzano tutti il database di esempio AdventureWorksLT2019. Nell’articolo precedente di questa serie, ho spiegato come popolare le tabelle SQL Server utilizzando le istruzioni INSERT, UPDATE e DELETE. Queste istruzioni di Structured Query Language (SQL) modificano il contenuto di una tabella, ma la clausola SQL SELECT ha uno scopo diverso.
Come utilizzare una semplice clausola SQL SELECT
La clausola SQL SELECT viene utilizzata per interrogare i dati da una tabella. Il seguente codice illustra la sintassi più basilare della clausola SELECT.
SELECT columns FROM schema_name.table_name;
Come dovresti sapere, i dati della tabella sono organizzati in un formato righe e colonne. Ogni riga rappresenta un record unico in una tabella, e ogni colonna rappresenta un campo nel set di dati.
Il primo accordo della dichiarazione SELECT è un elenco dei nomi delle colonne che verranno recuperati. Qui, specifica un elenco di colonne separate da virgole da cui desideri recuperare i dati.
Successivamente, la clausola FROM specifica la tabella di origine e il relativo nome dello schema se necessario. SQL Server utilizza gli schemi per raggruppare logicamente tabelle e altri oggetti del database. Lo schema predefinito per ogni database è dbo, e poiché è lo schema che viene utilizzato qui, può essere omesso.
L’elenco seguente mostra un esempio di una semplice dichiarazione SELECT:
- Il primo comando USE imposta il database corrente su AdventureWorksLT2019.
- La dichiarazione SELECT fornisce un elenco di colonne per il set di risultati che verrà recuperato dalla tabella SalesLT.Customer.
- In questo caso, il database di esempio AdventureWorksLT2019 utilizza il nome dello schema ‘SalesLT’ (tra gli altri), quindi è necessario includere il nome dello schema, un punto e quindi il nome della tabella, che è ‘Customers’.
- Le colonne ‘FirstName’ e ‘LastName’ recuperano il nome e il cognome del cliente.
USE AdventureWorksLT2019 SELECT FirstName, LastName from SalesLT.Customer

Come abbreviazione, è possibile utilizzare un asterisco (*) per recuperare tutte le colonne nella tabella indipendentemente dal numero di colonne. Puoi vedere un esempio di questo qui sotto:
USE AdventureWorksLT2019 SELECT * from SalesLT.Customer

La dichiarazione SELECT * è utile per query ad hoc o per esaminare le colonne e i dati di una tabella con cui non sei familiare. Tuttavia, non dovresti utilizzare questa dichiarazione per il codice di produzione: di solito recupera più dati di quelli necessari per l’applicazione e non vuoi aumentare il carico di lavoro del tuo server SQL.
Come filtrare le righe con la clausola WHERE di SQL
Il vero potere dello statement SELECT si trova nelle sue capacità di filtraggio e unione. La query SELECT può utilizzare una clausola WHERE opzionale per filtrare i dati che verranno restituiti.
La clausola WHERE utilizza una o più condizioni booleane per selezionare i dati desiderati della tabella. La clausola WHERE viene sempre posizionata dopo la clausola FROM e prima delle clausole GROUP BY, HAVING e ORDER BY.
Puoi vedere un esempio dell’uso della clausola WHERE in SQL qui sotto. Qui, la clausola WHERE viene utilizzata per filtrare un elenco di selezione contenente le colonne ‘Nome’, ‘Cognome’, ‘Telefono’ e ‘NomeAzienda’ dalle righe che contengono il valore ‘Sharp Bikes’ nella colonna ‘NomeAzienda’.
USE AdventureWorksLT2019 SELECT FirstName, LastName, Phone, CompanyName FROM SalesLT.Customer WHERE CompanyName = 'Sharp Bikes';

Filtraggio delle righe che contengono un valore come parte di una stringa
Il potere dell’uso della clausola WHERE con l’istruzione SELECT risiede nella sua flessibilità. La clausola WHERE va ben oltre la semplice uguaglianza, “maggiore di” e “minore di” operatori di confronto. Diamo un’occhiata più da vicino a alcune delle cose che puoi fare con la clausola WHERE, iniziando con l’uso dell’ operatore LIKE di SQL.
L’operatore LIKE viene utilizzato per determinare se una stringa di caratteri specifica corrisponde a un modello specificato. Nell’esempio seguente, recuperiamo tutte le righe dalla tabella Customer che contengono la parola ‘Bike’ ovunque nella colonna ‘CompanyName’. Qui, è necessario utilizzare il carattere jolly % sia prima che dopo la parola ‘Bike’.
USE AdventureWorksLT2019 SELECT SalesPerson, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE('%Bike%');

Filtraggio delle righe che soddisfano una qualsiasi delle tre condizioni
Puoi anche utilizzare la clausola WHERE per filtrare le righe in base a valori multipli diversi. La lista di codice seguente mostra come utilizzare l’istruzione SELECT con una clausola WHERE per selezionare tre valori diversi dalla tabella Product. In questo esempio, la clausola WHERE è utilizzata con l’operatore OR per selezionare le righe in cui ‘ProductID’ è uguale a 680, 711 o 722.
USE AdventureWorksLT2019 SELECT Name, ProductID, ProductNumber FROM SalesLT.Product WHERE ProductID = 680 OR ProductID = 711 OR ProductID = 722;

Filtraggio delle righe che sono in un elenco di valori
Allo stesso modo, è possibile utilizzare la clausola WHERE per selezionare le righe contenute in un elenco definito utilizzando l’operatore IN. Nell’esempio seguente, l’istruzione SELECT restituirà le righe che contengono i valori di ‘Bothell’, ‘Bellevue’ o ‘Renton’ nella colonna ‘City’ della tabella SalesLT.Address.
USE AdventureWorksLT2019 SELECT AddressID, AddressLine1, City FROM SalesLT.Address WHERE City IN ('Bothell', 'Bellevue', 'Renton');

Filtraggio delle righe che hanno un valore compreso tra due valori
Puoi anche utilizzare la clausola WHERE dell’istruzione SELECT con l’operatore BETWEEN per selezionare i valori delle righe che rientrano all’interno di un determinato intervallo predefinito in una colonna specifica. Nell’esempio seguente viene mostrato come utilizzare BETWEEN per restituire solo le righe nella tabella Product che hanno un valore nella colonna ‘ListPrice’ maggiore di 10 e minore di 50.
USE AdventureWorksLT2019 SELECT ProductID, Name FROM SalesLT.Product WHERE ListPrice Between 10 AND 50;

Filtraggio delle righe con la clausola HAVING
Puoi anche filtrare le righe in un set di risultati utilizzando la clausola HAVING. La clausola HAVING è stata aggiunta a SQL Server perché la parola chiave WHERE non può essere utilizzata con funzioni di aggregazione come GROUP BY. Viene utilizzata per specificare una condizione di ricerca per un gruppo o un’aggregazione che include una o più condizioni vere per diversi gruppi di record.
La clausola HAVING viene sempre dopo la clausola GROUP BY e prima della clausola ORDER BY, come puoi vedere nella seguente istruzione SQL. In questo esempio, il set di risultati è costituito da ‘SalesOrderID’ e l’alias di colonna ‘SubTotal’. L’ordine è asc (crescente) e le righe sono aggregate raggruppate per ‘SalesOrderID’.
USE AdventureWorksLT2019 ; SELECT SalesOrderID, SUM(LineTotal) AS SubTotal FROM SalesLT.SalesOrderDetail GROUP BY SalesOrderID HAVING SUM(LineTotal) > 5000.00 ORDER BY SalesOrderID ;

Riepilogo
In questo tutorial, ho spiegato le basi dell’uso dell’istruzione SELECT T-SQL per filtrare le righe in diversi modi. La clausola WHERE fornisce un insieme estremamente flessibile di operatori che ti permettono di selezionare le righe basate su una serie di diverse condizioni. Allo stesso modo, la clausola HAVING ti permette di selezionare gruppi di righe che soddisfano una certa condizione. Grazie per aver letto e resta sintonizzato per il mio prossimo articolo in questa serie essenziale di SQL Server.
Articolo correlato: