Merhaba! Ben Aykhan, 1999 doğumlu bir Azerbaycanlıyım ve 2017 yılından bu yana programlamayla ilgileniyorum. Teknolojinin büyülü dünyası beni her zaman etkilemiştir ve bu merakımı kendi blogumda paylaşarak daha geniş bir kitleyle buluşturmayı amaçlıyorum.
Veritabanlarında çalışırken, bazen bir sütun içerisinde tekrar eden verilerden kurtulup sadece benzersiz kayıtları çekmemiz gerekebilir. Bu gibi durumlarda, SQL'de ve bazı programlama dillerinin veritabanı sorgu yapılarında yer alan distinct()
fonksiyonu devreye girer. PHP’nin popüler framework’ü Laravel'de de distinct()
fonksiyonu veri sorgularını optimize etmek ve tekrarlanan kayıtları filtrelemek için sıkça kullanılır.
Bu makalede, distinct()
fonksiyonunun ne olduğu, ne işe yaradığı ve nasıl kullanılacağı hakkında ayrıntılı bilgi verilecektir.
distinct()
Fonksiyonu Nedir?
distinct()
, veritabanından sorgu yaparken belirli bir sütunda tekrarlayan kayıtları ortadan kaldırarak yalnızca benzersiz (distinct) değerleri döndürmek için kullanılan bir fonksiyondur. Tekrarlanan veriler, örneğin kullanıcı adları, şehir adları veya herhangi bir kategori listesi gibi tekrarlanabilir veriler içeren sütunlar üzerinde çalışırken kullanışlıdır.
Bu fonksiyon genellikle SQL dilinde kullanıldığı gibi, birçok modern ORM (Object-Relational Mapping) sistemlerinde ve frameworklerde de yerleşik olarak bulunur. Laravel de bu fonksiyonu kullanabilmenizi sağlar.
SQL'deki Kullanımı:
SELECT DISTINCT column_name FROM table_name;
Laravel'deki Kullanımı:
Model::select('column_name')->distinct()->get();
distinct()
Fonksiyonu Ne İşe Yarar?
- Tekrarlayan Verileri Kaldırır: Bir veri tablosunda tekrarlayan veriler varsa,
distinct()
fonksiyonu bu verilerin yalnızca bir kez görünmesini sağlar. - Veritabanı Performansını İyileştirir: Veritabanından çekilen veri miktarını azaltarak daha hızlı ve daha verimli sorgular yazmanıza olanak tanır.
- Analiz ve Raporlama Kolaylığı: Özellikle raporlama yaparken belirli bir veri kümesi üzerinde benzersiz değerleri almak ve tekrarlayanları filtrelemek için kullanılır.
distinct()
Fonksiyonunun Kullanımı
distinct()
fonksiyonunun farklı kullanım senaryolarını anlamak için birkaç örnek inceleyelim.
Örnek 1: SQL’de DISTINCT
Kullanımı
Bir veri tablosunda "city" (şehir) sütunu üzerinden benzersiz şehir isimlerini çekmek istiyoruz. Eğer tekrarlanan şehir isimleri varsa, bunlar sadece bir kez gösterilecektir.
SELECT DISTINCT city FROM customers;
Bu sorgu, customers
tablosundan sadece benzersiz şehir isimlerini döndürecektir.
Örnek 2: Laravel’de distinct()
Kullanımı
Laravel'de distinct()
fonksiyonu, sorgularda tekrar eden verileri filtrelemek için kullanılır. Örneğin, benzersiz şehir isimlerini almak için şu şekilde bir sorgu yapılabilir:
$distinctCities = DB::table('customers')
->select('city')
->distinct()
->get();
Bu kod, customers
tablosundan benzersiz şehir isimlerini döndürür.
Örnek 3: Birden Fazla Sütunla Kullanımı
Bazen birden fazla sütun üzerinde benzersiz verileri çekmek gerekebilir. SQL dilinde ve Laravel’de bunu başarmak oldukça kolaydır. Örneğin, city
ve state
(eyalet) sütunlarının birleşimi üzerinden benzersiz sonuçlar çekmek için:
SQL:
SELECT DISTINCT city, state FROM customers;
Laravel:
$distinctCityState = DB::table('customers')
->select('city', 'state')
->distinct()
->get();
Bu sorgu, hem city
hem de state
sütunlarına bakarak her bir şehir-eyalet çiftini sadece bir kez döndürür.
Örnek 4: Eloquent ile Kullanımı
Laravel'in Eloquent ORM'i ile model bazında distinct()
kullanımı da oldukça basittir. Örneğin, User
modelinden benzersiz email
adreslerini çekmek için şu şekilde bir sorgu yazabilirsiniz:
$distinctEmails = User::select('email')->distinct()->get();
Bu sorgu, users
tablosundaki tüm email
sütunundaki benzersiz kayıtları döndürecektir.
distinct()
ile İlgili Dikkat Edilmesi Gerekenler
-
Sadece Değerleri Karşılaştırır:
distinct()
sadece belirli bir sütundaki değerlerin benzersiz olup olmadığını kontrol eder. Eğer birden fazla sütun için benzersiz sonuçlar almak istiyorsanız, birden fazla sütunu seçmelisiniz.Örneğin, sadece
city
sütununadistinct()
uygularsanız, aynı şehirdeki farklı kişilerin bilgileri dışarıda bırakılabilir. Fakat, hemcity
hem destate
sütunlarınadistinct()
uygularsanız, her bir şehir-eyalet çiftini benzersiz olarak döndürebilirsiniz. -
Performans:
distinct()
kullanımı, büyük veri setlerinde doğru kullanıldığında performansı iyileştirebilir. Ancak yanlış veya gereksiz kullanıldığında sorguların performansını olumsuz etkileyebilir. Örneğin, gereksiz yeredistinct()
kullanmak veritabanı işlem yükünü artırabilir. -
Gruplama ile Karışıklık:
distinct()
ilegroup by
sorguları karıştırılmamalıdır.group by
, belirli bir kritere göre verileri gruplar ve genellikle toplama işlemleri ile kullanılırken,distinct()
sadece tekrarlanan verileri filtrelemek için kullanılır.
distinct()
ve group by
Karşılaştırması
distinct()
ve group by
her ikisi de benzersiz kayıtlar elde etmenizi sağlar. Ancak işlevsellik açısından farklıdırlar:
distinct()
: Sadece benzersiz satırları döndürür.group by
: Belirli bir kritere göre verileri gruplar ve genellikleCOUNT()
,SUM()
,AVG()
gibi toplama fonksiyonlarıyla birlikte kullanılır.
Örnek: group by
Kullanımı
$groupedData = DB::table('customers')
->select('city', DB::raw('COUNT(*) as total_customers'))
->groupBy('city')
->get();
Bu sorgu, her şehirde kaç müşterinin bulunduğunu hesaplar.
Gerçek Hayattan Bir Kullanım Örneği
Bir e-ticaret uygulamasında, kullanıcıların satın aldığı ürünlerin kategorilerine göre benzersiz bir liste çekmek isteyebilirsiniz. Örneğin, bir kullanıcı birden fazla kategoriden ürün almış olabilir, fakat her kategoriyi sadece bir kez göstermek isteyebilirsiniz.
$categories = DB::table('purchases')
->select('category')
->where('user_id', $userId)
->distinct()
->get();
Bu sorgu, belirli bir kullanıcının satın aldığı benzersiz kategorileri döndürecektir.
distinct()
fonksiyonu, veritabanı sorgularında tekrarlayan verileri ortadan kaldırmak için oldukça faydalı bir araçtır. Özellikle büyük veri setlerinde benzersiz verileri elde etmek, raporlama ve analiz işlemlerinde bu fonksiyon sayesinde daha etkin sonuçlar elde edebilirsiniz. Laravel’de ve SQL’de bu fonksiyonun doğru ve verimli kullanımı, uygulamanızın performansını artırabilir.