PostgreSQL Multiple SELECT Queries: Tek Sorguda Birden Fazla SELECT Kullanımı

PostgreSQL kullanırken bazen farklı tablolardan veya farklı filtreleme koşullarından gelen sonuçları tek bir sorguda görmek isteyebilirsiniz. Bu durumda multiple SELECT queries kullanarak birden fazla sorguyu tek bir sonuç setinde birleştirmek mümkündür.

Kısa Özet: PostgreSQL’de subquery kullanarak birden fazla SELECT sorgusunu tek bir sorgu içerisinde çalıştırabilir ve farklı tablolardaki verilerin özetini tek satırda elde edebilirsiniz.
PostgreSQL multiple select query example

Birden Fazla SELECT Sorgusunu Neden Birleştirmeliyiz?

SQL sorgularında bazen farklı tablolardan veri çekmek için birden fazla SELECT sorgusu yazmak gerekir. Bu sorguları ayrı ayrı çalıştırmak yerine tek bir sorguda toplamak birçok avantaj sağlar:

  • Daha okunabilir ve düzenli SQL kodu
  • Daha az sorgu çalıştırarak performans artışı
  • Raporlama ve dashboard sistemlerinde tek sonuç üretme
  • Backend uygulamalarında daha az veritabanı çağrısı

Örneğin aşağıdaki sorgu yalnızca tek bir tablo için kayıt sayısını döndürür:



SELECT COUNT(*) AS phoneNumbersToFetch 
FROM phone_numbers_to_fetch;

Ancak çoğu zaman birden fazla tablodan gelen istatistikleri tek bir sonuç satırında görmek isteriz.

PostgreSQL'de Birden Fazla SELECT'i Tek Sorguda Kullanma

Aşağıdaki örnekte dört farklı SELECT sorgusunu tek bir SELECT içinde birleştiriyoruz. Bu yöntemde her sorgu bir subquery olarak kullanılır.



SELECT
phoneNumbersToFetch,
phoneNumbersFetched,
phoneNumbersAvailable,
phoneNumbersNotAvailable

FROM

(SELECT COUNT(*) AS phoneNumbersToFetch
FROM phone_numbers_to_fetch) AS a1,

(SELECT COUNT(*) AS phoneNumbersFetched
FROM phone_number_details) AS a2,

(SELECT COUNT(*) AS phoneNumbersAvailable
FROM phone_number_details
WHERE line_info != '-1') AS a3,

(SELECT COUNT(*) AS phoneNumbersNotAvailable
FROM phone_number_details
WHERE line_info = '-1') AS a4;

Bu sorgu çalıştırıldığında tüm sonuçlar tek satırda döner.

SQL Sorgusunun Açıklaması

Yukarıdaki sorguda her alt sorgu belirli bir istatistiği hesaplar:

  • phoneNumbersToFetch : phone_numbers_to_fetch tablosundaki toplam kayıt sayısını döndürür.
  • phoneNumbersFetched : phone_number_details tablosundaki tüm kayıtların sayısını getirir.
  • phoneNumbersAvailable : line_info değeri -1 olmayan kayıtları sayar.
  • phoneNumbersNotAvailable : line_info = -1 olan kayıtları döndürür.

Alternatif Yöntem: Conditional Aggregation

Bazı durumlarda aynı tablo üzerinde farklı koşullar için conditional aggregation kullanmak daha performanslı olabilir.



SELECT
COUNT(*) AS phoneNumbersFetched,

COUNT(*) FILTER (WHERE line_info != '-1')
AS phoneNumbersAvailable,

COUNT(*) FILTER (WHERE line_info = '-1')
AS phoneNumbersNotAvailable

FROM phone_number_details;

Bu yöntem özellikle PostgreSQL'de daha performanslıdır çünkü aynı tablo sadece bir kez taranır.

Performans Açısından Dikkat Edilmesi Gerekenler

  • Subquery sayısını gereksiz artırmamaya dikkat edin
  • Büyük tablolarda index kullanımı performansı artırır
  • Aynı tabloyu birden fazla kez taramak yerine aggregation kullanın
  • Raporlama sorgularında materialized view tercih edilebilir

Sonuç

Bu yazıda PostgreSQL multiple SELECT queries kullanarak birden fazla SELECT sorgusunun tek bir sorguda nasıl birleştirileceğini öğrendik.

Subquery ve aggregation teknikleri sayesinde farklı tablolardan gelen verileri tek bir sonuç satırında toplamak mümkündür.

Bu yaklaşım özellikle dashboard raporları, analytics sistemleri ve backend API performansı için oldukça faydalıdır.

Etiketler: postgresql multiple select, postgresql subquery, sql multiple select query, postgresql performance

Latest Software Developers - Yazılım Blog Yazarı Profil Resmi

Yazar

LatestSoftwareDevelopers

Blog where the most up-to-date software is followed. (En güncel yazılımların takip edildiği blog sitesi)

Database ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *