در حال حاضر در حال تماشای این مورد هستید آموزش SQL در Microsoft Access: انواع JOIN (Inner, Left, Right) و اتصال چند جدول
نحوه ترکیب جداول داده با استفاده از دستورات JOIN در پایگاه داده اکسس.

آموزش SQL در Microsoft Access: انواع JOIN (Inner, Left, Right) و اتصال چند جدول

در آموزش قبلی یاد گرفتیم که چگونه با استفاده از کلیدهای اصلی و خارجی، بین جداول ارتباط یک‌به‌چند و چندبه‌چند ایجاد کنیم. اما یک سوال اساسی باقی ماند: پایگاه داده ما اکنون تکه‌تکه شده است؛ مشتریان در یک جدول، سفارشات در جدول دوم و محصولات در جدول سوم هستند.

چگونه می‌توانیم این تکه‌های پازل را کنار هم قرار دهیم و یک گزارش یکپارچه (مثلاً نام مشتری در کنار نام محصولی که خریده) تهیه کنیم؟

پاسخ این سوال، قلب تپنده‌ی زبان SQL است: دستور JOIN.

دستور JOIN چیست؟

کلیدهای خارجی (Foreign Keys) به پایگاه داده قوانین را دیکته می‌کنند (مثلاً می‌گویند یک سفارش حتماً باید متعلق به یک مشتری معتبر باشد). اما وقتی می‌خواهیم داده‌ها را برای خواندن و گزارش‌گیری فراخوانی کنیم، به دستوری نیاز داریم که این جداول را به صورت موقت به هم بچسباند. دستور JOIN دقیقاً همین کار را می‌کند: رکوردهای دو یا چند جدول را بر اساس یک فیلد مشترک (معمولاً کلید اصلی و خارجی) با هم ترکیب می‌کند.

در Microsoft Access (و به طور کلی در SQL)، سه نوع JOIN بسیار پرکاربرد داریم که در ادامه آن‌ها را کالبدشکافی می‌کنیم.

۱. اشتراک قطعی: INNER JOIN

پرکاربردترین نوع اتصال است. INNER JOIN فقط و فقط رکوردهایی را برمی‌گرداند که در هر دو جدول معادل داشته باشند. اگر این اتصال را شبیه به نمودار ون (Venn Diagram) در ریاضیات در نظر بگیرید، INNER JOIN دقیقاً بخش اشتراک دو دایره است.

مثال کاربردی: می‌خواهیم لیست مشتریانی که سفارش ثبت کرده‌اند را همراه با تاریخ سفارششان ببینیم.

SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
INNER JOIN Orders 
ON Customers.CustomerID = Orders.CustomerID;

تحلیل کد:

  • بخش FROM Customers INNER JOIN Orders: به اکسس می‌گوید جدول مشتریان را با جدول سفارشات پیوند بزن.
  • بخش ON ...: شرط اتصال را مشخص می‌کند. به زبان ساده یعنی: «رکوردها را جایی به هم وصل کن که آیدی مشتری در جدول مشتریان، دقیقاً برابر با آیدی مشتری در جدول سفارشات باشد».

نکته: مشتریانی که تا به حال هیچ سفارشی نداده‌اند، در این خروجی نمایش داده نمی‌شوند.

۲. اولویت با جدول سمت چپ: LEFT JOIN

گاهی اوقات ما همه رکوردهای جدول اول (سمت چپ) را می‌خواهیم، حتی اگر در جدول دوم (سمت راست) هیچ رکوردی برای آن‌ها ثبت نشده باشد. اینجاست که LEFT JOIN (یا LEFT OUTER JOIN) به کار می‌آید.

مثال کاربردی: می‌خواهیم لیست تمام مشتریان را ببینیم، و اگر سفارشی داشته‌اند تاریخ آن را هم روبروی نامشان درج کنیم. اگر سفارشی نداشته‌اند، جای آن خالی (NULL) بماند.

SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
LEFT JOIN Orders 
ON Customers.CustomerID = Orders.CustomerID;

این کوئری برای پیدا کردن «مشتریان غیرفعال» (کسانی که فیلد سفارششان خالی است) فوق‌العاده کاربردی است و در تحلیل داده به شدت استفاده می‌شود.

۳. اولویت با جدول سمت راست: RIGHT JOIN

عملکرد RIGHT JOIN دقیقاً برعکس LEFT JOIN است. تمام رکوردهای جدول دوم (سمت راست) را می‌آورد و فقط رکوردهای مشترک از جدول اول (سمت چپ) را به آن می‌چسباند.

SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
RIGHT JOIN Orders 
ON Customers.CustomerID = Orders.CustomerID;

واقعیت تخصصی: در دنیای واقعی برنامه‌نویسی، بسیار کم از RIGHT JOIN استفاده می‌شود، زیرا برنامه‌نویسان ترجیح می‌دهند جای جداول را در کد عوض کنند و باز هم از LEFT JOIN استفاده کنند تا خوانایی کد بالا برود. اما برای درک کامل منطق SQL، شناخت آن ضروری است.

خلاصه بصری: درک JOIN با نمودار ون

برای اینکه تفاوت این سه نوع اتصال برای همیشه در ذهنتان بماند، بهترین راه استفاده از نمودار ون (Venn Diagram) است. در تصویر زیر، فرض کنید هر دایره نشان‌دهنده یک جدول است. بخش‌های برجسته و رنگی نشان می‌دهند که در هر دستور JOIN، دقیقاً کدام بخش از داده‌ها (رکوردهای مشترک یا کل رکوردهای یک سمت) در خروجی نهایی واکشی می‌شوند:

نمودار ون برای آموزش انواع JOIN در SQL شامل Inner، Left و Right
مقایسه بصری عملکرد INNER JOIN، LEFT JOIN و RIGHT JOIN در SQL با استفاده از نمودار ون.

کابوس پرانتزها در Access (اتصال بیش از دو جدول)

اگر از دیتابیس‌هایی مثل SQL Server یا MySQL استفاده کنید، اتصال سه جدول پشت سر هم بسیار ساده است و فقط کافیست دستورات JOIN را زیر هم بنویسید. اما موتور پردازشی Microsoft Access (معروف به ACE/JET) در این زمینه به شدت سخت‌گیر است!

در اکسس، هر عملیات JOIN فقط می‌تواند دو خروجی را با هم ترکیب کند. بنابراین وقتی پای جدول سوم به میان می‌آید، باید با استفاده از پرانتز () به اکسس بگویید اول کدام دو جدول را با هم ترکیب کند، و سپس نتیجه‌ی آن‌ها را با جدول سوم پیوند بزند.

بیایید به همان کوئریِ گیج‌کننده‌ای که در انتهای مقاله رابطه چندبه‌چند دیدیم برگردیم و آن را کالبدشکافی کنیم:

SELECT 
    Orders.OrderID, 
    Products.ProductName, 
    OrderDetails.Quantity
FROM 
    (Orders INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID)
    INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID;

چه اتفاقی افتاد؟

  1. اکسس ابتدا وارد پرانتز می‌شود: جدول Orders و جدول واسط OrderDetails را به هم وصل می‌کند.
  2. این ترکیب در حافظه به عنوان یک «جدول موقتِ واحد» در نظر گرفته می‌شود.
  3. حالا اکسس بیرون از پرانتز می‌آید و این جدول موقت را با جدول Products پیوند (INNER JOIN) می‌زند.

هشدار: اگر در اکسس پرانتزها را برای اتصال سه جدول یا بیشتر فراموش کنید، با خطای Syntax error in JOIN operation مواجه خواهید شد. یکی از بزرگترین چالش‌های مبتدیان در اکسس همین خطاست!

نگاهی به پشت صحنه: JOIN در محیط Design View

اگر تمام این کدها برایتان پیچیده به نظر می‌رسد، نگران نباشید. وقتی در محیط Query Design اکسس جداول را اضافه می‌کنید و فیلدها را به سمت هم می‌کشید (Drag & Drop)، اکسس خطوط ارتباطی ایجاد می‌کند.

اگر روی این خطوط ارتباطی دوبار کلیک کنید (پنجره Join Properties)، سه گزینه می‌بینید:

  1. نمایش فقط رکوردهای مشترک (همان INNER JOIN)
  2. نمایش همه رکوردها از جدول اول (همان LEFT JOIN)
  3. نمایش همه رکوردها از جدول دوم (همان RIGHT JOIN)

وقتی شما این گزینه‌ها را تغییر می‌دهید، اکسس به صورت خودکار کدهای SQL که در این مقاله یاد گرفتیم را در پس‌زمینه برایتان می‌نویسد!

در آموزش بعدی از این سرفصل، به سراغ عملیات ویرایش و حذف داده‌ها خواهیم رفت تا یاد بگیریم چگونه با استفاده از دستورات UPDATE و DELETE اطلاعات جداولمان را تغییر داده یا رکوردهای اضافی را با استفاده از کوئری حذف کنیم.

آیا می‌دانید:

یادگیری SQL در اکسس شما را قادر می‌سازد تا به راحتی داده‌ها را از جداول مختلف استخراج و تحلیل کنید. از مزایای استفاده از SQL در اکسس می‌توان به امکان طراحی کوئری‌های پیشرفته برای گزارش‌گیری اشاره کرد. SQL می‌تواند داده‌های پیچیده را فیلتر کرده و به شما کمک کند تا تحلیل‌های عمیق‌تری انجام دهید. همچنین، این زبان امکان ترکیب داده‌های مختلف و ایجاد گزارش‌های دقیق را در اختیار شما قرار می‌دهد که برای مدیریت بهتر داده‌ها بسیار مفید است.

دیدگاهتان را بنویسید