منبع اصلی نوشتار زیر در این لینک قرار دارد

آموزش کار با MySQL در پایتون؛ بخش دوازدهم، انجام join روی دو یا چند جدول

به دوازدهمین و آخرین قسمت از سری مطالب آموزش استفاده از سیستم مدیریت پایگاه داده MySQL در پایتون، خوش آمدید!

بخش قبلی این سری آموزشی، در این صفحه منتشر شده است: آموزش کار با MySQL در پایتون؛ بخش یازدهم، محدود کردن تعداد نتایج

در این بخش یکی از پرکاربرد ترین موارد در نوشتن برنامه کاربردی پایگاه داده یعنی انجام join روی جداول را بررسی می کنیم و در زبان پایتون برای این کار کدنویسی می کنیم.

ادغام دو یا چند جدول در MySQL و پایتون

شما می توانید ردیف هایی از دو یا چند جدول را با استفاده ستون (های) مشترک میان آن ها ترکیب کنید و این کار به طور کلی با دستور

JOIN
انجام می پذیرد. قبلاً در اوپن مایند، در یک مطلب مفصل تر انواع join در زبان SQL را بررسی کرده ایم که پیشنهاد می کنیم قبل از ادامه این مطلب حتماً آن را مطالعه کنید.

حالا بیایید دو جدول “users” و “genres” را با مقادیر زیر در نظر بگیرید.

{ id: 1, name: 'Hamed', fav: 154},
{ id: 2, name: 'Farhad', fav: 154},
{ id: 3, name: 'Raadmaan', fav: 155},
{ id: 4, name: 'Borzoo', fav:},
{ id: 5, name: 'Kurosh', fav:}

{ id: 154, name: 'Jazz' },
{ id: 155, name: 'Country' },
{ id: 156, name: 'Rock and roll' }

حالا می خواهیم این دو جدول را توسط ستون های

fav
از users و
id
از genres را با هم ترکیب کنیم که ببینیم نام ژانر موزیکی که هر کاربر دوست دارد چیست. به کد زیر دقت کنید.

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  passwd="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

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

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

در کوئری بالا می توانستیم به جای INNER JOIN از JOIN استفاده کنیم و در واقع کلمه INNER بی تاثیر است که این موضوع در همان مطلب انواع join در زبان SQL هم توضیح داده شده است.

انجام LEFT JOIN

در مثال بالا برزو و کورش در نتیجه ادغام و اجرای کوئری ظاهر نمی شوند. چرا که در واقع کد ژانر محبوب شان برای آن ها مشخص نشده است و INNER JOIN تنها ردیف هایی را نشان می دهد دقیقاً مقدار آن ها در ستون مشترک مشخص شده، برابر باشد (هم مقادیر موجود باشد و هم برابر).

حالا اگر بخواهیم تمام کاربران، چه با داشتن مقدار برابر در ستون مشخص شده از جدول genres و چه غیر آن، در نتیجه کوئری باشند چه؟ راه حل در استفاده از LEFT JOIN به جای INNER JOIN است. به کوئری زیر دقت کنید.

این کوئری تمام کاربران و ژانرهای مورد علاقه شان را از جدول ترکیب آن ها به عنوان نتیجه بر می گرداند.

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

انجام RIGHT JOIN

و اما با استفاده از RIGHT JOIN می توانیم تمام ژانرها را در خروجی کوئری داشته باشیم حتی اگر هیچ کاربری آن ها را انتخاب نکرده باشد (مقدار برابری با id آن ها در ستون fav کاربران پیدا نشود).

به کوئری زیر دقت کنید. نتیجه این کوئری تنها کاربرانی که کد ژانر مورد علاقه آن ها موجود و در جدول ژانرها باشد و تمام ژانرها را شامل می شود (برعکس LEFT JOIN نام برزو و کورش که نام ژانر مورد علاقه شان را انتخاب نکرده اند در خروجی نیست).

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

 

خب، تمام شد! در این سری آموزشی سعی بر رعایت اختصار بود. امیدواریم که مطالعه آموزش های این سری ایده های کافی برای شروع برنامه نویسی پایگاه داده در پایتون را به شما داده باشد. به امید موفقیت! 🙂

 

 



برچسب ها :