SQL Sorgulama dilinde birden fazla tabloyu birleştirme yada ilgili başka tablodan veri çekmek için Inner, Outer, Left, Right, Cross Join Segmentleri kullanılır.

Bunlar aşağıda belirtildiği şekilde kullanılır.


Inner Join


Çok basit olarak inner join  bir-e-bir join anlamına gelmektedir. İki tablonuz olduğunu düşünün TabloA da Alan1 adlı bir alanınız var bu alanda A,B,C değerleri var,
TabloB de Alan1 de ise A,B,K değerleri var.
Eğer iki tablo arasında inner join kurarsanız sonuç ta dönecek listede sadece A ve B değerleri olacaktır. Çünkü inner joinde yanlızca eşit olan kayıtlar döner.
01SELECT TabloA.Alan1 as TabloAAlan1 , TabloB.Alan1 as TabloBAlan1
02FROM TabloA INNER JOIN TabloB
03ON TabloA.Alan1 = TabloB.Alan1
04/*
05Kodun MSSQL de sade şekli şudur :
06*/
07SELECT TabloA.Alan1, TabloB.Alan1 as TabloBAlan1
08FROM TabloA , TabloB
09WHERE TabloA.Alan1 = TabloB.Alan1
10/*
11Dönen Sonuç :
12TabloAAlan1 TabloBAlan1
13A A
14B B
15*/

Outer Join

Çok basit olarak outer bir-e-çoklu join anlamına gelmektedir (MsSQL Server da çok-a-çoklu join de kurulabilmektedir). İki tablonuz olduğunu düşünün TabloA da Alan1 adlı bir alanınız var bu alanda A,B,C değerleri var, TabloB de Alan1 de ise A,B,K değerleri var.
Eğer iki tablo arasında outer join kuracaksınız ve sizin için TabloA daki tüm kayıtlar TabloB de ise sadece TabloA da bulunanlar gelir.
Left Outer Join
Join kelimesinin sol tarafındaki tabloyu baz alarak eklemek için kullanılır.
01SELECT TabloA.Alan1 as TabloAAlan1, TabloB.Alan1 as TabloBAlan1
02FROM TabloA LEFT OUTER JOIN TabloB
03ON TabloA.Alan1 = TabloB.Alan1
04/*
05Bu kodun MSSQL de sade şekli şudur :
06*/
07SELECT TabloA.Alan1 as TabloAAlan1, TabloB.Alan1 as TabloBAlan1
08FROM TabloA , TabloB
09WHERE TabloA.Alan1 *= TabloB.Alan1
10/*
11Dönen Sonuç :
12TabloAAlan1 TabloBAlan1
13A A
14B B
15C Null
16*/

Right Outer Join

Join kelimesinin sağ tarafındaki tabloyu baz alarak eklemek için kullanılır.
01SELECT TabloA.Alan1 as TabloAAlan1, TabloB.Alan1 as TabloBAlan1
02FROM TabloA RIGHT OUTER JOIN TabloB
03ON TabloA.Alan1 = TabloB.Alan1
04/*
05Bu kodun MSSQL de sade şekli şudur :
06*/
07SELECT TabloA.Alan1 as TabloAAlan1, TabloB.Alan1 as TabloBAlan1
08FROM TabloA , TabloB
09WHERE TabloA.Alan1 =* TabloB.Alan1
10/*
11Dönen Sonuç :
12TabloAAlan1 TabloBAlan1
13A A
14B B
15Null K
16*/
Full Outer Join (MySQL için Cross Outer Join)Her iki tablodaki tüm verileri getirmek için kullanılır.
01SELECT TabloA.Alan1 as TabloAAlan1, TabloB.Alan1 as TabloBAlan1
02FROM TabloA FULL OUTER JOIN TabloB
03ON TabloA.Alan1 = TabloB.Alan1
04/*
05Bu kodun MSSQL de sade şekli şudur :
06*/
07SELECT TabloA.Alan1 as TabloAAlan1, TabloB.Alan1 as TabloBAlan1
08FROM TabloA , TabloB
09WHERE TabloA.Alan1 =* TabloB.Alan1
10/*
11Dönen Sonuç :
12TabloAAlan1 TabloBAlan1
13A A
14B B
15Null K
16C Null
17*/
Join’ nin sade halinde kullanılan “*” karakteri ise sadece Ms SQL Server’a özeldir. Oracle da ise bu karakter yerine “(+)” işareti kullanılmaktadır ve alan isimlerin sonuna bir boşluk bırakarak yazılır.
Örnek olarak : WHERE TabloA.Alan1 = TabloB.Alan1 (+)
OUTER cümlesi kullanılmasada olur. (Left Join gibi)
Kolay Gelsin.

Alıntı Yeri : http://muzaffer.akyil.net/2008/02/23/makale/yazilim/sql/admin/inner-outer-left-right-crossfull-join-nedir.aspx