Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Count() için Kullanım Şekli
#1
Merhaba,

Bir projede filtreli/filtresiz olarak toplam kayıtları almak için SQL cümlesinde Count() kullanıyorum. 

Kullanım şeklime örnek;

SELECT COUNT(*) FROM KISI WHERE kisi_adi='SERCAN';


Bu şekilde adı SERCAN olanların toplamını alıyorum.

fakat diğer programcı arkadaşım bunun yanlış olduğunu ve sorunlara neden olabileceğini, fazla kaynak kullandığını vs söyledi. sorguyu aşağıdaki gibi kullanmam gerektiğini savunuyor.

SELECT COUNT(kisi_id) FROM KISI WHERE kisi_adi='SERCAN';

yaptığım testlerde gördüğüm kadarıyla değişiklik yok. internetten bu konuyu araştırdım ama 2 türlüde kullanıldığını gördüm.

Sizin yorumunuz nedir ?
Cevapla
#2
kisi_id null gelirse count(*) null dahil sayar, count(kisi_id) olursa null olanları düşerek öyle sayar diye biliyor ve her ikisini de uyguluyorum. Denemek bedava...
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
Bence arkadaşınız haklı.

Amaç sadece "Sercan" adındaki kişilerin kayıt sayısını bulmak ise from ifadesinden önce neden * koyarak tablodaki bütün field ları yükleyelim ki.

kisi_id alanının null olmayan bir alan olduğu düşünülürse Count(kisi_id) kullanımı daha doğru olur diye düşünüyorum.
Cevapla
#4
orada * yerine bir rakam yazdığınızda da aynı sonuç gelir. Bunu neden yazdım, yani tüm fieldlar demeyelim row count diyelim. Yük dediğiniz fieldlar değil çünkü.

Bir de DISTINCT koyabilirsiniz field başına (parantez içine) o zaman da tekrarlayan satırları bir sayar.

Oraya * yerine field koyduğunuzda asıl o zaman isnull hesabı yapıyor ama cache oluştuğundan ihmal edilebilir anlaşılmaz hız farkı olur.

Diğer yandan asıl sanat WHERE vs ile soruyu dizginlemektir.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
bilgilendirme için teşekkürler. verdiğim örnek sadece konuyu net anlatabilmek içindi. Yorumlar sayesinde kafama daha net oturdu.
Cevapla
#6
SQL'de count(*) ile count(AlanAdı) yazım şekilleri arasında (count(distinct AlanAdı) kullanılmadığı sürece) tek fark yazım şeklidir. Performans ve çalışma mantığı olarak aralarında fark yoktur. Bu sadece yazma pratiği sağlamaktan başka bir şey değildir. Zira orada birden fazla alan ismi (count(AlanAdı, DigerAlanAdı) gibi) yazma imkanı bulunmamaktadır.
Cevapla
#7
@sabanakman Count(*) ile Count(AlanAdi) arasında fark yok derken NULL olanlar dışında demek istediniz değil mi ? ...

Merak edenler için bu SQL Fiddler adresini deneyin

Önce sol ekrandaki [Build Schema] butonuna tıklayın tablo oluşsun...

Sonra sağ ekrandan [RUN SQL] butonuna basın. 

create table PERSONEL (
 ID int,
 ADI varchar(10),
 DOGUM_GUNU date
 );
 
 insert into PERSONEL values (1, 'Ali','20220311');
 insert into PERSONEL values (null, 'Veli','20220311');
 insert into PERSONEL values (2, 'Konya','20220312');
 

 

SELECT Count(*) FROM PERSONEL
WHERE 1=1


Cevap : 3



SELECT Count(Id) FROM PERSONEL
WHERE 1=1

Cevap : 2



trxqyzpbnla2x3cgtlxw.gif
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#8
(13-03-2022, Saat: 20:14)mrmarman Adlı Kullanıcıdan Alıntı: @sabanakman Count(*) ile Count(AlanAdi) arasında fark yok derken NULL olanlar dışında demek istediniz değil mi ? ...

Merak edenler için bu SQL Fiddler adresini deneyin

Önce sol ekrandaki [Build Schema] butonuna tıklayın tablo oluşsun...

Sonra sağ ekrandan [RUN SQL] butonuna basın. 

create table PERSONEL (
 ID int,
 ADI varchar(10),
 DOGUM_GUNU date
 );
 
 insert into PERSONEL values (1, 'Ali','20220311');
 insert into PERSONEL values (null, 'Veli','20220311');
 insert into PERSONEL values (2, 'Konya','20220312');
 

 

SELECT Count(*) FROM PERSONEL
WHERE 1=1


Cevap : 3



SELECT Count(Id) FROM PERSONEL
WHERE 1=1

Cevap : 2



trxqyzpbnla2x3cgtlxw.gif

Bu tatmin edici cevap için teşekkürler. olayı daha net kavradım.
Cevapla
#9
Kuyuya bir taş da ben atayım.  Smile
Count(0)
Begin : = end / 2;
Cevapla
#10
0 yerine 12345 yazın bir de fantastik olsun.

Count(0) = Count(*) peşinen parantez içi rakam vermek ifadesi ile belirtmiştim üstadım.

SQLfiddler linki verdim bence orada deneyin faydalı bir site
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Pratik MySQL Kullanım Örnekleri vkamadan 12 19.451 02-08-2022, Saat: 08:43
Son Yorum: vkamadan
  MySQL-Her Client İçin Neden User Tanımlaması Gerekli hi_selamlar 18 12.280 25-08-2020, Saat: 11:38
Son Yorum: mkysoft
  create de edilen mysqlde her bir alan için 3 ayrı dosya oluşması ahmetb 7 6.062 14-01-2019, Saat: 11:17
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi