🟢 SQL Sorgu Sırası

SQL Sorgu Sırası: SQL sorgusunun yazım sırası ile veritabanı motorunun onu işleyiş sırası tamamen farklıdır — SELECT en üste yazılır ama neredeyse en son çalışır.

SQL sorgusunun yazım sırası ile veritabanı motorunun onu işleyiş sırası tamamen farklıdır — SELECT en üste yazılır ama neredeyse en son çalışır. Fabrikadaki üretim hattını düşün: önce hammaddeyi depoya çek (FROM), kalite kontrolden geçir (WHERE), bantları kategoriye göre ayır (GROUP BY), sadece yeterli miktarda üretilen kategorileri ilerlet (HAVING), sonunda ne göndereceğini seç (SELECT). Peki Java’da metotlar yukarıdan aşağıya çalışırken, neden SQL bu sırayı tersine çeviriyor? Çünkü SQL ‘ne istediğini’ tarif eden bir dildir, ‘nasıl yapılacağını’ adım adım söyleyen bir dil değil — motor en verimli fiziksel planı kendi üretir. Bu farkın pratik sonucu şudur: Java’da `int total = count()` sonra o değişkeni if içinde kullanabilirsin; SQL’de `SELECT COUNT(*) AS total ... WHERE total > 5` yazarsan hata alırsın, çünkü WHERE aşamasında SELECT henüz çalışmamıştır ve `total` alias’ı mevcut değildir. QA mühendisi için bu sırayı yanlış anlamak, flaky sorgular ve anlamsız hata mesajlarına yol açar; sorgunun neden WHERE’de alias kabul etmediğini veya neden aggregate fonksiyon HAVING’e gittiğini anlamak debug süresini dramatik biçimde kısaltır.

SQL Yürütme Sırası — Çoğu Yeni Başlayanın Kaçırdığı Sır

SQL, normal kod gibi yukarıdan aşağıya çalışmaz. Belirli bir dahili sıra izler. Bu yüzden WHERE içinde SELECT takma adları kullanamaz ve aggregate fonksiyonlar HAVING'e gider, WHERE'e değil.

SQL Cümle Değerlendirme Sırası (Adım Adım)

SELECT'i en üste yazarsın ama neredeyse en son çalışır. Bu yüzden SELECT'te tanımlanan takma adlar WHERE'de kullanılamaz!

SQL Sorgu Yürütme Akışı (Mantıksal Sıra)

Bir SQL sorgusunun veri tabanı motoru tarafından hangi mantıksal sıra ile çalıştırıldığını (FROM ➔ WHERE ➔ GROUP BY ➔ SELECT ➔ ORDER BY ➔ LIMIT) canlı olarak gör.

sql-interactive-terminal

Etkileşimli SQL Terminali

SELECT, INSERT, UPDATE, DELETE sorgularını çalıştır ve veri tabanı tablosunun anlık değişimini şemada izle.

Örnek Verimiz — test_results Tablosu

Sarı satırlar = FAIL durumu. Dene: SELECT * FROM test_results WHERE status = 'FAIL' → 2. ve 4. satırları döndürür.

SQL Sorgularının Mantıksal Çalışma Sırası

SQL yazarken kodumuz yukarıdan aşağıya (SELECT, FROM, WHERE...) okunur; fakat veritabanı motoru sorguyu bu sırayla çalıştırmaz. Mantıksal çalışma sırası şöyledir: **FROM ➔ WHERE ➔ GROUP BY ➔ HAVING ➔ SELECT ➔ ORDER BY ➔ LIMIT** - **WHERE neden SELECT'ten önce çalışır?** Veritabanı motorunun önce hangi satırlarla çalışacağını (WHERE) belirlemesi gerekir. Sütun seçimi ve takma ad (alias) tanımlama (SELECT) ise daha sonra gerçekleşir. - **Alias Kırılması**: SELECT aşamasında tanımladığınız bir takma ad (örn: `SELECT name AS user_name`), WHERE aşamasında kullanılamaz! Çünkü WHERE çalışırken henüz SELECT aşamasına gelinmemiştir ve takma ad henüz tanımlanmamıştır.