12 Kasım 2014 Çarşamba

Sql Join ve çeşitleri kullanımları

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