# PostgreSQL: Sütun İçinde Sayı Bulma Rehberi
PostgreSQL veritabanınızda bir sütunun içinde sayı içeren satırları seçmek mi istiyorsunuz? Bu, ürün kodlarını, sipariş numaralarını veya diğer sayısal verileri içeren veritabanlarında sıkça karşılaşılan bir sorundur. Bu makale, PostgreSQL’de bu işlemi nasıl yapacağınızı, başlangıç seviyesinden ileri seviyeye kadar adım adım, gerçek dünya örnekleriyle ve performans optimizasyon ipuçlarıyla açıklayacaktır. Veritabanınızdaki değerli zamanınızı ve kaynaklarınızı en verimli şekilde kullanmanıza yardımcı olacak pratik çözümler sunacağız.
Öğrenme Yol Haritası
Bu rehber, PostgreSQL’de sütun içinde sayı bulma konusunda farklı seviyelerdeki kullanıcılar için hazırlanmıştır. Aşağıdaki yol haritasını takip ederek, yeteneklerinizi geliştirebilirsiniz:
Yeni Başlayan: Temel LIKE operatörü kullanımı ve basit örnekler.
Orta Seviye: Daha karmaşık desen eşleştirme için düzenli ifadeler (regexp_like) ve gerçek dünya senaryoları. Optimizasyon ipuçları.
İleri Seviye: Performans analizi, karmaşık desen eşleştirme senaryoları ve sınır durumları (edge cases).
PostgreSQL’de Sayı İçeren Satırları Seçme: Temel Kavramlar
PostgreSQL’de bir sütunun içinde sayı içeren satırları seçmek için birkaç yöntem mevcuttur. En basit yöntem, LIKE operatörünü kullanmaktır. LIKE operatörü, belirli bir desenle eşleşen satırları seçmek için kullanılır. Sayısal değerler için, % karakterini (yüzde işareti) kullanarak herhangi bir sayı dizisini temsil edebiliriz.
Nasıl Yapılır? LIKE Operatörü ile Sayı Arama
Örneğin, urun_adi sütununda sayı içeren ürün adlarını seçmek için aşağıdaki sorguyu kullanabiliriz:
SELECT urun_adi
FROM urunler
WHERE urun_adi LIKE '%1%';
Bu sorgu, urun_adi sütununda “1” rakamını içeren tüm satırları seçer. % karakteri, “1” rakamından önce veya sonra herhangi bir karakter dizisinin olabileceğini belirtir. Benzer şekilde, diğer rakamlar için de bu sorguyu değiştirebilirsiniz.
Örnek: urunler tablosunda urun_adi sütununda “Kırmızı 123”, “Mavi 45”, “Yeşil Kalem”, “Sarı 7” gibi veriler olduğunu varsayalım. Yukarıdaki sorgu “Kırmızı 123”, “Mavi 45” ve “Sarı 7” satırlarını döndürecektir.
Bu yöntem basittir, ancak sadece tam sayıların tespitinde etkilidir. Ondalıklı sayılar veya daha karmaşık sayısal desenler için yeterli olmayabilir.
Nasıl Yapılır? Düzenli İfadeler (Regular Expressions) ile Gelişmiş Arama
Daha karmaşık sayısal desenleri bulmak için düzenli ifadeler (regular expressions) kullanabiliriz. PostgreSQL’de regexp_like fonksiyonu bu amaçla kullanılabilir.
SELECT urun_adi
FROM urunler
WHERE urun_adi ~ '\d+';
Bu sorgu, urun_adi sütununda en az bir rakam içeren tüm satırları seçer. \d+ düzenli ifadesi, bir veya daha fazla rakamı (\d) temsil eder. ~ operatörü, düzenli ifade eşleşmesini gösterir.
Örnek: Eğer urun_adi sütununda “Ürün Kodu: 12345”, “Model A12B”, “100 TL”, “Fiyat: 9.99” gibi veriler varsa, bu sorgu tüm satırları döndürecektir.
Gerçek Dünya Örneği: Sipariş Numara Analizi
Bir e-ticaret sitesinin sipariş veritabanını ele alalım. siparisler tablosunda siparis_no sütunu bulunmaktadır ve bu sütun sipariş numaralarını içerir. Sipariş numaraları genellikle sayısal değerlerdir, ancak bazı durumlarda özel karakterler de içerebilirler. Örneğin, bazı sipariş numaraları “ORD-12345”, “SIP-67890” gibi bir ön ek içerebilir.
Bu durumda, sipariş numaralarında sayısal bir değer içeren tüm siparişleri seçmek için aşağıdaki sorguyu kullanabiliriz:
SELECT siparis_no
FROM siparisler
WHERE siparis_no ~ '\d+';
Bu sorgu, sipariş numarasında en az bir rakam bulunan tüm siparişleri seçer. Daha spesifik bir eşleşme için, düzenli ifadeleri daha detaylı olarak kullanabilirsiniz. Örneğin, sadece “ORD-” ön ekli sipariş numaralarını seçmek için:
SELECT siparis_no
FROM siparisler
WHERE siparis_no ~ '^ORD-\d+$';
Bu sorgu, “^ORD-\d+$” düzenli ifadesini kullanarak sadece “ORD-” ile başlayan ve sadece rakamlarla devam eden sipariş numaralarını seçer.
Performans Optimizasyonu: İndeks Kullanımı
Büyük veritabanlarında, LIKE veya regexp_like operatörlerini kullanarak arama yapmak performans sorunlarına yol açabilir. Performansı iyileştirmek için indeks kullanımı önemlidir. urun_adi veya siparis_no sütunlarına bir indeks eklemek, arama işlemlerinin hızını önemli ölçüde artırabilir.
CREATE INDEX idx_urun_adi ON urunler (urun_adi);
CREATE INDEX idx_siparis_no ON siparisler (siparis_no);
Ancak, düzenli ifadeler kullanıldığında indeks kullanımı her zaman etkili olmayabilir. PostgreSQL, düzenli ifadeleri optimize etmek için çeşitli stratejiler kullanır, ancak karmaşık düzenli ifadeler indeks kullanımını engelleyebilir.
İleri Düzey Teknikler: Karmaşık Desen Eşleştirme ve Sınır Durumları (Edge Cases)
Bazı durumlarda, daha karmaşık sayısal desenleri tespit etmek gerekebilir. Örneğin, ondalık sayıları veya belirli bir formatta olan sayıları seçmek isteyebilirsiniz. Bu durumlarda, daha karmaşık düzenli ifadeler kullanmanız gerekebilir.
Örneğin, ondalık sayıları seçmek için aşağıdaki düzenli ifadeyi kullanabilirsiniz:
SELECT urun_adi
FROM urunler
WHERE urun_adi ~ '\d+\.\d+';
Bu düzenli ifade, bir veya daha fazla rakam (\d+), ardından bir nokta (.) ve ardından bir veya daha fazla rakam (\d+) olan desenleri arar.
Performans Analizi ve Optimizasyon İpuçları
Sorgu performansını analiz etmek için EXPLAIN komutunu kullanabilirsiniz. EXPLAIN komutu, sorgu planını gösterir ve sorguyu optimize etmek için kullanabileceğiniz bilgileri sağlar.
EXPLAIN SELECT urun_adi FROM urunler WHERE urun_adi ~ '\d+';
Performansı iyileştirmek için aşağıdaki ipuçlarını kullanabilirsiniz:
* İndeksler: Uygun sütunlara indeks ekleyin.
* Düzenli İfadeler: Gereksiz yere karmaşık düzenli ifadeler kullanmaktan kaçının.
* Veri Tipleri: Sayısal veriler için uygun veri tiplerini kullanın.
* Parçalama (Partitioning): Büyük tabloları parçalara ayırın.
Sonuç
PostgreSQL’de bir sütun içinde sayı içeren satırları seçmek için çeşitli yöntemler mevcuttur. LIKE operatörü basit durumlar için uygundur, ancak daha karmaşık durumlar için düzenli ifadeler kullanmak daha etkilidir. Performans optimizasyonu için indeks kullanımı ve sorgu planı analizi önemlidir. Bu makalede ele alınan yöntemleri ve ipuçlarını kullanarak, PostgreSQL veritabanınızdaki sayısal verileri daha verimli bir şekilde işleyebilirsiniz. Daha fazla bilgi ve ileri düzey PostgreSQL teknikleri için [fatihsoysal.com](https://fatihsoysal.com) adresini ziyaret edebilirsiniz.
Sıkça Sorulan Sorular:
1. LIKE ve regexp_like arasındaki fark nedir? LIKE basit desen eşleştirmeleri için kullanılırken, regexp_like daha karmaşık düzenli ifadeleri destekler.
2. Düzenli ifadeler performansı nasıl etkiler? Karmaşık düzenli ifadeler performansı olumsuz etkileyebilir. Basit ve hedeflenen ifadeler kullanmaya özen gösterin.
3. İndeks kullanımı ne zaman etkilidir? LIKE operatörü ile basit desen eşleştirmelerinde indeks kullanımı etkili olabilir. Ancak, karmaşık düzenli ifadelerde indeks kullanımı her zaman etkili olmayabilir.
4. PostgreSQL’de sayısal verileri nasıl daha verimli bir şekilde saklayabilirim? Uygun veri tiplerini (örneğin, INTEGER, NUMERIC, FLOAT) kullanın.
5. Büyük veritabanlarında performansı nasıl iyileştirebilirim? İndeksleme, parçalama (partitioning) ve sorgu optimizasyonu tekniklerini kullanın.
Yazar: Fatih Soysal