Python MySQL Join
Junte duas ou mais tabelas
Você pode combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas, usando uma instrução JOIN.
Considere que você tem uma tabela de "usuários" e uma tabela de "produtos":
Comercial
{ 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:}
produtos
{ id: 154, name:
'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{
id: 156, name: 'Vanilla Dreams' }
Essas duas tabelas podem ser combinadas usando o campo de usuários e o fav
campo de produtos
id
.
Exemplo
Junte-se a usuários e produtos para ver o nome do produto favorito dos usuários:
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: Você pode usar JOIN em vez de INNER JOIN. Ambos darão o mesmo resultado.
ASSOCIAÇÃO À ESQUERDA
No exemplo acima, Hannah e Michael foram excluídos do resultado, isso porque INNER JOIN mostra apenas os registros onde há correspondência.
Se você quiser mostrar todos os usuários, mesmo que eles não tenham um produto favorito, use a instrução LEFT JOIN:
Exemplo
Selecione todos os usuários e seus produtos favoritos:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
LEFT JOIN
products ON users.fav = products.id"
JUNÇÃO DIREITA
Se você deseja devolver todos os produtos e os usuários que os têm como favoritos, mesmo que nenhum usuário os tenha como favorito, use a instrução RIGHT JOIN:
Exemplo
Selecione todos os produtos e o(s) usuário(s) que os têm como favoritos:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
RIGHT JOIN
products ON users.fav = products.id"
Nota: Hannah e Michael, que não têm nenhum produto favorito, não estão incluídos no resultado.