SQL DISTINCT Kullanımı
DISTINCT ifadesi tablodaki belirtilen alanda bulunan kayıtlardan birer örnek
alır. Yani tekrar eden kayıtlardan bir tane alır ve bunun yanına da tekrar
etmeyen kayıtları koyarak bir veri kümesi oluşturur. Ne işimize yarar veya
nerede kullanabiliriz sorusu akla gelebilir.
Mesela bir üyelerinizin depolandığı bir tablo olduğunu düşünün. Bu tablodan
mesela İstanbul'da kaç tane üyeniz olduğunu bulmak istediğinizi düşünün.
Yaptığınız programa bir açılır liste kutusu koyup illerin isimlerini tek tek
yazabilirsiniz. Ancak bu durum hem bir zaman kaybı olur hemde sistemde kayıtlı
olmayan ileri de listeleyeceği için, açılır liste kutusu açıldığında uzun bir
liste olacaktır. Bunun yerine Distinct komutu kullanarak tablodaki Şehir
alanında yazan kayıtlar tek düşürülür ve bir açılır liste kutusuna
aktarılabilir. Böylece ilgili şehir seçilerek o şehirde kaç tane üyenizin
olduğunu görebilirsiniz. Listede görünmeyen şehirden üyeniz olmadığı anlamını
rahatlıkla çıkarabilirsiniz.
Distinct Kullanım Biçimi
SELECT DISTINCT alan_adi1,alan_adi2
FROM tablo_adi |
Distinct kelimesinden sonra yazılacak olan alanlara otomatik olarak
uygulanır. Yani birden fazla alan üzerinde Distinct yapılacaksa alanların başına
tek tek yazılmaz. Ayrıca Distinct komutu tek başına kullanılamaz. Mutlaka SELECT
ifadesi ile kullanılmalıdır.
Burada dikkat edilmesi gereken nokta çoklu distinct kullanımında belirtilen
alanlardaki verileri bir bütün olarak ele alır ve diğer kayırlarda benzersiz
alanları bulmaya çalışır. (örnek2 ve örnek3'e bakabilirisiniz.)
Örnek Tablo Uygulaması:
Örnek olarak aşağıdaki gibi Personel isimli tablomuz olsun.
id |
Adi_soyadi |
Sehir |
Bolum |
Meslek_Kodu |
1 |
Salih
ESKİOĞLU |
İstanbul |
Bilgi İşlem
Sorumlusu |
1234567 |
2 |
Ayhan
ÇETİNKAYA |
Kocaeli |
İdari İşler
Yöneticisi |
2345678 |
3 |
Serkan
ÖZGÜREL |
Erzincan |
Muhasebe |
3456789 |
4 |
İlhan
ÖZLÜ |
İstanbul |
Bİlgi İşlem
Sorumlusu |
2345678 |
Örnek1:
SELECT DISTINCT Sehir FROM Personel
Bu kod ile tablodaki Sehir alanında bulunan kayıtları birer defa alır.
Çıktısı:
Sehir |
İstanbul |
Kocaeli |
Erzincan |
Örnek2:
SELECT DISTNICT Sehir, Bolum FROM Personel
Bu örnekte Personel tabosundan adı soyadı ve bölüm bilgisinin tutulduğu alanlar
seçilmektedir. Ancak burada dikkat edilmesi gerekn nokta iki alanın sanki tek
bir alanmş gibi değelendirilmesidir.
Çıktısı:
Sehir |
Bolum |
İstanbul |
Bilgi İşlem
Sorumlusu |
Kocaeli |
İdari İşler
Yöneticisi |
Erzincan |
Muhasebe |
Burada dikkat edeceğiniz üzere tablomuzdaki son satırı almadı. Çünkü Sehir ve
Bolum alanlarını tek bir alanmış gibi düşündüğümüz zaman "İstanbul Bilgi İşlem
Sorumlusu" ifadesi ortaya çıkar. Son satırdaki kayıtta aynı ifadeye denk
gelmektedir. Bu sebeple dikkate alınmadı.
Örnek3:
SELECT DISTNICT Sehir, Bolum, Meslek_Kodu FROM Personel
Bu örnekte Personel tabosundan adı soyadı ve bölüm bilgisinin tutulduğu alanlar
seçilmektedir. Ancak burada dikkat edilmesi gerekn nokta iki alanın sanki tek
bir alanmş gibi değelendirilmesidir.
Çıktısı:
Sehir |
Bolum |
Meslek_Kodu |
İstanbul |
Bilgi İşlem
Sorumlusu |
1234567 |
Kocaeli |
İdari İşler
Yöneticisi |
2345678 |
Erzincan |
Muhasebe |
3456789 |
İstanbul |
Bİlgi İşlem
Sorumlusu |
2345678 |
Bu örnekte ise bütün kayıtlar gelmiş oldu. Çünkü Sehir, Bolum ve
Meslek_kodu alanlarını tek bir alanmış gibi düşündüğümüz zaman; ilk satırı örnek
verecek olursak "İstanbul Bilgi İşlem Sorumlusu 1234567" ifadesi ortaya çıkar.
Sehir alanında iki tane İstanbul olmasına rağmen ikiside listelenmiştir. Çünkü
iki kaydın Meslek_Kodu alanında yazan değer farklıdır.
Aynı tabloyu aşağıdaki kod ile çalıştırdığımız zaman:
Select Distinct Bolum, Meslek_kodu FROM Personel
Çıktısı:
Bolum |
Meslek_Kodu |
Bilgi İşlem
Sorumlusu |
1234567 |
İdari İşler
Yöneticisi |
2345678 |
Muhasebe |
3456789 |
Bilgi İşlem
Sorumlusu |
2345678 |
Dikkat edileceği üzere Bilgi İşlem Sorumlusu alanı iki defa gelmiş oldu. Aynı
mantıktan yola çıakrak alanların birleştirilmiş olduğunu düşünürsek, Bilgi İşlem
Sorumlusu kayıtlarında Meslek_Kodu alanında 1234567 ve 2345678 verileri vardır.
Dolayısı ile bu iki satır benzersiz değildir.
|