Připojte se k Pythonu MySQL
Připojte se ke dvěma nebo více stolům
Pomocí příkazu JOIN můžete kombinovat řádky ze dvou nebo více tabulek na základě souvisejícího sloupce mezi nimi.
Zvažte, že máte tabulku „uživatelů“ a tabulku „produktů“:
uživatelů
{ 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:}
produkty
{ id: 154, name:
'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{
id: 156, name: 'Vanilla Dreams' }
Tyto dvě tabulky lze kombinovat pomocí pole uživatele fav
a pole produktů
id
.
Příklad
Připojte se k uživatelům a produktům, abyste viděli název oblíbeného produktu uživatelů:
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)
Poznámka: Místo INNER JOIN můžete použít JOIN. Obě vám poskytnou stejný výsledek.
PŘIPOJIT SE VLEVO
Ve výše uvedeném příkladu byli Hannah a Michael vyloučeni z výsledku, protože INNER JOIN zobrazuje pouze záznamy, kde existuje shoda.
Pokud chcete ukázat všem uživatelům, i když nemají oblíbený produkt, použijte příkaz LEFT JOIN:
Příklad
Vyberte všechny uživatele a jejich oblíbený produkt:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
LEFT JOIN
products ON users.fav = products.id"
SPRÁVNÉ PŘIPOJENÍ SE
Pokud chcete vrátit všechny produkty a uživatele, kteří je mají jako své oblíbené, i když je žádný uživatel nemá jako své oblíbené, použijte příkaz RIGHT JOIN:
Příklad
Vyberte všechny produkty a uživatele, kteří je mají jako oblíbené:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
RIGHT JOIN
products ON users.fav = products.id"
Poznámka: Hannah a Michael, kteří nemají žádný oblíbený produkt, nejsou do výsledku zahrnuti.