از دستور join برای گرفتن اطلاعات از دو یا تعداد بیشتری جدول استفاده می شود
اطلاعات مربوط به هر مکان یا شخص یا چیز را دسته بندی کرده در جداول مختلف ذخیره می کنند
باید فیلد یا فیلدهای کلیدی که مطمئن باشیم برای هر رکورد یکتاست در تمامی این جداول تکرار شود تا اتصال این جداول به هم با استفاده از این فیلدهای کلیدی انجام شود

مثال

جدول t1 را بصورت زیر در نظر بگیرید

id family name
10 torabi ali
11 hesami mahdi
12 usefi shahab
در این جدول فیلد id فیلد کلیدی می باشد به این معنی که هیچ دو رکوردی نمی توانند id یکسان داشته باشند

در ادامه جدولt2 را بصورت زیر در نظر بگیرید

p-id nomre o-id
10 18 1
10 20 2
11 16 3
12 17 4
در این جدول فیلد o-id فیلد کلیدی شده است ولی فیلد p-id را کلیدی نکرده ایم . اطلاعات نمره درسهای دانش اموزان را در این جدول قرار داده ایم به کمک p-id اتصال بین دو جدول بالا برقرار می شود

حال قبل از ادامه بحث باید دستورات مختلف برای اتصال جدولها به هم را نام برده و احتلافشان با یکدیگر را ذکر کنیم

join

 این دستور فقط سطرهایی را بر می گرداند که مطابق شرایط درخواستی ما برای اتصال جداول ، باشند

leftjoin

تمام رکوردهای جدول سمت چپ را بر می گرداند حتی اگر هیچ وجه مشترکی با هر رکورد جدول سمت راست نداشته باشند

 rightjoin

تمام رکوردهای جدول سمت راست را بر می گرداند حتی اگر هیچ وجه مشترکی با هر رکورد جدول سمت چپ نداشته باشند

 fulljoin

تمامی رکوردهایی را بر می گرداند که یک وجه مشترکی در تمامی جداول داشته باشند

 
inner join
 این دستور رکوردهایی را بر می گرداند که حداقل یک وجه مشترک با هم داشته باشند
 روش استفاده از دستور inner join
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
 - جلوی دستور select نام یا نامهای فیلدهایی را بنویسید که می خواهید محتوای انها را در خروجی مشاهده کنید
-  from : جلوی این دستور نام اولین جدول را بنویسید
-  inner join : جلوی این دستور نام جدول دوم را بنویسید
- on : جلوی این دستور شرطی را که بیان می کند که سطرهایی از دو جدول که دارای این شرط باشند کنار هم قرار می گیرند

مثال

دو جدول t1,t2 را با هم متصل نمائید . سطرهایی کنار هم قرار گیرند که دارای p-id مشترک باشند در این جدول موقتی می خواهیم نام و نمره دانش اموزان را مشاهده نمائیم

select  t1.name ,t2. nomre

from t1

inner join t2

on t1.p-id=t2.p-id;

 

id family name
10 torabi ali
11 hesami mahdi
12 usefi shahab
13 samadi jahan
p-id nomre o-id
10 18 1
10 20 2
11 16 3
12 17 4

 اولین سطر از جدول t1 با دو سطر اول از t2 بر اساس شرطی که جلوی on نوشته ایم تطبیق پیدا می کند پس به این شکل کنار هم قرار می گیرند که سطر اول از t1 یکبار در کنار سطر اول از t2 قرار می گیرند چون p-id یکسان دارند

و بار دیگر همین سطر از t1 در کنار سطر دوم از t2 قرار می گیرد چون p-id یکسان دارند

 

سطر دوم از t1 در کنار  سطر سوم از t2 قرار می گیرد چون p-id یکسان دارند
سطر سوم از t1 در کنار  سطر چهارم از t2 قرار می گیرد چون p-id یکسان دارند
پس جدول خروجی بصورت زیر خواهد بود :
nomre name
18 ali
20 ali
11 mahdi
12 shahab

 نکته مهم :

سطرهایی از دو جدول که هیچ تطابقی بینشان پیدا نمی شود در خروجی دیده نمی شوند مثل سطر چهارم در جدول t1 که چون هیچ تطابقی با سطرهای t2 ندارد یعنی p-id ان با p-id ها در جدول t2 مساوی نیست پس در جدول خروجی قرار نمی گیرد

 
left join

توجه :

در بعضی نرم افزارهای بانک اطلاعاتی به جای دستور join از دستور LEFT OUTER JOIN استفاده می شود

 تمامی سطرها را از جدول اول نشان می دهد  حتی اگر این سطرها با هیچ سطر دیگری از جدول دوم دارای فیلد مشترک نباشند .

مثال

فیلد name , nimre  تمامی سطرهایی از دو جدول t1 , t2 را نمایش دهید که سطرهای جدول اول یعنی t1 یا رابطه ای با سطرهای جدول دوم یعنی t2 داشته باشند یا اینکه نداشته باشند

select name , nomre

from t1

left join t2

on t1.p-id=t2.p-id;

 
nomre name
18 ali
20 ali
11 mahdi
17 shahab
  JAHAN
 همانطور که مشاهده کردید برای رکورد با نام JAHAN هیچ رکوردی در جدول T2 پیدا نشد که p-id یکسان داشته باشند ولی چون از left join استفاده نموده ایم این رکورد دیده می شود و مقدار nomre ان خالی می ماند
 
right join
 

توجه :

در بعضی نرم افزارهای بانک اطلاعاتی به جای دستور join از دستور right OUTER JOIN استفاده می شود

تمامی سطرها را از جدول دوم نشان می دهد  حتی اگر این سطرها با هیچ سطر دیگری از جدول اول دارای فیلد مشترک نباشند .

مثال

فیلد name , nimre  تمامی سطرهایی از دو جدول t1 , t2 را نمایش دهید که سطرهای جدول دوم  یعنی t2 یا رابطه ای با سطرهای جدول اول یعنی t1 داشته باشند یا اینکه نداشته باشند

 

select name , nomre

from t1

left join t2

on t1.p-id=t2.p-id;

جدول t1

id family name
10 torabi ali
11 hesami mahdi
12 usefi shahab
13 samadi jahan

جدول t2

p-id nomre o-id
10 18 1
10 20 2
11 16 3
16 17 4
nomre name
18 ali
20 ali
11 mahdi
17 shahab
 16  
در این جدول نتیجه ، برای سطری از جدول دوم که درارای p-id برابر 16 می باشد هیچ سطری از جدول اول پیدا نشد که دارای این p-id باشد ولی با این حال سطر ان مشاهده می شود ولی مقدار name ندارد 
  
full join
 اسن دستور تمامی سطرها را از دو جدول بر می گرداند انها که دارای وجه اشتراک هستند در کنار هم قرا ر می گیرند و انهایی هم که دارای وجه اشتراک در جدول دیگر نیستد با ز هم مشاهده خواهند شد

مثال

select name , nomre

from t1

full join t2

on t1.p-id=t2.p-id;

nomre name
18 ali
20 ali
11 mahdi
17 shahab
  jahan
 16  

 در این جدولها برای رکورد جهان از جدول t1 هیچ رکورد همتایی از جدول t2 پیدا نشد که در فیلد p-id مشترک باشند ولی باز هم نام ان در خروجی امده بدون نمره .

و برای رکورد اخر از جدولt2 هیچ همتایی از جدول t1 پیدا نشد که دارای فیلد p-id مشترک باشند ولی باز هم نمره ان دیده شد و لی بدون نام