Python MySQL'e Katılma
İki veya Daha Fazla Masaya Katılın
Bir JOIN deyimi kullanarak, iki veya daha fazla tablodaki satırları aralarındaki ilgili sütuna dayalı olarak birleştirebilirsiniz.
Bir "kullanıcılar" tablonuz ve bir "ürünler" tablonuz olduğunu düşünün:
kullanıcılar
{ 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:}
Ürün:% s
{ id: 154, name:
'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{
id: 156, name: 'Vanilla Dreams' }
Bu iki tablo, kullanıcı fav
alanı ve ürün alanı
kullanılarak birleştirilebilir id
.
Örnek
Kullanıcıların favori ürününün adını görmek için kullanıcılara ve ürünlere katılın:
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)
Not: INNER JOIN yerine JOIN kullanabilirsiniz. İkisi de size aynı sonucu verecektir.
SOL YÖNDEN KATILIM
Yukarıdaki örnekte, Hannah ve Michael sonuçtan hariç tutulmuştur, bunun nedeni INNER JOIN'in yalnızca eşleşmenin olduğu kayıtları göstermesidir.
Favori bir ürünü olmasa bile tüm kullanıcılara göstermek istiyorsanız, LEFT JOIN deyimini kullanın:
Örnek
Tüm kullanıcıları ve favori ürünlerini seçin:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
LEFT JOIN
products ON users.fav = products.id"
DOĞRU BİRLEŞTİR
Tüm ürünleri ve onları favori olarak gören kullanıcılar, hiçbir kullanıcı bunları favori olarak görmese bile iade etmek istiyorsanız, RIGHT JOIN ifadesini kullanın:
Örnek
Tüm ürünleri ve favorileri olan kullanıcı(lar)ı seçin:
sql = "SELECT \
users.name AS user,
\
products.name AS favorite \
FROM users \
RIGHT JOIN
products ON users.fav = products.id"
Not: Favori ürünü olmayan Hannah ve Michael sonuca dahil edilmemiştir.