در بخش قبل استفاده از توابع و عبارات SQL برای پردازش مؤثرتر دادهها را آموختیم. در این بخش، با نحوه اتصال چند جدول در SQLite آشنا میشوید که به شما امکان میدهد دادههای موجود در جداول مختلف را به یکدیگر مرتبط کنید. استفاده از JOIN به شما کمک میکند تا اطلاعات مرتبط را در یک کوئری واحد دریافت کنید و نیاز به نوشتن کد اضافی برای ترکیب دادهها در پایتون کاهش یابد.
۶.۱. آشنایی با JOIN و انواع آن
در SQLite، انواع مختلفی از JOIN وجود دارد که به شما امکان میدهند دادههای مرتبط را از جداول مختلف انتخاب کنید. انواع اصلی JOIN شامل موارد زیر هستند:
- INNER JOIN: تنها رکوردهایی را که در هر دو جدول دارای تطابق هستند، برمیگرداند.
- LEFT JOIN: تمام رکوردهای جدول سمت چپ را برمیگرداند، حتی اگر تطابقی در جدول سمت راست وجود نداشته باشد.
- RIGHT JOIN: مانند LEFT JOIN عمل میکند، اما رکوردهای جدول سمت راست را برمیگرداند. (SQLite از RIGHT JOIN پشتیبانی نمیکند.)
- FULL JOIN: تمام رکوردها از هر دو جدول را برمیگرداند، حتی اگر تطابقی نداشته باشند. (SQLite از FULL JOIN نیز پشتیبانی نمیکند.)
۶.۲. اتصال جداول با INNER JOIN
فرض کنید که دو جدول داریم: جدول users که اطلاعات کاربران را ذخیره میکند و جدول orders که اطلاعات سفارشات را شامل میشود. میخواهیم تمام سفارشات همراه با اطلاعات کاربران مرتبط با آنها را نمایش دهیم. برای این کار از INNER JOIN استفاده میکنیم.
# اتصال به پایگاه داده
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
# اجرای INNER JOIN بین جداول users و orders
cursor.execute('''
SELECT users.name, orders.order_date, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id
''')
user_orders = cursor.fetchall()
for order in user_orders:
print(order)
# بستن اتصال
connection.close()
در اینجا، تمامی سفارشاتی که دارای کاربر مرتبط هستند (به شرطی که user_id در جدول orders برابر با id در جدول users باشد) برگردانده میشوند.
۶.۳. اتصال جداول با LEFT JOIN
برای دریافت تمام کاربران، حتی آنهایی که سفارشی ندارند، میتوانیم از LEFT JOIN استفاده کنیم. این نوع JOIN رکوردهای جدول users را برمیگرداند، حتی اگر کاربر سفارشی در جدول orders نداشته باشد.
# اتصال به پایگاه داده
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
# اجرای LEFT JOIN بین جداول users و orders
cursor.execute('''
SELECT users.name, orders.order_date, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id
''')
user_orders = cursor.fetchall()
for order in user_orders:
print(order)
# بستن اتصال
connection.close()
این کد تمامی کاربران را به همراه اطلاعات سفارشاتشان برمیگرداند. اگر کاربری سفارشی نداشته باشد، ستونهای مربوط به orders برای آن کاربر NULL خواهند بود.
۶.۴. مثالهای کاربردی JOIN در پایتون
در اینجا چند مثال کاربردی از JOIN ارائه شده است که میتواند در پروژههای واقعی مفید باشد:
- نمایش لیست کاربران و مجموع هزینههایشان:
cursor.execute('''
SELECT users.name, SUM(orders.amount) AS total_spent
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.name
''')
total_spent_per_user = cursor.fetchall()
- یافتن کاربران بدون سفارش:
cursor.execute('''
SELECT users.name
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE orders.user_id IS NULL
''')
users_without_orders = cursor.fetchall()
این مثالها به شما کمک میکنند تا کوئریهای پیچیدهتری ایجاد کرده و دادهها را به شیوهای کارآمدتر تحلیل کنید.
با یادگیری JOINها، اکنون میتوانید دادهها را از چند جدول به یکدیگر متصل کنید و دادههای جامعتر و مرتبطتری را در کوئریهای خود بازیابی کنید. این مهارت به شما کمک میکند تا ساختار پایگاه داده خود را بهینهسازی کرده و اطلاعات مرتبط را با هم ترکیب کنید.




پاسخها