Çarşamba, 27 Ekim 2010 13:07

Bir Tablodan Rastgele Kayıt Çekmek

Yazan&Gönderen  Yusuf Arslan
Bu Öğeyi Derecelendir
(0 Oylar)
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.
Yusuf Arslan

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/57b

Website: 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

İlgili Öğeler (Etikete Göre)

Başa Dön