Python MySQL JOIN

Puede combinar filas de dos o más tablas, en función de una columna relacionada entre ellas, mediante el uso de una instrucción JOIN.

Considere que tiene una tabla de «usuarios» y una tabla de «productos»:

{ id: 1, nombre: 'Agus', fav: 154},
{ id: 2, nombre: 'Javi', fav: 154},
{ id: 3, nombre: 'Ana', fav: },
{ id: 4, nombre: 'Ramón', fav:}

Productos

{ id: 200, nombre: 'Vino tinto' },
{ id: 201, nombre: 'Vino Blanco' },
{ id: 202, nombre: 'Vino rosado' }

Estas dos tablas se pueden combinar utilizando el campo de favoritos de los usuarios y el campo de identificación de los productos.

Ejemplo

Únase a los usuarios y productos para ver el nombre del producto favorito de los usuarios:

import mysql.connector

mydb = mysql.connector.connect(
  host= "localhost",
  user= "tu usuario",
  passwd=" "tu contraseña"",
  database= "tu bbdd"
)

mycursor = mydb.cursor()

sql =  "SELECT \
  clientes.nombre AS nombre_cliente, \
  producto.nombre AS producto_consumido \
  FROM clientes \
  INNER JOIN producto ON clientes.fav = producto.id"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

Nota: Puedes usar JOIN en lugar de INNER JOIN. Ambos te darán el mismo resultado.


LEFT JOIN

En el ejemplo anterior, Ramón y Ana se excluyeron del resultado, porque INNER JOIN solo muestra los registros donde hay una coincidencia.

Si desea mostrar a todos los usuarios, incluso si no tienen un producto favorito, use la declaración LEFT JOIN:

Ejemplo

Selecciona todos los clientes y su producto favorito:

 sql = "SELECT \
  cliente.nombre AS nombre_cliente, \
  producto.name AS Producto_consumido \
  FROM clientes \
  LEFT JOIN producto ON cliente.fav = producto.id"

RIGHT JOIN

Si desea devolver todos los productos, y los usuarios que los tienen como favoritos, incluso si ningún usuario los tiene como favoritos, use la declaración RIGHT JOIN:

Ejemplo

Seleccione todos los productos y los usuarios que los tengan como favoritos:

sql = "SELECT \
  clientes.nombre AS nombre_cliente, \
  producto.nombre AS producto_consumido \
  FROM clientes \
  RIGHT JOIN producto ON clientes.fav = producto.id"