Il linguaggio SQL (Structured Query Language) è lo standard con cui si interroga e si gestisce un database relazionale. Praticamente ogni motore relazionale lo supporta, ma ciascun vendor ne offre una propria variante: quella di Microsoft, usata da SQL Server e da Azure SQL Database, si chiama T-SQL (Transact-SQL). Per il DP-900 devi saper riconoscere le categorie di istruzioni SQL, capire che T-SQL è un dialetto (non un linguaggio diverso) e sapere a cosa serve ciascun oggetto di database.

Le categorie di istruzioni SQL

Le istruzioni SQL si raggruppano in famiglie in base a ciò che fanno:

  • DDL (Data Definition Language) — definisce la struttura degli oggetti. Comandi tipici: CREATE, ALTER, DROP. Esempio: CREATE TABLE Clienti (...) crea una nuova tabella.
  • DML (Data Manipulation Language) — lavora sui dati contenuti nelle tabelle. Comandi: SELECT, INSERT, UPDATE, DELETE. (In alcune classificazioni SELECT è chiamato DQL, ma per l’esame rientra nella manipolazione dei dati.)
  • DCL (Data Control Language) — gestisce i permessi. Comandi: GRANT e REVOKE, per concedere o togliere autorizzazioni a utenti e ruoli.

Un modo semplice per ricordarle: DDL = struttura, DML = dati, DCL = diritti.

T-SQL come dialetto Microsoft

T-SQL estende lo standard SQL con costrutti procedurali: variabili, logica condizionale (IF/ELSE), cicli (WHILE), gestione degli errori (TRY...CATCH) e funzioni proprietarie. Grazie a queste estensioni si possono scrivere oggetti programmabili come stored procedure e trigger, che il SQL puro non prevede.

I principali oggetti di database

Oltre alle tabelle, un database relazionale contiene diversi oggetti che ne migliorano riuso, prestazioni e integrità.

Viste (Views)

Una vista è una query salvata a cui si dà un nome, e che si comporta come una tabella virtuale. Non memorizza dati propri: li ricalcola al momento. Serve a semplificare query complesse e a esporre solo un sottoinsieme di colonne o righe, ad esempio nascondendo campi sensibili come lo stipendio.

Stored procedure

Una stored procedure è un blocco di codice T-SQL salvato ed eseguibile a comando. Può accettare parametri in ingresso, eseguire più istruzioni (anche INSERT/UPDATE) e restituire risultati. Vantaggi: riuso della logica, prestazioni (piano di esecuzione pre-compilato) e sicurezza. È ideale per incapsulare operazioni ricorrenti.

Funzioni (Functions)

Una funzione restituisce sempre un valore (scalare) o una tabella e si usa dentro una query, ad esempio nella clausola SELECT o WHERE. A differenza della stored procedure, di norma non modifica i dati: serve a calcolare o trasformare valori, come formattare una data o calcolare un totale.

Indici (Indexes)

Un indice è una struttura ausiliaria che velocizza la ricerca dei dati, come l’indice analitico di un libro. Migliora le prestazioni delle SELECT sulle colonne indicizzate, ma rallenta leggermente le scritture (INSERT/UPDATE/DELETE) perché va aggiornato. Serve quando cerchi spesso su determinate colonne.

Trigger

Un trigger è codice che si esegue automaticamente in risposta a un evento su una tabella, tipicamente un INSERT, UPDATE o DELETE. Si usa per auditing (registrare chi ha modificato cosa), per applicare regole di business complesse o per mantenere dati derivati coerenti. La parola chiave da riconoscere è “automaticamente, in reazione a una modifica”.

Trappole tipiche d’esame

  • Scenario: devi eseguire automaticamente del codice ogni volta che qualcuno aggiorna una riga della tabella Ordini. → Risposta giusta: un trigger (esecuzione automatica su evento DML), non una stored procedure (che va invocata esplicitamente).
  • Scenario: vuoi mostrare agli analisti solo alcune colonne di una tabella, nascondendo i dati sensibili, senza duplicare i dati. → Risposta giusta: una vista (tabella virtuale filtrata).
  • Scenario: una query SELECT su milioni di righe è troppo lenta quando filtri per CodiceCliente. → Risposta giusta: creare un indice sulla colonna CodiceCliente.
  • Scenario: un comando aggiunge una nuova colonna a una tabella esistente. A quale categoria SQL appartiene? → Risposta giusta: DDL (ALTER TABLE modifica la struttura), non DML.
  • Scenario: vuoi concedere a un ruolo il permesso di leggere una tabella. → Risposta giusta: DCL (GRANT), non DDL né DML.