martedì 23 marzo 2021

SQL giocando con MySQL 8 e NetBeans 12 - Post 2 - Primi passi

Quindi una base dati è una collezione di tabelle, ossia una raccolta di dati organizzati in righe e colonne. Le colonne sono i campi della tabella, mentre le righe sono i record o la singola registrazione dell'insieme dei campi che compongono la tabella. Ora che abbiamo avuto una prima introduzione a SQL, è tempo di passare a qualcosa di più interessante.

La prima cosa che bisognerebbe saper fare è consultare l'elenco delle basi dati cui può collegarsi l'utente con cui ci connettiamo a MySQL. Proviamo quindi il comando 

SHOW DATABASES;

Ogni comando va terminato con il punto e virgola. SQL non è case sensitive, quindi i comandi possono essere scritti indifferentemente in maiuscolo o minuscolo. Ciò però significa anche che non possiamo dare a due elementi nomi distinti cambiando solo qualche lettera da maiuscolo a minuscolo e viceversa.


Scritto il comando e cliccato il pulsante di esecuzione della query, il risultato è una tabella (abituiamoci perchè i database producono quasi sempre tabelle) con una sola colonna in cui sono elencati i nomi delle basi dati disponibili.

SHOW è un comando che accetta diversi elementi a seguire. Un altro utile è

SHOW TABLES;

che restituisce una tabella con l'elenco dei nomi delle tabelle per la base dati attualmente selezionata. Se dal post precedente è stata selezionata la base dati world, l'elenco riguarderà le tabelle presenti in quella dase dati


Come si può osservare SQL non è case sensitive, e le due istruzioni vengono eseguite una dopo l'altra producendo in output due distinte tabelle visualizzata ognuna in una scheda nell'area di risultato. In generale però si preferisce scrivere i comandi SQL in maiuscolo per distinguerli dagli elementi propri della base dati che vengono scritti in minuscolo. 

Altro uso di SHOW è per la visualizzazione dell'elenco dei campi di una tabella, ad esempio:

SHOW COLUMNS FROM world.city;


Anche in questo caso il risultato è una tabella con l'elenco dei nomi dei campi della tabella e le loro caratteristiche. Si osservi nell'esempio che al posto di world.city, è stato scritto solo city. In SQL i nomi vanno qualificati completamente tramite l'operatore punto per cui si scrive nomeDB.tabella.campo. Ma questo non è sempre necessario e se non c'è ambiguità si può scrivere direttamente l'elemento o qualificarlo in parte.

Ora che abbiamo visto i DB, le tabelle e i campi delle tabelle è tempo di iniziare ad accedere ai dati. L'accesso ai dati in lettura avviene tramite l'istruzione SELECT, con cui si selezionano i dati dalla base dati. I dati possono provenire da alcune o tutte le colonne di una o più tabelle. Una semplice istruzione SELECT è:

SELECT elencoColonne FROM tabella;

In cui elencoColonne è un elenco di uno o più nomi di campi 


Come si può vedere un comando SQL può occupare più righe. Gli spazi vuoti in più, siano essi spazi veri e propri, tabulazioni, accapo, sono ignorati e il comando termina con il punto e virgola. Le due SELECT produrranno ognuna una nuova scheda con all'interno i dati della sola colonna richiesta.

Se si volesse una sola tabella risultato con entrambi i campi basta elencare i campi separandoli con una virgola.

SELECT name, countryCode FROM city;


Attenzione, anche se non richiesto nella SELECT, NetBeans sta limitando a 100 il numero delle righe estratte, per evitare di restare bloccato in una interrogazione troppo lunga. Tale limite può essere ampliato o ridotto tramite il campo Max rows che si vede nell'area di risultato. La query però se eseguita in un programma o direttamente alla riga di comando di MySQL produrrebbe l'elenco completo.

Qualora di desideri visualizzare tutti i campi e non un sotto elenco, si possono elencare tutti i nomi oppure utilizzare il carattere *

SELECT * FROM city;


Come si può osservare il countryCode si ripete più volte, poichè più città appartengono allo stesso paese, così come si ripete più volte district per quelle città che appartengono allo stesso distretto. Esiste un modo per richiedere una sola ricorrenza di dato ed è con DISTINCT, che abbiamo già incontrato.

SELECT DISTINCT countryCode, district FROM city;

Il risultato sarà una tabella con i due campi  tale che la combinazione dei due campi non si ripeta più di una volta.


Quindi avremo il countryCode con tutti i suoi distinti district.

Bene, si è iniziato a interrogare la base dati per ottenere i primi risultati. Altre elementi utili all'interrogazione saranno trattati nei prossimi post.