Bazı durumlarda veritabanımızdaki iki tablodan birden veri almak durumunda kalabiliriz. Bu tür durumlarda join ifadesinden ve key ifadelerinden faydalanabiliriz. Öncelikle aşağıdaki "sirketler" ve "isciler" adlı tabloları inceleyelim.
| Sirket_ID |
Sirket_İSİM |
| 17 |
Alfemo Mobilya |
| 24 |
İstikbal Mobilya |
| 39 |
Konfor Mobilya |
| 48 |
Mekan Mobilya |
| İsci_ID |
İsci_İSİM |
İsci_TELEFON |
İsci_SİRKET |
| 192 |
Ahmet VURAL |
545 898 75 98 |
17 |
| 213 |
Selami TEK |
533 546 45 77 |
17 |
| 219 |
Vahdettin KOYUNCU |
542 569 52 52 |
24 |
| 225 |
Ahmet Şafak ERDÖNMEZ |
535 365 88 96 |
39 |
| 319 |
Burak CANKAZANÇ |
505 548 97 52 |
52 |
"sirketler" tablosundaki Sirket_ID sütunu "primary_key" yani birincil anahtar veri içerir. Bildiğiniz gibi birincil anahtar olan sütunlardaki veriler asla tekrarlanmaz. Yani "sirketler" tablosuna ne kadar veri girerseniz girin artık hiç bir şirket , Alfemo Mobilya'ya atanmış olan 17 nolu sirket_ID değerini alamaz. Aynı şekilde "isciler" tablosunda da İsci_ID sütunu bir "primary key" sütunudur. "isciler" tablosundaki isci_sirket sütunu , "sirketler" tablosundaki sireketlerin sirket_ID numaralarına isaret etmektedir. "isciler" tablosunda her ne kadar işçilerin çalıştıkları şirketlerin isimleri yazmasa da biz sirket idlerinin tutulduğu isci_sirket sütunu sayesinde her işçinin çalıştığı şirketin adını öğrenebiliriz. Bunun için kullanmamız gereken sql cümlesi ve elde edeceğimiz sonuç tablosu aşağıdaki gibi olacaktır.
select isciler.isci_isim , sirketler.sirket_isim from isciler , sirketler where sirketler.sirket_ID=isciler.isci_sirket
| İsci_İSİM |
Şirket_İSİM |
| Ahmet VURAL |
Alfemo Mobilya |
| Selami TEK |
Alfemo Mobilya |
| Vahdettin KOYUNCU |
İstikbal Mobilya |
| Ahmet Şafak ERDÖNMEZ |
Konfor Mobilya |
Aynı örnek üzerinden gidecek olursak Alfemo Mobilya'da çalışan işçileri ve telefon numaralarını elde etmek için kullanmamız gereken sql cümlesi ve elde edeceğimiz sonuç şu şekilde olacaktır.
select isciler.isci_isim , isciler.isci_telefon from isciler,sirketler where sirketler.sirket_ID=isciler.isci_sirket and sirketler.sirket_isim='Alfemo Mobilya'
INNER JOIN
inner join ifadesi , her iki tablodan da şartların doğrulandığı verileri sıralar. Bu yönü ile yukarıdaki sql ifadeleri ile hemen hemen aynı işe yaramaktadır.
select isciler.isci_isim , sirketler.sirket_isim from isciler inner join sirketler on sirketler.sirket_ID=isciler.isci_sirket
| İsci_İSİM |
Şirket_İSİM |
| Ahmet VURAL |
Alfemo Mobilya |
| Selami TEK |
Alfemo Mobilya |
| Vahdettin KOYUNCU |
İstikbal Mobilya |
| Ahmet Şafak ERDÖNMEZ |
Konfor Mobilya |
LEFT JOIN
left join ifadesi , on ifadesinden sonra gelen koşulla eşleşsin , eşleşmesin birinci tablodaki tüm verileri listeler.
select isciler.isci_isim , sirketler.sirket_isim from isciler left join sirketler on sirketler.sirket_ID=isciler.isci_sirket
RIGHT JOIN
right join ifadesinin tam tersi olarak , eşleşmesi olsun olmasın ikinci tablodaki tüm verileri listeler.
select isciler.isci_isim , sirketler.sirket_isim from isciler right join sirketler on sirketler.sirket_ID=isciler.isci_sirket
| İsci_İSİM |
Şirket_İSİM |
| Ahmet VURAL |
Alfemo Mobilya |
| Selami TEK |
Alfemo Mobilya |
| Vahdettin KOYUNCU |
İstikbal Mobilya |
| Ahmet Şafak ERDÖNMEZ |
Konfor Mobilya |
| Burak CANKAZANÇ |
|
Bu örnekte , Burak Cankazanç adındaki işçinin şirketi 52 numara ile gösteriliyor. Oysa şirketler tablosunda sirket_ID değeri 52 olan bir şirket kayıtlı değil. Ancak right join ifadesi kullanıldığı için Burak Cankazanc'ın kaydı listeleniyor ancak şirket ismi gösterilemiyor.