Query di selezione

Nel capitolo precedente abbiamo usato INSERT per inserire dei dati nella nostra tabella users.

Useremo ora SELECT per interrogare (query) il database.

Sintassi

L'istruzione SELECT ha questo formato generale:

Quindi abbiamo:

  • la lista delle colonne che vogliamo ricevere come risultato
  • il nome della tabella da cui prendere i dati
  • le condizioni, che costituiscono una sorta di "filtro" dei dati

Prendendo ad esempio la tabella degli utenti:

selezioniamo le due colonne segnate in azzurro, andando a mettere una condizione sulla colonna segnata in giallo:

la query chiede di selezionare le colonne enabled e full_name dalla tabella users, prendendo solo le righe che hanno id minore di 2; questo dovrebbe essere il risultato:

Notiamo che la colonna id non è stata selezionata, anche se viene usata nelle condizioni del WHERE.

Nella clausola WHERE possiamo mettere una o più condizioni utilizzando gli operatori di confronto:

Operatore Descrizione
< minore di
> maggiore di
<= minore o uguale di
>= maggiore o uguale di
= uguale a
<> or != diverso da

Le conzioni potranno essere concatenate grazie agli operatori logici AND, OR e NOT... ad esempio:

SELECT * FROM users WHERE full_name = 'Harry Potter' OR enabled = 'false';

darà come risultato:

Esiste anche un operatore molto interessante: LIKE, che permette di filtrare le stringhe che non sono esattamente uguali a quella cercata, ma le assomigliano, ad esempio con la query:

SELECT * FROM users WHERE full_name LIKE '%Smith';

possiamo selezionare le righe in la colonna full_name termina con Smith. % è un carattere jolly (wildcard) che significa "qualsiasi carattere". Ecco quindi il risultato:

 

Order by

WHERE permette di filtrare i dati, mentre con ORDER BY possiamo stabilire in che ordine devono essere visualizzati. Pensiamo ad esempio alla pagina di un sito web che deve mostrare i post di un blog a partire dai più recenti.

Vediamo ad esempio come ordinare la tabella degli utenti in base alla colonna enabled:

Nell'ordinamento dei booleani false (0) viene prima di true (1)... proviamo a fare la stessa cosa ma ordine decrescente (dal più grande al più piccolo):

E' possibile ordinare le righe anche in base a più di una colonna:

In questo caso le righe vengono prima ordinate in base alla colonna enabled (discendente), dopodiché quelle che hanno lo stesso valore per enabled vengono ordinate in base alla colonna id (discendente).

Esercizi

Per ogni esercizio scrivi una query che restituisca:

  1. la popolazione degli USA
  2. la popolazione e la capitale di tutte le nazioni nella tabella
  3. i nomi di tutte le nazioni ordinate alfabeticamente
  4. i nomi e le capitali di tutte le nazioni in ordine di popolazione, dalla minore alla maggiore
  5. le stesse informazioni della precedente, ma in ordine decrescente
  6. il seguente output:
  7. I nomi di tutte le nazioni con una popolazione maggiore di 70 milioni
  8. i nomi di tutte le nazioni con una popolazione maggiore di 70 milioni ma minore di 200 milioni
  9. il nome e cognome di tutte le celebrità ancora viventi
  10. il nome e cognome di tutte le celebrità che cantano
  11. il nome e cognome di tutte le celebrità che recitano
  12. il nome e cognome di tutte le celebrità che cantano E recitano
  13. la lista di tutti i burger ordinati, dal più economico al più costoso, con un costo minore di $ 5.00
  14. il nome del cliente, l'email e i punti fedeltà di tutti gli ordini con almeno 20 punti fedeltà, ordinando da quello con più punti a quello con meno punti
  15. tutti i burger ordinati da Natasha O'Shea
  16. il nome del cliente di tutti gli ordini che non includono una bibita
  17. gli ordini che non includono fries
  18. gli ordini che includono sia un contorno che una bibita
  • SQL

CFP CNOS-FAP DON BOSCO - via XIII Martiri, 86 - 30027 San Donà di Piave (VE) - tel. 0421 338 980 - Organismo di Formazione accreditato dalla Regione del Veneto