Per la nostra esercitazione SQL, è stato creato e popolato un database. Lo script per importarlo è
al seguente
link.
Le entità sono tre: Marca (Samsung, Apple, HTC, etc.), OS (Android, iOS, etc.), Smartphone (Galaxy S4, iPhone 5S, etc).
Provare ad eseguire le query richieste.
es2_smartphone (id, nome, ram, cpu, display_ppi, display_size, display_resolution, dimensioni, peso, note, id_marca, id_os);
es2_os (id, descrizione, company, open_source);
es2_marca (id, brand, nazionalita);
![]() |
![]() |
![]() |
Vogliamo conoscere la marca degli smartphone presenti nel database.
Proviamo ad eseguire la query inserita nel riquadro, ovvero:
SELECT nome, brand
FROM es2_smartphone, es2_marca
Senza aggiungere nessun'altra condizione.
Abbiamo 12 occorrenze nella tabella es2_marca e
19 telefoni inseriti nella tabella es2_smartphone. Il risultato della query appena fatta è di 12x19 righe.
Questo risultato viene chiamato prodotto cartesiano, ovvero, ad ogni singola riga della prima tabela indicata, viene affiancata
ogni occorrenza della seconda tabella. Ovviamente, non è il risultato che volevamo!
Per prendere un'occorrenza della tabella es2_smartphone e la riga corrispondente
nella tabella es2_marca, dobbiamo specificare le chiavi che le legano.
La primary KEY di es2_marca deve legarsi alla tabella es2_smartphone tramite la FOREIGN KEY id_marca.
Ci sono due modi per farlo, perfettamente equivalenti.
Primo metodo: All'interno della clausola FROM specificare che la prima tabella è in
INNER JOIN con la seconda tabella ON
specificare l'uguaglianza tra la chiave primaria e la chiave esterna.
Secondo metodo: Nel FORM si specificano le due tabelle e all'interno della clausola
WHERE si specifica l'uguaglianza tra la chiave primaria e la chiave esterna.
Esempio Primo metodo: SELECT nome, brand
FROM es2_smartphone INNER JOIN es2_marca
ON es2_marca.id = id_marca;
Esempio Secondo metodo: SELECT nome, brand
FROM es2_smartphone, es2_marca WHERE
es2_marca.id = id_marca;
Provare gli esempi in tutti e due i casi e proseguire con l'esercitazione
utilizzando il metodo che si ritiene di aver compreso meglio!
Ricordare: Rispetto al punto precedente, cambiano le entità su cui effettuare la JOIN. Procedere
sulle due tabelle che contengono le informazioni che ci interessano: es2_smartphone e
es2_os.
Esercizio extra: Ordinare la query per la descrizione del sistema operativo.
Ricordare: Riguardare la prima esercitazione e provare a legare le tabelle smartphone e os e subito dopo a filtrare es2_os con il fatto che il brand deve essere Android e aggiungere la clausola ORDER BY.
Esercizio extra: Modificare la query per trovare gli smartphone 'Samsung' ordinati per il peso.
Ricordare: La JOIN su due o più tabelle segue sempre i concetti fondamentali.
Indicare le tabelle da cui devono essere estratte le informazioni e poi legarle tramite le chiavi.
In questo caso è una query in JOIN su tre tabelle.