Creare una stampa in SQL

Lezione semplice e forse inutile nella didattica quotidiana, ma quello che trattiamo è un argomento chiesto in una domanda di esame di stato che è uscita alcune volte, trovando impreparati alunni e qualche collega che magari non arriva con tempistiche strette a vederla a lezione. Come possiamo realizzare una stampa a video in SQL?

Non vogliamo scomodare le performanti librerie per creare pdf da codice php. Per quanto siano sicuramente perfettamente a tema, usarle in una prova conclusiva da svolgere su carta sarebbe impossibile per un alunno senza manuale ed esempi preliminari.

Tabella e dati

Mi creo in primo luogo una tabella di prova, come una classica anagrafica studente. Ne riporto il codice di esempio.

CREATE TABLE studenti(
Matricola CHAR(6),
Nome VARCHAR(20),
Cognome VARCHAR(20),
DataIscrizione DATE) 

INSERT INTO studenti (Matricola, Nome, Cognome, DataIscrizione) VALUES
('A12345', 'Luca', 'Rossi', '2022-09-15'),
('B23456', 'Giulia', 'Verdi', '2023-01-10'),
('C34567', 'Marco', 'Bianchi', '2021-07-22'),
('D45678', 'Elena', 'Neri', '2022-11-03'),
('E56789', 'Andrea', 'Ferrari', '2023-02-28'),
('F67890', 'Sara', 'Conti', '2021-03-19'),
('G78901', 'Matteo', 'Gallo', '2022-05-30'),
('H89012', 'Chiara', 'Russo', '2023-04-12'),
('I90123', 'Davide', 'Romano', '2021-10-01'),
('J01234', 'Alice', 'Greco', '2023-06-20');

La stampa

In sql siamo abituati a stampare i dati nel classico e ragionevole formato tabellare, come ci si aspetta. In genere specifichiamo una SELECT * … oppure andiamo a inserire un certo numero di campi SELECT Matricola, Cognome …. La cosa interessante è che posso inserire anche del testo fisso virgolettato che compare come una sorta di etichetta fissa, alternata ai campi dati. Assomiglia un po’ a quello che si fa con i primi programmini C++ e il comando cout << concatenato.

SELECT  'Matricola: ', s.Matricola, ' Nome: ', s.Nome, ' Cognome: ', s.Cognome, ' Iscritto il: ', s.DataIscrizione FROM studenti AS s;

che come risultato su un db MySQL / Maria DB si comporta così:

Siccome non possiamo eliminare l’intestazione della tabella, possiamo ridefinarla in modo meno invasivo con la funzione di concatenazione:

SELECT  CONCAT('Matricola: ', s.Matricola, ' Nome: ', s.Nome, ' Cognome: ', s.Cognome, ' Iscritto il: ', s.DataIscrizione) AS "Anagrafica Studenti"
FROM studenti AS s;

Il risultato assomiglia a qualcosa di questo tipo:

Ultima modifica 6 Giugno 2025