Bazen birden fazla tablodan bilgi çekmemiz gerekebilir. Birbirleri ile ilişkisi olan bu tablolar joinlerle birleştirmeler yapılarak gerekli alanlar alınabilir. Joinler:
Kod:
1. Inner join
2. Outer join
a. Left join
b. Rigth join
c. Full join
3. Cross join
Şimdi örnek ile anlamaya çalışalım. İki tane tablomuz olsun, Bolum ve Ogrenci adında. Bolum tablosunda bir fakültedeki bölümler tutulsun ve alan olarak BolumNo ve BolumAdi olarak iki tane alanı olsun. Diğer tablomuzda ise her bölümde oluyan öğrencilerin listesi tutulsun. Buraya yazılacak BolumNo, Bolum tablosundaki BolumNo ile aynı olur.
Kod:
Bolum:
BolumNo int
BolumAdi varchar
Ogrenci:
BolumNo int
OgrNo int
OgrAdi varchar
Tablolardaki veriler ise şu şekilde olsun:
BÖLÜM TABLOSU:
Kod:
BolumNo BolumAdi
1 Bilgisayar Mühendisliği
2 Çevre Mühendisliği
3 Elektronik Mühendisliği
4 Mimarlık
5 Şehir ve Bölge Planlama
OGRENCI TABLOSU:
Kod:
BolumNo OgrNo OgrAdi
1 1 Ahmet İnce
1 2 Ayhan Güzel
1 3 Sevim Coşkun
2 4 Gülsüm Sever
2 5 Zeki Çalışkan
3 6 Ayşe Toprak
4 7 Ahmet Gül
Şimdi gelelim yukarda saydığımız joinlere göre bu iki tabloyu nasıl birleştirebiliriz ve nasılsonuçlar elde edebiliriz:
1.INNER JOIN:
Her iki tabloda da, birleştirdiğimiz alana göre, mevcut olan kayıtları getirir. Yani bu iki tabloda ortak olan alnımız BolumNo olduğu için birleştirme koşulumuz BolumNo’ya göre yapılacak ve her iki tabloda da kayıtlı olan bölümler gelecektir sonuç olarak.
SQL cümlemiz:
Kod:
SELECT Bolum.BolumNo,Bolum.BolumAdi,Ogrenci.OgrNo,Ogrenci.OgrAdi
FROM Bolum INNER JOIN
Ogrenci ON Bolum.BolumNo = Ogrenci.BolumNo
Çıkan sonuç:
Kod:
BolumNo BolumAdi OgrNo OgrAdi
1 Bilgisayar Mühendisliği 1 Ahmet İnce
1 Bilgisayar Mühendisliği 2 Ayhan Güzel
1 Bilgisayar Mühendisliği 3 Sevim Coşkun
2 Çevre Mühendisliği 4 Gülsüm Sever
2 Çevre Mühendisliği 5 Zeki Çalışkan
3 Elektronik Mühendisliği 6 Ayşe Toprak
4 Mimarlık 7 Ahmet Gül
Görüldüğü üzere, Ogrenci tablosunda, Bolum tablosunda bulunan 5 numaralı bölüme (Şehir ve Bölge Planlama) ait herhangi bir kayıt bulunmadığından o satır gelmez.
2. OUTER JOIN
a. Left join: İlk tablodaki (yani soldaki) bütün kayıtlar, ikinci tabloda ise ilk tablodaki ortak alana (BolumNo) göre uyuşan kayıtlar gelir. Eğer ikinci tabloda ilk tablodaki BolumNo larının tamamı yoksa,olmayan o satırlar için ikinci Tablodaki alanlar null olarak gelir.
SQL cümlemiz:
Kod:
SELECT Bolum.BolumNo, Bolum.BolumAdi, Ogrenci.OgrNo, Ogrenci.OgrAdi
FROM Bolum LEFT OUTER JOIN
Ogrenci ON Bolum.BolumNo = Ogrenci.BolumNo
Çıkan sonuç:
Kod:
BolumNo BolumAdi OgrNo OgrAdi
1 Bilgisayar Mühendisliği 1 Ahmet İnce
1 Bilgisayar Mühendisliği 2 Ayhan Güzel
1 Bilgisayar Mühendisliği 3 Sevim Coşkun
2 Çevre Mühendisliği 4 Gülsüm Sever
2 Çevre Mühendisliği 5 Zeki Çalışkan
3 Elektronik Mühendisliği 6 Ayşe Toprak
4 Mimarlık 7 Ahmet Gül
5 Şehir ve Bölge Planlama Null Null
(Şehir ve bölge planlama ilk tabloda kayıtlı olduğu için sonuç olarak geldi ama ikinci tabloda olmadığı için o tablodaki alanların değeri null olarak geldi.)
b. Rigth join: Left join ile aynı mantıkta çalışır, sadece tersi durum geçerlidir. Yani, ikinci tablodaki (yani sağdaki) bütün kayıtlar, ilk tabloda ise ikinci tablodaki ortak alana (BolumNo) göre uyuşan kayıtlar gelir. Eğer ilk tabloda ikinci tablodaki BolumNo larının tamamı yoksa,olmayan o satırlar için ilk Tablodaki alanlar null olarak gelir.
SQL cümlemiz:
Kod:
SELECT Bolum.BolumNo, Bolum.BolumAdi, Ogrenci.OgrNo, Ogrenci.OgrAdi
FROM Bolum RIGHT OUTER JOIN
Ogrenci ON Bolum.BolumNo = Ogrenci.BolumNo
ORDER BY Bolum.BolumNo
Çıkan sonuç:
Kod:
BolumNo BolumAdi OgrNo OgrAdi
1 Bilgisayar Mühendisliği 1 Ahmet İnce
1 Bilgisayar Mühendisliği 2 Ayhan Güzel
1 Bilgisayar Mühendisliği 3 Sevim Coşkun
2 Çevre Mühendisliği 4 Gülsüm Sever
2 Çevre Mühendisliği 5 Zeki Çalışkan
3 Elektronik Mühendisliği 6 Ayşe Toprak
4 Mimarlık 7 Ahmet Gül
(Şehir ve Bölge Planlamada hiç öğrenci kaydı olmadığından (yani ikinci tabloda kayıt olmadığından) sonuç olarak gelmedi.)
c. Full join: Her iki tablodaki bütün kayıtları getirir. Uyuşmayan satırlar için o alanlar null olarak gelir.
4. CROSS JOIN
Her iki tabloyu çapraz olarak birleştirir. Yani, ilk tablodaki her bir satır için ikinci tablodaki her satır sonuç olarak döner.
SQL Cümlesi:
Kod:
SELECT Bolum.BolumNo, Bolum.BolumAdi, Ogrenci.OgrNo, Ogrenci.OgrAdi
FROM Bolum CROSS JOIN
Ogrenci
Çıkan Sonuç:
Kod:
BolumNo BolumAdi OgrNo OgrAdi
1 Bilgisayar Mühendisliği 1 Ahmet İnce
1 Bilgisayar Mühendisliği 2 Ayhan Güzel
1 Bilgisayar Mühendisliği 3 Sevim Coşkun
1 Bilgisayar Mühendisliği 4 Gülsüm Sever
1 Bilgisayar Mühendisliği 5 Zeki Çalışkan
1 Bilgisayar Mühendisliği 6 Ayşe Toprak
1 Bilgisayar Mühendisliği 7 Ahmet Gül
1 Bilgisayar Mühendisliği 8 Şengül Kader
2 Çevre Mühendisliği 1 Ahmet İnce
2 Çevre Mühendisliği 2 Ayhan Güzel
2 Çevre Mühendisliği 3 Sevim Coşkun
2 Çevre Mühendisliği 4 Gülsüm Sever
2 Çevre Mühendisliği 5 Zeki Çalışkan
2 Çevre Mühendisliği 6 Ayşe Toprak
2 Çevre Mühendisliği 7 Ahmet Gül
2 Çevre Mühendisliği 8 Şengül Kader
3 Elektronik Mühendisliği 1 Ahmet İnce
3 Elektronik Mühendisliği 2 Ayhan Güzel
3 Elektronik Mühendisliği 3 Sevim Coşkun
3 Elektronik Mühendisliği 4 Gülsüm Sever
3 Elektronik Mühendisliği 5 Zeki Çalışkan
3 Elektronik Mühendisliği 6 Ayşe Toprak
3 Elektronik Mühendisliği 7 Ahmet Gül
3 Elektronik Mühendisliği 8 Şengül Kader
4 Mimarlık 1 Ahmet İnce
4 Mimarlık 2 Ayhan Güzel
4 Mimarlık 3 Sevim Coşkun
4 Mimarlık 4 Gülsüm Sever
4 Mimarlık 5 Zeki Çalışkan
4 Mimarlık 6 Ayşe Toprak
4 Mimarlık 7 Ahmet Gül
4 Mimarlık 8 Şengül Kader
5 Şehir ve Bölge Planlama 1 Ahmet İnce
5 Şehir ve Bölge Planlama 2 Ayhan Güzel
5 Şehir ve Bölge Planlama 3 Sevim Coşkun
5 Şehir ve Bölge Planlama 4 Gülsüm Sever
5 Şehir ve Bölge Planlama 5 Zeki Çalışkan
5 Şehir ve Bölge Planlama 6 Ayşe Toprak
5 Şehir ve Bölge Planlama 7 Ahmet Gül
5 Şehir ve Bölge Planlama 8 Şengül Kader
Sql Join ve çeşitleri kullanımları
Hiç yorum yok:
Yorum Gönder