SQL (تلفظ "ess-que-el") مخفف Structured Query Language به معنای زبان پرس وجوی ساخت یافته است. SQL برای برقراری ارتباط با یک دیتابیس یا پایگاه داده استفاده می شود. طبق گفته ی ANSI (موسسه ی استاندارد ملی آمریکا)، SQL یک زبان استاندارد برای سیستم مدیریت پایگاه داده های رابطه است. کوئری های SQL برای انجام کارهایی مانند بروزرسانی یا بازیابی داده ها از یک پایگاه داده استفاده می شود. برخی از سیستم های رایج مدیریت پایگاه داده های رابطه ای که از SQL استفاده می کنند عبارتند از: Oracle، Sybase، Microsoft SQL Server، Access، Ingres و .... اگرچه اکثر سیستم های پایگاه داده از SQL استفاده می کنند، اما اکثر آن ها دارای پسوندهای اختصاصی دیگری نیز هستند که معمولاً فقط در همان سیستم ها استفاده می شود. با این وجود، با استفاده از دستورات استاندارد SQL مانند"Select" ،"Insert" ،"Update" ، "Delete"، "Create" و "Drop" می توان اکثر کارهایی که برای ارتباط با پایگاه داده نیاز است را انجام داد. یکی دیگر از دستورات کاربردی و مهم SQL هنگام کار با جداول، دستور JOIN است که در ادامه این مقاله با آن آشنا می شویم.
معرفی دستور JOIN در SQL:
در زبان SQL، از دستور JOIN به منظور پیوند و ترکیب ردیف های دو یا چند جدول از طریق یک فیلد مشترک بین آن ها، استفاده می شود. این دستور به ویژه هنگامی مفید است که می خواهید داده های مرتبط را از بیش از یک جدول پرس وجو کرده و نتیجه ی معناداری کسب کنید. گاهی اوقات، این روابط ممکن است آشکار نباشند، اما می توان از طریق SQL و دستور JOIN آن ها را به روش های مختلفی ترکیب کرد و بر اساس شرایطی که شما آن ها را تعیین می کنید، نتایج مختلفی از ادغام جداول استخراج کنید.
انواع مختلف JOIN:
به طور کلی چهار نوع JOIN وجود دارد که عبارتند از:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
تصویر زیر مفهوم انواع JOIN را به خوبی نشان می دهد.
برای توضیح مفهوم انواع JOIN جدول های زیر را در نظر بگیرید.

Inner join در SQL:
Inner join ساده ترین نوع JOIN است که در آن هر سطر در یک جدول با تمام سطرهای جدول دیگر مطابقت دارد. به عبارت دیگر در این نوع JOIN، عمل JOIN و ترکیب ردیف تنها زمانی انجام می شود که شرط JOIN(تطابق سطرهای جداول)، TRUE ارزیابی شود. برای مثال، اگر شما یک عمل Inner join روی جداول Employee و Projects انجام دهید، تنها تاپل هایی که دارای مقادیر مطابق در هر دو جدول هستند، به عنوان خروجی تحویل داده می شوند.
سینتکس Inner join:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
INNER JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;مثال:
SELECT Employee.EmpID, Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
INNER JOIN Projects ON Employee.EmpID=Projects.EmpID;خروجی: 
Full join در SQL:
full outer join یا full join مجموعه ای از نتایج را در بر می گیرد که شامل تمام ردیف های همسان هر دو جدول، در صورت وجود، می باشد. در صورت عدم مطابقت، مقدار رکورد برابر با NULL خواهد بود.
سینتکس Full join:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
FULL JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;مثال:
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID
FROM Employee
FULL JOIN Projects
ON Employee.EmpID = Projects.EmpID;خروجی: 
LEFT JOIN در SQL:
LEFT JOIN یا LEFT OUTER JOIN همه ی ردیف های همسان از جدول سمت راست و هم چنین همه ی ردیف ها و سطرهای غیر همسان از جدول سمت چپ را باز می گرداند. به عبارت دیگر LEFT JOIN تمامی رکوردهای جدول سمت چپ و هم چنین آن دسته از رکوردهای جدول سمت راست که با جدول سمت چپ مطابقت دارند را برمی گرداند. هم چنین برای ستون های موجود در جدول سمت راست، در ردیف هایی که مطابق با شرایط JOIN نیستند، مقدار NULL بازگردانده می شود. نکته: جدول سمت چپ و راست با نام جداول ذکر شده در سمت چپ و راست کلمه ی کلیدی JOIN مشخص می شوند.
سینتکس LEFT JOIN:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
LEFT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;مثال:
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
LEFT JOIN
ON Employee.EmpID = Projects.EmpID ;خروجی: 
RIGHT JOIN در SQL:
RIGHT JOIN یا RIGHT OUTER JOIN همه ی ردیف های همسان از جدول سمت چپ و هم چنین همه ی ردیف ها و سطرهای غیر همسان از جدول سمت راست را باز می گرداند. به عبارت دیگر RIGHT JOIN تمامی رکوردهای جدول سمت راست و هم چنین آن دسته از رکوردهای جدول سمت چپ با که با جدول سمت راست مطابقت دارند را برمی گرداند. هم چنین برای ستون های موجود در جدول سمت چپ، در ردیف هایی که مطابق با شرایط JOIN نیستند، مقدار NULL بازگردانده می شود.
سینتکس RIGHT JOIN:
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
RIGHT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;مثال:
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
RIGHT JOIN
ON Employee.EmpID = Projects.EmpID;خروجی:
در ادامه به برخی از متداول ترین سوالات درباره JOIN پاسخ می دهیم.
natural join چیست و در چه مواقعی از آن استفاده می شود؟ پاسخ: natural join نیز یک عملیات JOIN است که برای ایجاد خروجی مبتنی بر ستون ها، به کار می رود. برای درک موقعیت هایی که از پیوند طبیعی استفاده می شود، باید تفاوت بین Natural Join و Inner Join را درک کنید.
تفاوت اصلی Natural Join و Inner Join در تعداد ستون های برگشتی است. به مثال زیر توجه کنید:
در مثال بالا، به وضوح مشخص است که تعداد ستون های برگشت یافته از Inner Join بیش تر از تعداد ستون های برگشت یافته از Natural Join است. بنابراین، اگر می خواهید یک خروجی، با تعداد ستون های کمتر داشته باشید، می توانید از Natural Join استفاده کنید.
[hook type=inline id=54][/hook]
hash join چیست و در چه مواقعی از آن استفاده می شود؟
پاسخ: hash join نیز یکی از انواع join است که برای ترکیب جداول بزرگ یا در مواردی که کاربر می خواهد تا بیش تر سطرهای جدول پیوست شده مورد استفاده قرار گیرد، استفاده می شود.
Self Join و Cross Join چیست؟ پاسخ: Self Join: Self Join نوعی از Join است که در آن یک جدول با خودش ترکیب می شود.
Cross Join :Cross Join نوعی از Join است که در آن عمل Join هر سطر از جدول به هر سطر از جدول دیگر اعمال می شود. همچنین، وقتی از شرط WHERE استفاده می شود، این نوع از JOIN به عنوان یک عضو INNER رفتار می کند و وقتی شرط WHERE موجود نباشد، مانند یک Cartesian product(ضرب دکارتی) رفتار می کند. جمع بندی: برای پیوند جداول در SQL از دستور JOIN استفاده می شود. خروجی و نتیجه ی این دستور که یک جدول مجزاست، در بسیاری موارد اطلاعات مفیدی در اختیار ما قرار می دهد. امیدواریم که از مطالعه ی این مقاله لذت برده باشید؛ خوشحال می شویم که نظرات خود را با ما به اشتراک بگذارید.
سلام . در MY SQL ما چیزی به نام FULL JOIN نداریم و برای این کار باید از یک LEFT JOIN و یک RIGHT JOIN استفاده کنیم و این دو رو با UNION با هم ترکیب کنیم .
همونطور که در مثال مقاله میبینید، FULL JOIN در SQL وجود داره و تمام ردیف های جدول سمت چپ (table1) و سمت راست (table2) رو فراخوانی میکنه. نتیجهای که به دست میاد، حاصل پیوند این دو جدول هست.
کلمه ی کلیدی FULL [OUTER] JOIN در RDBMS هایی مثل MS SQL و Postgre SQL وجود داره ولی در MY SQL این مورد با استفاده از یک LEFT JOIN و یک RIGHT JOIN و ترکیب نتایج این دو با استفاده از UNION قابل انجام هست .
اگر مستنداتی از وجود FULL JOIN در MY SQL هست بفرمایید در غیر این صورت خواهشا مقاله رو اصلاح بفرمایید . با تشکر .
حمید رضا جان کمی بیشتر مطالعه کن
حالا اگر بیش از دو جدول داشتیم باید چی کار کنیم ؟
سلام.
سوال بسیار خوبی پرسیدید.
یه راهکار اینه ک دو جدول رو با هم جوین کنید و نتیجه رو با جدول سوم جوین کنید. اما حالات بهینه تر هم داره که پیشنهاد میکنم این نمونه عملی از جوین میان سه جدول رو ببینید، خیلی کمک میکنه.
بسیار عالی این دستورات و ترکیب جدول ها با استفاده از اسکیوال من در اکسل و برای ترکیب اطلاعات شیت ها استفاده میکنم بسیار کاربردی است .
سپاس از اطلاعات مفید شما.
خوشحالیم مقاله براتون مفید بوده دوست عزیز :)
سلام خدا قوت
بهترين نوع ارائه براي موضوع بود كوتاه مختصر و مفـــيد.
ممنونم
خیلی مطلب مفیدی بود و بدون حاشیه سریع مطلب رو ارا ئه دادید ممنون
ممنون
واقعا عالی است، خوشحالیم که همچون خادمان مثل شما داریم.
سلام. اولا خیلی عالی توضیح میدین. ممنون
فقط یه مشکلی داشتم. من این کد رو زدم واسه ادغام:
$query=mysqli_query($conn," SELECT product_tbl.product_name, product_tbl.product_code, invoice_meta_tbl.item, invoice_meta_tbl.item_code, invoice_meta_tbl.price, invoice_meta_tbl.qty
FROM product_tbl LEFT JOIN
ON product_tbl.product_code = invoice_meta_tbl.item_code ")or die(mysqli_error($conn));
while($row=mysqli_fetch_array($query)){
$cnt=1;
$product_name=$row['product_name'];
$product_code=$row['product_code'];
$invoice_item=$row['item'];
$price=$row['price'];
$qty=$row['qty'];
$item_code=$row['item_code'];
ولی خروجی بهم این پیغام خطا رو میده :
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ON product_tbl.product_code = invoice_meta_tbl.item_code' at line 3
خیلی ممنون میشم راهنماییم بکنین.
درود
یکی از این دو تاپیک راه حل مشکلتون هست:
https://stackoverflow.com/questions/29156747/left-outer-join-with-where-clause
https://stackoverflow.com/questions/56767136/check-the-manual-that-corresponds-to-mariadb-server-version-for-the-right-syntax
ممنونم از توضیح خوب و روان شما
با اینکه من بلد بودم و استفاده میکردم اما روشن تر شدم.