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 استفاده کنید.
در فایل چیت شیت Sql server به بررسی مجموعه دستورات این نرم افزار مدیریت پایگاه داده پرداختیم
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 استفاده میشود. خروجی و نتیجهی این دستور که یک جدول مجزاست، در بسیاری موارد اطلاعات مفیدی در اختیار ما قرار میدهد. امیدواریم که از مطالعهی این مقاله لذت برده باشید؛ خوشحال میشویم که نظرات خود را با ما به اشتراک بگذارید.
۱۵ دیدگاه
محسن کلانتری۱۸ اردیبهشت ۱۴۰۳، ۰۸:۵۳
ممنونم از توضیح خوب و روان شما
با اینکه من بلد بودم و استفاده میکردم اما روشنتر شدم.
sasha shahsavar۱۷ بهمن ۱۴۰۲، ۰۹:۴۱
سلام. اولا خیلی عالی توضیح میدین. ممنون
فقط یه مشکلی داشتم. من این کد رو زدم واسه ادغام:
$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
عبدالملک عابر۰۳ آبان ۱۴۰۲، ۰۷:۱۹
واقعا عالی است، خوشحالیم که همچون خادمان مثل شما داریم.
۱۸ بهمن ۱۴۰۱، ۰۳:۰۲
ممنون
۲۸ دی ۱۴۰۰، ۱۸:۴۹
خیلی مطلب مفیدی بود و بدون حاشیه سریع مطلب رو ارا ئه دادید ممنون
۲۵ آذر ۱۴۰۰، ۰۶:۴۱
سلام خدا قوت
بهترين نوع ارائه براي موضوع بود كوتاه مختصر و مفـــيد.
ممنونم
سید احمد شمس العلما۱۲ آبان ۱۴۰۰، ۰۵:۲۸
بسیار عالی این دستورات و ترکیب جدولها با استفاده از اسکیوال من در اکسل و برای ترکیب اطلاعات شیتها استفاده میکنم بسیار کاربردی است .
سپاس از اطلاعات مفید شما.
Nazanin KarimiMoghaddam۱۲ آبان ۱۴۰۰، ۰۸:۰۷
خوشحالیم مقاله براتون مفید بوده دوست عزیز :)
ممد۱۳ اردیبهشت ۱۴۰۰، ۰۹:۰۴
حالا اگر بیش از دو جدول داشتیم باید چی کار کنیم ؟
نازنین کریمی مقدم۱۳ اردیبهشت ۱۴۰۰، ۱۰:۱۳
سلام.
سوال بسیار خوبی پرسیدید.
یه راهکار اینه ک دو جدول رو با هم جوین کنید و نتیجه رو با جدول سوم جوین کنید. اما حالات بهینهتر هم داره که پیشنهاد میکنم <a href="https://learnsql.com/blog/how-to-join-3-tables-or-more-in-sql/" target="_blank" rel="noopener nofollow ugc">این نمونه عملی از جوین میان سه جدول</a> رو ببینید، خیلی کمک میکنه.
Mohammad۲۱ فروردین ۱۳۹۹، ۱۰:۳۹
حمید رضا جان کمی بیشتر مطالعه کن
حمیدرضا۲۰ فروردین ۱۳۹۹، ۰۵:۲۳
کلمه ی کلیدی FULL [OUTER] JOIN در RDBMS هایی مثل MS SQL و Postgre SQL وجود داره ولی در MY SQL این مورد با استفاده از یک LEFT JOIN و یک RIGHT JOIN و ترکیب نتایج این دو با استفاده از UNION قابل انجام هست .
اگر مستنداتی از وجود FULL JOIN در MY SQL هست بفرمایید در غیر این صورت خواهشا مقاله رو اصلاح بفرمایید . با تشکر .
حمیدرضا۱۹ فروردین ۱۳۹۹، ۰۷:۳۲
سلام . در MY SQL ما چیزی به نام FULL JOIN نداریم و برای این کار باید از یک LEFT JOIN و یک RIGHT JOIN استفاده کنیم و این دو رو با UNION با هم ترکیب کنیم .
نازنین گودرزی۱۹ فروردین ۱۳۹۹، ۰۹:۵۸
همونطور که در مثال مقاله میبینید، FULL JOIN در SQL وجود داره و تمام ردیفهای جدول سمت چپ (table1) و سمت راست (table2) رو فراخوانی میکنه. نتیجهای که به دست میاد، حاصل پیوند این دو جدول هست.
راهنمای مقاله
معرفی دستور JOIN در SQL:
انواع مختلف JOIN:
Inner join در SQL:
Full join در SQL:
LEFT JOIN در SQL:
RIGHT JOIN در SQL:
natural join چیست و در چه مواقعی از آن استفاده میشود؟ پاسخ: natural join نیز یک عملیات JOIN است که برای ایجاد خروجی مبتنی بر ستونها، به کار میرود. برای درک موقعیت هایی که از پیوند طبیعی استفاده میشود، باید تفاوت بین Natural Join و Inner Join را درک کنید.
hash join چیست و در چه مواقعی از آن استفاده میشود؟
Self Join و Cross Join چیست؟ پاسخ: Self Join: Self Join نوعی از Join است که در آن یک جدول با خودش ترکیب میشود.
راهنما و فهرست مقاله
معرفی دستور JOIN در SQL:
انواع مختلف JOIN:
Inner join در SQL:
Full join در SQL:
LEFT JOIN در SQL:
RIGHT JOIN در SQL:
natural join چیست و در چه مواقعی از آن استفاده میشود؟ پاسخ: natural join نیز یک عملیات JOIN است که برای ایجاد خروجی مبتنی بر ستونها، به کار میرود. برای درک موقعیت هایی که از پیوند طبیعی استفاده میشود، باید تفاوت بین Natural Join و Inner Join را درک کنید.
hash join چیست و در چه مواقعی از آن استفاده میشود؟
Self Join و Cross Join چیست؟ پاسخ: Self Join: Self Join نوعی از Join است که در آن یک جدول با خودش ترکیب میشود.