Python MySQL Sammanfoga

Kombinera två eller fler tabeller

Du kan använda JOIN-satsen för att kombinera rader från två eller flera tabeller baserat på relaterade kolonner.

Anta att du har "users"-tabellen och "products"-tabellen:

users

{ 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:}

products

{ id: 154, name: 'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{ id: 156, name: 'Vanilla Dreams' }

Du kan använda users fav fält och products id fält för att kombinera dessa tabeller.

Exempel

Kombinera användare och produkt, visa användarens favoritproduktnamn:

import mysql.connector
mindb = mysql.connector.connect(
  host="localhost",
  user="dittanvändarnamn",
  passwd="dittlösenord",
  database="mindatabase"
)
mincursor = mindb.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)

Kör Exempel

Kommentar:Du kan använda JOIN istället för INNER JOIN. Du kommer att få samma resultat.

LEFT JOIN

I föregående exempel exkluderas Hannah och Michael från resultaten eftersom INNER JOIN bara visar matchande poster.

Om du vill visa alla användare, även om de inte har några favoritprodukter, använd LEFT JOIN-satsen:

Exempel

Välj alla användare samt deras favoritprodukter:

sql = "SELECT \

  users.name AS user, \

  products.name AS favorite \

  FROM users \

  LEFT JOIN products ON users.fav = products.id"

Kör Exempel

RIGHT JOIN

Om du vill returnera alla produkter samt användare som gillar dem, även om det inte finns några användare som gillar dessa produkter, använd RIGHT JOIN-satsen:

Exempel

Välj alla produkter samt användare som gillar dem:

sql = "SELECT \

  users.name AS user, \

  products.name AS favorite \

  FROM users \

  RIGHT JOIN products ON users.fav = products.id"

Kör Exempel

Kommentar:Hannah och Michael, som inte är intresserade av några produkter, är inte inkluderade i resultaten.