dal 2015 - visita n. 662
Clausola join
Clausola join

 

Clausola join

Finora abbiamo estratto i dati prelevandoli sempre da una tabella alla volta. Questo va bene per situazioni molto semplici, ma nella realtÓ Ŕ spesso necessario prelevare i dati da pi¨ tabelle in una singola query. Thus far, we have only been getting data from one table at a time.

╚ possibile utilizzare pi¨ tabelle in una singola query SQL e questa azione, chiamata JOIN, comporta l'apertura di due o pi¨ tabelle al fine di produrne una nuova.

La clausola JOIN si pu˛ utilizzare con le query SELECT, UPDATE e DELETE. Vedremo anche un esempio di LEFT JOIN che Ŕ differente dalla semplice JOIN.


Clausola join a linea di comando

Supponiamo di avere nel nostro database DBPROVA due tabelle dbcount_tbl e dbprova_tbl, i cui completi listati sono quelli di seguito riportati.

Esempio

# mysql -u root -p password;

Dopo l'immissione della password di root si avrÓ:

mysql> use DBPROVA;
Database changed
mysql> SELECT * FROM dbcount_tbl;
+-----------------+----------------+
| prova_author    | prova_count    |
+-----------------+----------------+
| Martino         |             20 |
| Mevio           |           NULL |
| Filano          |           NULL |
| Sempronio       |             15 |
| J. Tizio        |              1 |
| S. Pinco        |              1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from dbprova_tbl;
+-------------+----------------+-----------------+-----------------+
| prova_id    | prova_title    | prova_author    | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | J. Tizio        | 2015-02-10      |
|           2 | Learn MySQL    | A. Caio         | 2015-02-10      |
|           3 | JAVA Tutorial  | S. Pinco        | 2015-02-18      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.02 sec)

Adesso possiamo scrivere una query SQL basata su queste due tabelle che selezionerÓ tutti gli autori dalla tabella dbprova_tbl mettendoli in corrispondenza con quelli della tabella dbcount_tbl.

mysql> SELECT a.prova_id, a.prova_author, b.prova_count
    -> FROM dbprova_tbl a, dbcount_tbl b
    -> WHERE a.prova_author = b.prova_author;
+-------------+-----------------+----------------+
| prova_id    | prova_author    | prova_count    |
+-------------+-----------------+----------------+
|           1 | J. Tizio        |              1 |
|           3 | S. Pinco        |              1 |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>

Clausola join con script PHP

E' possibile utilizzare qualunque delle query precedenti in uno script PHP. Basta passare la query alla funzione PHP mysql_query() e poi estrarre i risultati come al solito.

Esempio:

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
  die('Connessione impossibile. Errore: ' . mysql_error());
}
$sql = 'SELECT a.prova_id, a.prova_author, b.prova_count
        FROM dbprova_tbl a, dbcount_tbl b
        WHERE a.prova_author = b.prova_author';

mysql_select_db('DBPROVA');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
  die('Prelievo dei dati impossibile. Errore: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
    echo "Author:{$row['prova_author']}  <br> ".
         "Count: {$row['prova_count']} <br> ".
         "Tutorial ID: {$row['prova_id']} <br> ".
         "--------------------------------<br>";
} 
echo "Prelievo dei dati riuscito.\n";
mysql_close($conn);
?>

Clausola left join

La clausola LEFT JOIN Ŕ differente dalla semplice JOIN in quanto Ŕ prevista una ulteriore operazione nella tabella di sinistra.

Eseguendo una LEFT JOIN si ottengono:

garantendo, quindi, che tutti gli autori citati nella tabella di sinistra abbiano una menzione nella tabella risultato.

Esempio:

# mysql -u root -p password;

Dopo l'immissione della password di root si avrÓ:

mysql> use DBPROVA;
Database changed
mysql> SELECT a.prova_id, a.prova_author, b.prova_count
    -> FROM dbprova_tbl a LEFT JOIN dbcount_tbl b
    -> ON a.prova_author = b.prova_author;
+-------------+-----------------+----------------+
| prova_id    | prova_author    | prova_count    |
+-------------+-----------------+----------------+
|           1 | J. Tizio        |              1 |
|           2 | A. Caio         |           NULL |
|           3 | S. Pinco        |              1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

Occorre esercitarsi un po' per acquisire familiaritÓ con le clausole JOIN, e questo pu˛ essere raggiunto solo eseguendo degli esempi tratti dal mondo reale.


















Introduzione
Installazione
Amministrazione
MySQL e PHP
Gestione database
Tipi di dati
Gestione tabelle
Query insert
Query select
Query update e delete
Clausola where
Clausola like e regexp
Clausola order by
Clausola join
Il valore NULL
Le transazioni
Il comando ALTER
Gli indici
Tabelle temporanee e cloni
Info sul database
Generazione di sequenze
Gestione dei duplicati
Iniezione di codice SQL
Export / Import



Non prestare, regala; quando sarai morto, chi ti dira' grazie?
E.M. Forster

Valid CSS!
pagina generata in 0.001 secondi