Torna all'elenco degli articoli Articoli
Tempo di lettura: 7 minuti

Come organizzare le query SQL quando diventano lunghe

La prima lunga query SQL con cui avrete a che fare sarà probabilmente difficile da strutturare e comprendere. Questi cinque consigli vi insegneranno il modo migliore per organizzare le query SQL, cioè per scriverle e formattarle.

Come tutti sanno, le query SQL sono essenziali per la gestione dei database. Senza di esse, sarebbe estremamente difficile trovare e lavorare con le informazioni contenute in un database.

La lunghezza delle query dipende dal tipo di informazioni di cui abbiamo bisogno e dalle dimensioni del database. Quando leggiamo un semplice pezzo di codice SQL, di solito siamo in grado di capirlo abbastanza facilmente. Ma cosa succede se abbiamo a che fare con una query di 1.500 righe? Se vogliamo capire quello che abbiamo fatto (o farlo capire agli altri), dobbiamo sapere come organizzare le query SQL. Fortunatamente, ricordare solo cinque utili consigli vi aiuterà a gestire ogni lunga query SQL che scriverete. .

Come organizzare le query SQL

Suggerimento 1: Indentare il codice

L'indentazione aiuta a mantenere pulite le lunghe query SQL, identificando il punto in cui inizia ogni blocco di codice. Questo rende la struttura del programma più comprensibile e permette agli sviluppatori di trovare facilmente un'istruzione specifica. Quando si indenta correttamente il codice, è possibile vedere rapidamente cosa si sta selezionando, quali tabelle forniscono i dati e quali restrizioni si applicano (ad esempio, le clausole WHERE e GROUP BY ).

Vediamo un esempio di query SQL relativamente lunga:

SELECT column1
       ,column2
FROM table1
WHERE column3 IN
(
    SELECT TOP(1) column4
    FROM table2
    INNER JOIN table3
    ON table2.column1 = table3.column1
)

Confrontate il codice precedente con questo esempio:

SELECT column1, column2 FROM table1 WHERE column3 IN ( SELECT TOP(1) column4 FROM table2 INNER JOIN table3 ON table2.column1 = table3.column1)

Immaginate che ci siano anche 100 istruzioni simili. Senza indentazione, un esempio di query SQL così lungo sarebbe molto difficile da leggere e da capire!

Non esiste un unico stile di indentazione accettato. Ogni azienda o programmatore ne sviluppa uno proprio. Tuttavia, il vostro stile di indentazione dovrebbe avere senso per gli altri. Per aiutarvi a iniziare, ho fornito i link alle guide di stile di ApexSQL e di Simon Holywell.

L'indentazione è la prima cosa da fare quando si inizia a scrivere codice. Se si eredita un pezzo di codice non indentato, ci sono molti siti che permettono di formattare gratuitamente una lunga query SQL.

Suggerimento 2: Usare la clausola WITH

La clausola WITH consente di dare un nome a un blocco di subquery e di trattarlo come una normale tabella. In questo caso, la clausola WITH sostituisce una normale subquery.

Guardate l'esempio di query SQL lunga che segue. Il suo compito è quello di mostrare il numero di ospedali di Los Angeles in cui i pazienti la cui ultima visita risale a più di 14 giorni fa hanno ricevuto un dosaggio medio di farmaci superiore a 1.000 unità.

WITH patient_data AS (
	SELECT patient_id, patient_name, hospital, drug_dosage
	FROM hospital_registry
	WHERE (last_visit > now() - interval '14 days' OR last_visit IS NULL) 
	AND city = "Los Angeles"
)

WITH average_dosage AS (
	SELECT hospital, AVG(drug_dosage) AS Average
	FROM patient_data
	GROUP BY hospital
)

SELECT count(hospital) 
FROM average_dosage;
WHERE AVG(drug_dosage) > 1000

Spiegherò tutti gli elementi di questa query.

Il primo elemento è la clausola WITH. Utilizzandola, possiamo specificare due sottoquery come patient_data e average_dosage e utilizzarle come normali tabelle. La subquery patient_data è stata utilizzata per creare la subquery average_dosage. Quindi average_dosage diventa l'origine dati finale dell'istruzione SELECT.

Questa disposizione è molto più pulita che scrivere tutto in una query e inserire tutte le sottoquery nelle istruzioni di WHERE.

Poiché rende il codice più facile da leggere, la clausola WITH è probabilmente il modo migliore per organizzare le query SQL.

Suggerimento 3: spiegarsi con i commenti

Il codice dice come, ma i commenti spiegano perché. I commenti sono tra le caratteristiche più importanti di qualsiasi codice, da un progetto di programmazione in Java a una query SQL. Permettono ai programmatori di esprimere i loro processi di pensiero e i risultati desiderati.

Aggiungete sempre i commenti al vostro codice. Sarete contenti di averlo fatto e lo saranno anche gli altri programmatori che lavoreranno sul vostro SQL. Anche se vi state prendendo una pausa, aggiungete dei commenti: vi aiuteranno a riprendere il filo del discorso.

Ecco come appare una query SQL molto semplice senza commenti:

SELECT name, 
      student_group,
FROM course_marks
WHERE points < 300 OR points IS NULL;

Sapete davvero cosa significa esattamente WHERE? Senza commenti, è difficile capire cosa volesse ottenere il codificatore.

Se vi chiedete come organizzare al meglio le query SQL, prendete l'abitudine di lasciare dei commenti nel vostro codice. Vediamo la stessa lunga query SQL, ma con commenti e spiegazioni:

/*Get the list of every student 
who failed or was absent on exam*/

SELECT name, 
      student_group,
FROM course_marks
WHERE points < 300 OR points IS NULL; --student fails when gets 300 or less points.
--When student was absent, instead of points there is NULL in column

Meglio, no? Questi commenti hanno spiegato le azioni dello sviluppatore e ci hanno aiutato a capire cosa fa la query.

Suggerimento 4: suddividere le query in fasi

Una lunga query SQL è in realtà un insieme di blocchi di codice, che sono molto più facili da controllare e da verificare se ci sono errori. Costruire la query un passo alla volta è la pratica migliore per lo sviluppo di SQL. Questo vi permetterà di trovare più velocemente gli errori logici e di essere più sicuri dei vostri risultati.

Guardate come è più facile capire questo lungo esempio di query SQL perché è stato suddiviso in passi logici:

WITH subject AS (
 SELECT 
 student_id, 
 subject_id,
 school_id,
 sum(exam_score) AS total_score 
 FROM subject_marks 
 GROUP BY student_id, subject_id, school_id
), 

student AS (
 SELECT 
 student_id,
 school_id,
 avg(total_score) AS average_student 
 FROM subject
 GROUP BY student_id, school_id
)

SELECT 
school_id, 
 avg(average_student) 
FROM student 
GROUP BY school_id;

Vogliamo che il risultato di questa query ci mostri la media dei punti di ogni studente di ogni scuola. La prima fase (la clausola WITH subject ) trova la somma dei punti per ogni materia. La seconda fase (la clausola WITH student ) calcola la media dei punti di ogni studente. Quando si raggiunge la clausola SELECT, tutto ciò che occorre fare è trovare la media dei punti e raggruppare i risultati per scuola.

Costruendo una lunga query SQL in questo modo, si scrive una query che non è più molto lunga né complicata. Dipende solo da come si sceglie di suddividerla.

Suggerimento 5: attenersi a una convenzione di denominazione

È molto importante utilizzare un'unica convenzione di denominazione per tabelle, colonne e query. Questo rende il codice SQL più facile da scrivere e da leggere.

Se un database legacy ha tabelle denominate PRODUCT, users, USERS_other e UserSECOND_NEW, l'aspetto è poco professionale e la codifica diventa caotica. Seguite le regole stabilite per la capitalizzazione, i trattini bassi, gli spazi, ecc. Questo vale anche per gli stili delle query: attenetevi alle stesse regole di formattazione e agli stessi schemi di indentazione per tutto il database. Se iniziate una nuova riga dopo un SELECT, fatelo ogni volta, soprattutto quando scrivete una lunga query SQL.

Le convenzioni di denominazione possono essere molto diverse da database a database. Come per l'indentazione, non esiste un unico stile riconosciuto dal settore. Vi consiglio di individuare le convenzioni più diffuse e di modellare il vostro stile su quelle. Questi articoli dei blog Vertabelo e Launch by Lunch sono un buon punto di partenza.

Il modo migliore per capire la differenza tra una buona e una cattiva formattazione delle query è vederla di persona. Di seguito è riportato un esempio di stile scadente:

SELECT name, SECONDNAME, Date_TIME, address, SecondAddress
FROM registry, other_USERSData
WHERE registry.id = other_USERSData.id;

Questa query, che utilizza uno stile costante, è molto più leggibile:

SELECT name, second_name, date_time, address, second_address
FROM registry, other_users_data
WHERE registry.id = other_users_data.id;

La misteriosa lunga query SQL - Sintesi

In sintesi, questi suggerimenti vi aiuteranno a scrivere query migliori, indipendentemente dalla loro lunghezza, ma è particolarmente importante applicarli ogni volta che scrivete una query SQL lunga. La cosa migliore da fare è esercitarsi nell'uso di buone tecniche. Se non sapete come sviluppare le vostre capacità, il nostro sito web SQL Basics corso è un'ottima soluzione. Ci sono molte lezioni che vi insegneranno come organizzare le query SQL.

Ci vorrà del tempo per imparare a scrivere query SQL pulite e intelligenti. È necessario capire le relazioni tra le tabelle, la pianificazione del codice e dei dati, come identificare le parti di una query e quali risultati ci si può aspettare. Pazienza e duro lavoro sono le chiavi del successo!