SELECT sorgusu ile dönen kayıtların belli bir sayıda olmasını istememiz halinde TOP (mySQL için LIMIT) anahtar sözcüğünü kullanırız. Özellikle binlerce kayıt bulunan çok geniş tablolarda bu komut performans açısından oldukça faydalı olabilir. Bunu aşağıdaki örnekler ile daha iyi anlayacaksınız.
Not: TOP özelliği SQL server, MySQL ve Oracle’da farklı anahtar sözcükler ile ifade edildiğinden söz-dizimde de farklılıklar var.
Not: Bu arada diğer SQL derslerine buradan ulaşabilirsiniz
Örnek sorgularımız için kullanacağımız Uyeler
tablosu:
uye_adi | isim | soyisim | e-posta | cinsiyet |
---|---|---|---|---|
hrzafer | Harun Reşit | Zafer | [email protected] | E |
derya.z | Derya | Zaimoğlu | [email protected] | K |
meryem1990 | Meryem | Arkadaş | [email protected] | K |
eaydin | Emir | Aydın | [email protected] | E |
denizeri | Levent | Denizeri | [email protected] | E |
Tablodan ilk 2 kaydı seçmek istiyoruz
SQL Server (Ms Access’de dahil ) Söz-dizimi (Syntax)
SELECT TOP 2 * FROM uyeler
MySQL Sözdizimi
SELECT * FROM uyeler LIMIT 2
Oracle Sözdizimi
SELECT * FROM uyeler WHERE ROWNUM <=2
Yukarıdaki sorguların sonucu aşağıdaki gibi olacaktır:
uye_adi | isim | soyisim | e-posta | cinsiyet |
---|---|---|---|---|
hrzafer | Harun Reşit | Zafer | [email protected] | E |
derya.z | Derya | Zaimoğlu | [email protected] | K |
TOP ifadesinin performans ve hız açısından önemini öne çıkaran bir örnek:
Binlerce üyesi olan bir forum sitesinin kullanıcı girişi bölümünün kullandığı SQL kodunu yazmaya çalışalım:
Not: Bu örnekte kullanılan uyeler
tablosunu yukarıdaki ile karıştırmayın. Bu tabloda kullaniciadi
ve sifre
alanlarının da bulunduğunu farz edin.
SQL Server
SELECT TOP 1 * FROM uyeler WHERE kullaniciadi = 'derya.z' AND sifre = '0947'
MySQL
SELECT * FROM uyeler WHERE kullaniciadi = 'derya.z' AND sifre = '0947' LIMIT 1
Soru: Sizce bu sorgularda TOP veya LIMIT ifadelerini neden 1 ile sınırladık?
Cevap: Çünkü bu kullanıcı adı ve şifreye sahip yalnızca 1 kullanıcı olacağı aşikardır. O halde 50 bin kayıtlı bir tabloda “derya.z” isimli kullanıcı diyelim ki 10 bininci sırada bulunduğunda geriye kalan 40 bin satırın aranmasına gerek yoktur. Özetle TOP işlevi sonuç-kümesinin ilk belli sayıda satırını/kaydını getirir. O sayı kadar kayıt bulunduğunda sorgunun işletimi sonlandırılır. Böylece performanstan tasarruf sağlanmış olur. Her saniye onlarca, yüzlerce hatta binlerce kişinin giriş yaptığı sitelerde bu tür ufak iyileştirmelerin ne gibi büyük performans kazançları sağlayabileceğini artık siz düşünün. Biz buna optimizasyon diyoruz 🙂
Not: Sonuç-kümesi (result-set) kavramının zihninizde oturmuş olması çok önemli.
Herkese Kolay Gelsin
14 Mayıs 2010 at 15:14
Teşekkürler limit 1 işini sevdim. Yani optimizasyon.
07 Mayıs 2013 at 08:31
Teşekkürler.
Şunu ilave edeyim: SQL’de örneğin TOP 50 PERCENT dersek, “PERCENT” dememiz yüzde olarak belirlememizi sağlıyor. Yukardaki örnekte TOP 50 PERCENT dersem, ilk %50’lik kısmı sorguluyoruz. 🙂
17 Mayıs 2013 at 09:15
Teşekkür ederiz.Makalaler çok güzel ve yararlı ancak daha çok örnek verebilme şansınız var mı ? Değerlendirme kodları,minik ödevler vs. ?
22 Ekim 2013 at 03:46
teşekkürlerrr
14 Kasım 2014 at 19:28
hocam kafama takılan bir soru var mesela elimde bir tablo var 10000 kayıtlı ve ben bu tablodan kayıtları 1000 er 1000 er çekip 10000 kayıdı taramak istiyorum yani select top 1000 yaptıktan sonra işlemi biten kayıtları değilde 1001 ile 2000 arası kayıdı ve devamını sırasıyla nasıl getire bilirim