Le 10 query SQL più utili in SQL Server

SQL Server è uno degli strumenti più potenti e diffusi per la gestione dei dati. Imparare le query SQL più utili ti aiuterà non solo a eseguire le operazioni quotidiane in modo più rapido, ma anche a migliorare le performance del tuo sistema. In questo articolo, esploreremo alcune delle query più comuni in SQL Server, offrendoti esempi pratici e una spiegazione dettagliata su come utilizzarle.
1. Ottenere statistiche da una tabella
Una delle prime operazioni che un amministratore di database potrebbe voler fare è monitorare le dimensioni delle tabelle e altre statistiche importanti, come il numero di righe e lo spazio occupato. La query sp_spaceused di SQL Server fornisce una panoramica completa di queste informazioni.
sp_spaceused 'nome_tabella';
Quando esegui questa query, SQL Server restituisce una serie di dettagli sulla tabella specificata. Tra le informazioni che puoi ottenere ci sono la quantità di spazio allocato, la quantità di spazio utilizzato e il numero di righe. Questa query è utile per monitorare la crescita delle tue tabelle e per ottimizzare l’uso dello spazio, specialmente in tabelle di grandi dimensioni.
La funzione ti fornisce anche informazioni sull’indice e su quanto spazio occupano gli indici associati alla tabella.
2. Creazione di una tabella
In SQL Server, la creazione di una tabella è una delle operazioni fondamentali. La sintassi di base per creare una tabella è abbastanza semplice, ma offre molta flessibilità nella definizione delle colonne, dei tipi di dati e delle chiavi primarie.
CREATE TABLE Clienti (
ID INT PRIMARY KEY,
Nome VARCHAR(100),
Email VARCHAR(100),
DataRegistrazione DATETIME
);
Questa query crea una tabella denominata “Clienti”, con quattro colonne: ID, Nome, Email, e DataRegistrazione. La colonna ID è definita come chiave primaria, il che significa che ogni valore nella colonna sarà unico e non nullo.
Puoi definire tipi di dati diversi per ogni colonna. Ad esempio, VARCHAR è usato per stringhe di testo di lunghezza variabile, mentre DATETIME è usato per memorizzare data e ora.
Ricorda: le chiavi primarie sono cruciali per garantire l’integrità dei dati e migliorare le performance nelle operazioni di ricerca e aggiornamento.
3. Inserimento dei dati in una tabella
Una volta creata la tabella, il passo successivo è inserire i dati. L’inserimento può avvenire utilizzando il comando INSERT INTO, che permette di aggiungere uno o più record a una tabella.
INSERT INTO Clienti (ID, Nome, Email, DataRegistrazione)
VALUES (1, 'Mario Rossi', '[email protected]', GETDATE());
Questa query inserisce un nuovo record nella tabella “Clienti”. I valori per ogni colonna vengono specificati nella clausola VALUES, con l’ID del cliente, il nome, l’email e la data di registrazione (utilizzando la funzione GETDATE() per ottenere la data e ora corrente).
Puoi inserire più righe contemporaneamente utilizzando una sola query INSERT, separando i valori con una virgola.In alternativa, puoi utilizzare INSERT INTO in combinazione con una SELECT per copiare dati da altre tabelle.
4. Selezionare dati da una tabella
Una delle query SQL più comuni è quella di selezionare dati da una tabella, e la sintassi di base di SELECT è molto semplice.
SELECT * FROM Clienti;
La query sopra restituirà tutte le righe della tabella “Clienti” con tutte le colonne. Se desideri ottenere solo alcuni dati specifici, puoi limitare le colonne:
SELECT Nome, Email FROM Clienti;
Puoi aggiungere condizioni specifiche con la clausola WHERE per filtrare i dati. Ad esempio, se desideri solo i clienti che si sono registrati dopo una certa data:
SELECT * FROM Clienti
WHERE DataRegistrazione > '2025-01-01';
5. Utilizzare il JOIN per combinare tabelle
I database relazionali spesso richiedono di combinare dati provenienti da più tabelle. Il comando JOIN è uno degli strumenti più potenti per ottenere informazioni da tabelle diverse in un’unica query.
SELECT Clienti.Nome, Ordini.IDOrdine, Ordini.DataOrdine
FROM Clienti
JOIN Ordini ON Clienti.ID = Ordini.IDCliente;
Questa query unisce le tabelle “Clienti” e “Ordini” sulla base della relazione tra la colonna ID di “Clienti” e la colonna IDCliente di “Ordini”. Il risultato include il nome del cliente, l’ID dell’ordine e la data dell’ordine.
Dettagli Aggiuntivi:
- Esistono diverse varianti di JOIN, come INNER JOIN, LEFT JOIN e RIGHT JOIN. La differenza principale è che INNER JOIN restituisce solo le righe che hanno corrispondenze in entrambe le tabelle, mentre LEFT JOIN restituisce tutte le righe della tabella a sinistra, anche se non c’è una corrispondenza nell’altra.
6. Le Subquery per operazioni più complesse nella clausola WHERE
Le subquery sono query annidate all’interno di un’altra query, che ti permettono di eseguire operazioni più complesse senza dover creare tabelle temporanee. Le subquery possono essere usate in vari contesti, ma una delle applicazioni più comuni è nella clausola WHERE, per applicare filtri basati su condizioni dinamiche.
SELECT Nome
FROM Clienti
WHERE ID IN (SELECT IDCliente FROM Ordini WHERE DataOrdine > '2025-01-01');
Questa query restituisce i nomi dei clienti che hanno effettuato ordini dopo il 1° gennaio 2025. La subquery nella clausola WHERE seleziona gli ID dei clienti che soddisfano la condizione di avere effettuato un ordine in quella data.
Le subquery nella clausola WHERE sono utili quando desideri filtrare i dati in base a un valore che dipende da un altro set di dati. È importante ottimizzare le subquery, poiché un uso eccessivo di queste può comportare un rallentamento delle performance, soprattutto su tabelle molto grandi.
7. Funzioni aggregate per analizzare i dati
Le funzioni aggregate in SQL Server, come COUNT(), SUM(), AVG(), MIN(), e MAX(), sono utilizzate per eseguire calcoli su un insieme di dati. Una delle applicazioni più comuni di queste funzioni è l’aggregazione dei dati per ottenere statistiche globali.
SELECT IDCliente, COUNT(*) AS NumeroOrdini
FROM Ordini
GROUP BY IDCliente;
Questa query conta il numero di ordini effettuati da ciascun cliente, raggruppando i risultati per il IDCliente. La funzione COUNT(*) calcola il numero di righe per ogni gruppo.
Le funzioni di aggregazioni possono essere combinate con HAVING per applicare filtri sui gruppi risultanti.
8. Ordinare i risultati con ORDER BY
Quando desideri che i risultati di una query siano restituiti in un ordine specifico, puoi utilizzare la clausola ORDER BY. Tuttavia, è importante notare che ordinare i dati può avere un impatto molto negativo sulle performance, soprattutto quando si lavora con tabelle di grandi dimensioni o query molto complesse.
SELECT *
FROM Clienti
ORDER BY DataRegistrazione DESC;
Questa query ordina i risultati in ordine decrescente in base alla data di registrazione del cliente, mostrando prima i clienti registrati più di recente. Tuttavia, l’ordinamento dei dati richiede tempo di elaborazione, in particolare se la tabella contiene milioni di righe o se non sono presenti indici sui campi utilizzati per l’ordinamento.
Puoi ordinare per più colonne separandole con una virgola. Inoltre, puoi combinare ordinamento ascendente (ASC) o discendente (DESC).
Se le performance sono un problema, è possibile considerare l’uso di indici, ma questo può avere implicazioni negative durante le operazioni di inserimento e aggiornamento dei dati.
9. Limitare il numero di risultati con TOP
A volte potresti voler limitare il numero di risultati restituiti da una query, specialmente se stai lavorando con tabelle molto grandi.
SELECT TOP 5 * FROM Clienti
ORDER BY DataRegistrazione DESC;
Questa query restituisce solo i primi 5 clienti più recenti, ordinati per data di registrazione.
Dettagli Aggiuntivi:
- TOP può essere utilizzato per restituire un numero fisso di righe o una percentuale di righe.
- È molto utile quando hai bisogno di limitare l’output per motivi di performance o di visualizzazione.
10. Ottimizzazione delle performance con gli indici
Gli indici sono fondamentali per migliorare la velocità delle operazioni di ricerca e accesso ai dati in SQL Server. Creare indici sulle colonne che vengono frequentemente utilizzate nelle query di ricerca può fare una grande differenza nelle performance. Tuttavia, è importante fare attenzione: la creazione di un indice non è sempre vantaggiosa e può avere un impatto negativo sulle operazioni di scrittura, come inserimenti, aggiornamenti e cancellazioni, a causa della necessità di mantenere l’indice aggiornato.
CREATE INDEX idx_email ON Clienti (Email);
Questa query crea un indice sulla colonna Email della tabella “Clienti”, migliorando la velocità delle query che filtrano o ordinano per l’email del cliente.
Sebbene gli indici migliorino la velocità delle query di lettura, è importante non abusarne, poiché possono rallentare le operazioni di scrittura. Gli indici vanno scelti con attenzione in base alle necessità di accesso ai dati. Creare troppi indici può peggiorare le performance complessive del database
Se desideri approfondire le tue competenze in SQL Server, puoi dare un’occhiata al corso Microsoft SQL Server di Nicola Iantomasi, dove imparerai come utilizzare al meglio SQL Server per gestire, ottimizzare e analizzare i tuoi dati.
Ti potrebbe interessare:
Segui guruhitech su:
- Google News: bit.ly/gurugooglenews
- Telegram: t.me/guruhitech
- X (Twitter): x.com/guruhitech1
- Bluesky: bsky.app/profile/guruhitech.bsky.social
- GETTR: gettr.com/user/guruhitech
- Rumble: rumble.com/user/guruhitech
- VKontakte: vk.com/guruhitech
- MeWe: mewe.com/i/guruhitech
- Skype: live:.cid.d4cf3836b772da8a
- WhatsApp: bit.ly/whatsappguruhitech
Esprimi il tuo parere!
Ti è stato utile questo articolo? Lascia un commento nell’apposita sezione che trovi più in basso e se ti va, iscriviti alla newsletter.
Per qualsiasi domanda, informazione o assistenza nel mondo della tecnologia, puoi inviare una email all’indirizzo [email protected].
Scopri di più da GuruHiTech
Abbonati per ricevere gli ultimi articoli inviati alla tua e-mail.