انواع دستورات Join در SQL با مثال

مقدمه

در پایگاه داده‌های رابطه‌ای، جداول مختلف به‌منظور حفظ یکپارچگی و کاهش افزونگی داده‌ها جدا از یکدیگر نگهداری می‌شوند. برای استخراج اطلاعات مرتبط از این جداول، باید از عملیات Join استفاده کنیم. SQL (Structured Query Language) مجموعه‌ای از دستورات قدرتمند برای ترکیب داده‌های چندین جدول از طریق Join فراهم می‌کند. در این مقاله آموزشی، به بررسی انواع Join در SQL همراه با مثال‌های عملی می‌پردازیم.

انواع Join در SQL

  1. INNER JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. FULL OUTER JOIN
  5. CROSS JOIN
  6. SELF JOIN

هر یک از این Joinها کاربرد خاص خود را دارند و بسته به نیاز، می‌توان از آنها برای ترکیب داده‌های جداول مختلف استفاده کرد.

1. INNER JOIN

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

مثال:

فرض کنید دو جدول Students و Courses داریم:

CREATE TABLE Students (
student_id INT,
name VARCHAR(100)
);

CREATE TABLE Courses (
student_id INT,
course_name VARCHAR(100)
);

داده‌های جدول Students:

student_id name
101 Ali Mohammadi
102 Sara Ahmadi

داده‌های جدول Courses:

student_id course_name
101 Math 101
103 Physics 101

دستور INNER JOIN برای ترکیب این جداول:

SELECT Students.student_id, Students.name, Courses.course_name
FROM Students
INNER JOIN Courses ON Students.student_id = Courses.student_id;

نتیجه:

student_id name course_name
101 Ali Mohammadi Math 101

در اینجا فقط رکوردهای مربوط به student_id 101 در هر دو جدول موجود است، بنابراین تنها همین رکورد نمایش داده می‌شود.

2. LEFT JOIN

LEFT JOIN تمام رکوردهای جدول سمت چپ (جدول اصلی) را بازمی‌گرداند و اگر رکوردی در جدول سمت راست نباشد، مقادیر تهی (NULL) در ستون‌های مربوط به آن نمایش داده می‌شود.

مثال:

SELECT Students.student_id, Students.name, Courses.course_name
FROM Students
LEFT JOIN Courses ON Students.student_id = Courses.student_id;

نتیجه:

student_id name course_name
101 Ali Mohammadi Math 101
102 Sara Ahmadi NULL

در اینجا، رکورد مربوط به student_id 102 در جدول Courses وجود ندارد، بنابراین مقدار course_name برای این دانشجو تهی است.

3. RIGHT JOIN

RIGHT JOIN مشابه LEFT JOIN است، اما تمام رکوردهای جدول سمت راست (Courses) را بازمی‌گرداند و مقادیر تطابق‌نیافته از جدول سمت چپ (Students) را با NULL پر می‌کند.

مثال:

SELECT Students.student_id, Students.name, Courses.course_name
FROM Students
RIGHT JOIN Courses ON Students.student_id = Courses.student_id;

نتیجه:

student_id name course_name
101 Ali Mohammadi Math 101
NULL NULL Physics 101

در اینجا، student_id 103 فقط در جدول Courses وجود دارد، بنابراین اطلاعات دانشجو برای این رکورد NULL نمایش داده شده است.

4. FULL OUTER JOIN

FULL OUTER JOIN ترکیبی از LEFT JOIN و RIGHT JOIN است. این نوع پیوست تمامی رکوردهای هر دو جدول را بازمی‌گرداند و اگر رکوردی در یکی از جداول تطابق نداشته باشد، مقادیر تهی (NULL) برای آن جدول نمایش داده می‌شود.

مثال:

SELECT Students.student_id, Students.name, Courses.course_name
FROM Students
FULL OUTER JOIN Courses ON Students.student_id = Courses.student_id;

نتیجه:

student_id name course_name
101 Ali Mohammadi Math 101
102 Sara Ahmadi NULL
NULL NULL Physics 101

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

5. CROSS JOIN

CROSS JOIN که به آن ضرب دکارتی نیز گفته می‌شود، تمامی ترکیبات ممکن از رکوردهای دو جدول را بازمی‌گرداند. تعداد رکوردهای حاصل، برابر است با حاصل ضرب تعداد رکوردهای هر دو جدول.

مثال:

SELECT Students.student_id, Students.name, Courses.course_name
FROM Students
CROSS JOIN Courses;

نتیجه:

student_id name course_name
101 Ali Mohammadi Math 101
101 Ali Mohammadi Physics 101
102 Sara Ahmadi Math 101
102 Sara Ahmadi Physics 101

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

6. SELF JOIN

SELF JOIN زمانی استفاده می‌شود که بخواهیم یک جدول را به خودش پیوست دهیم. معمولاً برای استخراج روابط درونی یک جدول استفاده می‌شود. این نوع پیوست نیاز به استفاده از alias دارد تا بتوان دو نسخه از همان جدول را در یک کوئری استفاده کرد.

مثال:

فرض کنید جدول Employees شامل مدیر هر کارمند نیز باشد:

CREATE TABLE Employees (
employee_id INT,
name VARCHAR(100),
manager_id INT
);

INSERT INTO Employees VALUES
(1, 'Ali Mohammadi', NULL),
(2, 'Sara Ahmadi', 1),
(3, 'Reza Hosseini', 2);

دستور SELF JOIN برای پیدا کردن مدیران هر کارمند:

SELECT E1.name AS employee, E2.name AS manager
FROM Employees E1
LEFT JOIN Employees E2 ON E1.manager_id = E2.employee_id;

نتیجه:

employee manager
Ali Mohammadi NULL
Sara Ahmadi Ali Mohammadi
Reza Hosseini Sara Ahmadi

در این مثال، SELF JOIN جدول Employees را به خودش پیوست داده تا مدیر هر کارمند را پیدا کند.

نتیجه‌گیری

Joinها در SQL ابزار قدرتمندی هستند که به شما امکان می‌دهند داده‌های جداول مختلف را به هم متصل کرده و به اطلاعات ترکیبی دسترسی پیدا کنید. با استفاده از انواع Join مانند INNER JOIN، LEFT JOIN، RIGHT JOIN، FULL OUTER JOIN، CROSS JOIN و SELF JOIN، می‌توانید داده‌های پراکنده در جداول مختلف را تجزیه و تحلیل کرده و گزارش‌های دقیق‌تری تهیه کنید.