Unisciti a Python MySQL
Unisciti a due o più tavoli
È possibile combinare righe di due o più tabelle, in base a una colonna correlata tra loro, utilizzando un'istruzione JOIN.
Considera di avere una tabella "utenti" e una tabella "prodotti":
utenti
{ id: 1, name: 'John', fav: 154},
{ id:
2, name: 'Peter', fav: 154},
{ id: 3, name: 'Amy', fav: 155},
{ id: 4, name: 'Hannah', fav:},
{ id: 5, name: 'Michael', fav:}
prodotti
{ id: 154, name:
'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{
id: 156, name: 'Vanilla Dreams' }
Queste due tabelle possono essere combinate utilizzando il fav
campo utenti e il campo prodotti
id
.
Esempio
Unisciti a utenti e prodotti per vedere il nome del prodotto preferito dagli utenti:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
INNER JOIN
products ON users.fav = products.id"
mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:
print(x)
Nota: puoi usare JOIN invece di INNER JOIN. Entrambi ti daranno lo stesso risultato.
UNISCITI A SINISTRA
Nell'esempio sopra, Hannah e Michael sono stati esclusi dal risultato, perché INNER JOIN mostra solo i record dove c'è una corrispondenza.
Se vuoi mostrare a tutti gli utenti, anche se non hanno un prodotto preferito, usa l'istruzione LEFT JOIN:
Esempio
Seleziona tutti gli utenti e il loro prodotto preferito:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
LEFT JOIN
products ON users.fav = products.id"
GIUSTO UNISCITI
Se desideri restituire tutti i prodotti e gli utenti che li hanno come preferiti, anche se nessun utente li ha come preferiti, utilizza l'istruzione RIGHT JOIN:
Esempio
Seleziona tutti i prodotti e gli utenti che li hanno come preferiti:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
RIGHT JOIN
products ON users.fav = products.id"
Nota: Hannah e Michael, che non hanno un prodotto preferito, non sono inclusi nel risultato.