در بخش قبل استفاده از توابع و عبارات 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ها، اکنون میتوانید دادهها را از چند جدول به یکدیگر متصل کنید و دادههای جامعتر و مرتبطتری را در کوئریهای خود بازیابی کنید. این مهارت به شما کمک میکند تا ساختار پایگاه داده خود را بهینهسازی کرده و اطلاعات مرتبط را با هم ترکیب کنید.
پاسخها