انواع دستورات Join در SQL با مثال
مقدمه
در پایگاه دادههای رابطهای، جداول مختلف بهمنظور حفظ یکپارچگی و کاهش افزونگی دادهها جدا از یکدیگر نگهداری میشوند. برای استخراج اطلاعات مرتبط از این جداول، باید از عملیات Join استفاده کنیم. SQL (Structured Query Language) مجموعهای از دستورات قدرتمند برای ترکیب دادههای چندین جدول از طریق Join فراهم میکند. در این مقاله آموزشی، به بررسی انواع Join در SQL همراه با مثالهای عملی میپردازیم.
انواع Join در SQL
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL OUTER JOIN
- CROSS JOIN
- 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، میتوانید دادههای پراکنده در جداول مختلف را تجزیه و تحلیل کرده و گزارشهای دقیقتری تهیه کنید.