SQL HAVING Nedir? Kullanımı Nasıldır? Örneklerle Anlatım
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 |
SQL HAVING Örnekleri
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 |
SQL JOIN, GROUP BY ve HAVING Komutlarını Birlikte kullanalım
Ö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 |