Python MySQL Join

الحاق 2 یا چندین جدول

می‌توان سطرهای دو یا چندین جدول را بر اساس ستون مشترکی که بین آن‌ها است بوسیله دستور JOIN به هم ملحق کرد.

فرض کنید دو جدول به صورت زیر دارید.

جدول users:

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

این دو جدول بر اساس ستون fav از جدول users و ستون id از جدول products می‌توانند با هم ترکیب شوند.

در کد زیر دو جدول را با هم ترکیب کرده‌ایم تا محصول مورد علاقه هر فرد را مشاهده کنیم.


import mysql.connector
from config import username, password, host

mydb = mysql.connector.connect(
  host= host,
  user= username,
  password= password,
  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)

خروجی:

به جای INNERJOIN می‌توانید از JOIN استفاده کنید. نتیجه هر دو دستور یکسان است.

LEFT JOIN

در مثال بالا Hannah و Michael از نتیجه نهایی حذف شدند. زیرا INNER JOIN تنها رکوردهایی را نمایش می‌دهد که برای آن‌ها مطابقتی پیدا کند.

اگر می‌خواهید که همه افراد نمایش داده شوند، حتی اگر محصول مورد علاقه خود را انتخاب نکرده باشند، از LEFT JOIN استفاده کنید.


import mysql.connector
from config import username, password, host

mydb = mysql.connector.connect(
  host= host,
  user= username,
  password= password,
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "SELECT \
  users.name AS user, \
  products.name AS favorite \
  FROM users \
  LEFT JOIN products ON users.fav = products.id"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
    print(x)

خروجی:

RIGHT JOIN

اگر می‌خواهید تمامی محصولات و نفراتی که آن محصولات را انتخاب کرده‌اند برگردانده شود، حتی در صورتی که محصول توسط کسی انتخاب نشده باشد، از RIGHT JOIN استفاده کنید.


import mysql.connector
from config import username, password, host

mydb = mysql.connector.connect(
  host= host,
  user= username,
  password= password,
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "SELECT \
  users.name AS user, \
  products.name AS favorite \
  FROM users \
  RIGHT JOIN products ON users.fav = products.id"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
    print(x)

خروجی: