WHERE komutu gruplama fonksiyonları ile kullanılmadığından aynı görevi yapan HAVING komutu GRUOP BY ile kullanılması için getirilmiştir. Sadece GROUP BY komutu ile kullanılır.
SELECT sütun_adi
FROM tablo_adi
WHERE koşul
GROUP BY sütun_adi
HAVING koşul
ORDER BY sütun_adi;
NOT: Yukarıda anlaşılır olması için türkçe karakter kullanılmıştır.Kod yazımlarında Türkçe karakter kullanmayınız.
Örnek veritabanı üzerinde deneyelim.
KullaniciID |
Ad |
Soyad |
Adres |
Sehir |
Postakodu |
Ulke |
1 |
Safa |
Dedeoğlu |
Necmettin Erbakan Cad. no 8/1 |
İstanbul |
34000 |
Türkiye |
2 |
Fatih |
Turab |
İskele Cad. hastane sok. |
Artvin |
08300 |
Türkiye |
3 |
John |
Doupoint |
Claremont Rd no:8/3 |
Newcastle |
NE2 4AA |
İngiltere |
4 |
Gustavo |
Alfaro |
Cuero y Caicedo, Quito |
New York |
170129 |
Amerika |
5 |
Abel |
Gigli |
Dagmada Waaberi 324/5 |
Moskova |
Jh09010 |
Rusya |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
90 |
Ellen |
Smith |
2525 Massachusetts Avenue N W |
Washington,DC |
984 |
Amerika |
Aşağıdaki SQL komutu, ülkelerdeki müşteri sayısını listeler. HAVING koşulu ile 7 den fazla olanları görüntülemek için sınırlanmıştır.
SELECT COUNT(KullaniciID), Ulke
FROM Musteriler
GROUP BY Ulke
HAVING COUNT(KullaniciID) > 7;
Sonuç çıktısı:
Sayı(KullaniciID) |
Ulke |
Türkiye |
17 |
Amerika |
8 |
Rusya |
11 |
Çin |
13 |
Aşağıdaki SQL komutu, ülkelerdeki müşteri çoktan aza doğru sayısını listeler. Sadece 7 den fazla müşterisi olanları listeler.
SELECT COUNT(KullaniciID), Ulke
FROM Musteriler
GROUP BY Ulke
HAVING COUNT(KullaniciID) > 7;
Sonuç çıktısı:
Sayı(KullaniciID) |
Ulke |
Türkiye |
17 |
Çin |
13 |
Rusya |
11 |
Amerika |
8 |
Örnek tablolar üzerinde çalışalım.
SiparisID |
KullaniciID |
CalisanID |
SiparisTarihi |
TedarikciID |
12312 |
2 |
5 |
07/1/2021 |
2 |
12342 |
5 |
7 |
12/1/2021 |
1 |
12354 |
8 |
2 |
15/1/2021 |
2 |
. . . |
. . . |
. . . |
. . . |
. . . |
13254 |
4 |
3 |
29/1/2021 |
3 |
13425 |
6 |
9 |
03/1/2021 |
1 |
CalisanID |
CalisanAdi |
CalisanSoyadi |
Dogumgunu |
1 |
Frank |
Cesanne |
1969-12-04 |
2 |
John |
Smith |
1970-05-18 |
3 |
Mehmet |
Efe |
1974-08-04 |
. . . |
. . . |
. . . |
. . . |
12 |
Hans |
Müller |
1969-07-24 |
Aşağıdaki SQL komutu,10’dan fazla sipariş kaydeden çalışanları listeler:
SELECT Calisanlar.CalisanAd, COUNT(Siparisler.SiparisID) AS SiparisSayısı
FROM Siparisler INNER JOIN Calisanlar ON Siparisler.CalisanID = Calisanlar.CalisanID)
GROUP BY CalisanAd
HAVING COUNT(Siparisler.SiparisID) > 10;
Sonuç çıktısı:
CalisanAd |
SiparisSayısı |
Frank |
27 |
Hans |
24 |
Ayşe |
21 |
John |
17 |
Mehmet |
12 |
İçerik: Yusuf Erdoğan