Yerli ve yabancı çeşitli forumlarda veritabanındaki bir tablodan rastgele kayıt çekebilmek ile ilgili sorular görüyorum. Bu işin veritabanı üzerinde çözülebileceğini bilmeyenler bunu uygulamalarının ekledikleri kodlarla çözmeye çalışıyorlar. Aslında bu iş veritabanı için çok kolay, çünkü Veritabanı Yönetim Sistemleri random sayı üretmek ile ilgili fonksiyonlara sahiptirler. Bunları kullanarak veritabanından kolaylıkla rastgele kayıt çekebiliriz. Aslında uygulayacağımız yöntem var olan kayıtların arasından rastgele belirlenen bir kayıdı sorgulamak değil, var olan tabloyu sanal bir alana göre sıralayıp ilk (veya istenilen) sayıda kayıdı okumak. Hemen en basit haliyle Oracle’da bu işin nasıl yapılacağını görelim:
SQL> SELECT * FROM hr.employees ORDER BY DBMS_RANDOM.VALUE;
Bu komut ile HR schemasındaki employees tablosundan çekilen kayıtlar DBMS_RANDOM.VALUE fonksiyonunun ürettiği rastgele sayılara göre sıralanacaktır. Bu yüzden bu sorgunun her çağrılışında dönen kayıtların sırası değişik olacaktır. Siz bu dönen kayıtlardan bir veya daha fazlasını okuyarak istediğiniz rastgele kayıda ulaşabilirsiniz.
Aynı sorguyu MySQL için şu şekilde yazabiliriz:
SQL> SELECT * FROM employees ORDER BY RAND();
Microsoft SQL Server’da RAND() fonksiyonu bulunmasına rağmen, MySQL için yazdığımız sorguyu Microsoft SQL Server’da kullanamıyoruz. Çünkü Microsoft SQL Server’daki RAND() fonksiyonu birden fazla kayıt döndüren bir sorgu içerisinde çağrıldığında random olarak hep aynı sayıyı döndürüyor. Bu yüzden random kayıt seçebilmek için RAND() yerine, NEWID() kullanılması gerekiyor:
SQL> SELECT * FROM employees ORDER BY NEWID();
Bu sorgu random sayı üretmek yerine, her satır/kayıt için unique ID’ler üretiyor ve daha sonra bu ID’lerin içeriğine göre kayıtları sıralayarak döndürüyor. Bu sayede istenilen tablodan rastgele kayıtlar seçilebilmiş oluyor.
Konu 74 kere Okundu
Kategori Oracle
Beğendiyseniz Paylaşın
- Google Buzz ekleyin
- Delicious
- Digg this
- StumbleUpon
- MySpace
- Technorati

Yusuf Arslan
Oracle Open Source
1985 Tokat/Reşadiye doğumluyum.İlk-orta-lise hayatını Amasya/Suluova ilçesinde geçirdim.Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerime Oracle,SAP alanlarında danışmanlık vermek üzere devam etmekteyim. Kullandığım,bildiğim teknolojiler ve diller; SAP BO Oracle BI Applications Oracle Data Mining Oracle BI Reports(http://www.iski.gov.tr/web/statik.aspx?KID=1000717) Oracle Data Integrator Oracle BI Publisher(XML Publisher) Oracle Database 10g Oracle Mapviewer PL/SQL,Java,Oracle JDeveloper,Oracle Forms-Reports,C# Data warehouse process optimization Database system implementation Using encoding for security systems Software development, test and deployment Presentation and communication skills Bu adreslerden de bana ulaşabilirsiniz, [email protected] https://datawarehouse.gen.tr/ http://www.arslanyusuf.blogspot.com/ http://yusufarslaneng.blogspot.com/ http://twitter.com/yusars http://tr.linkedin.com/pub/yusuf-arslan/27/35b/57bWebsite: arslanyusuf.blogspot.com/ E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir
En Son Yusuf Arslan
Yorum yaz
Make sure you enter the (*) required information where indicated.
Basic HTML code is allowed.