Koşullu ifadeleri ON / WHERE içinde uygulama
Burada mantıksal sorgu işleme adımları hakkında açıkladım.
Başvuru: İçinde Microsoft® SQL Server ™ 2005 T-SQL Sorgulama
Yayımcısı: Microsoft Press
Pub Tarih: 07 Mart 2006
Yazdır ISBN-10: 0-7356-2313-9
Yazdır ISBN-13: 978-0-7356-2313-2
Sayfalar: 640
Microsoft® SQL Server ™ 2005 T-SQL Sorgusu İçinde
(8) SELECT (9) DISTINCT (11) TOP <top_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
SQL'in diğer programlama dillerinden farklı olan ilk dikkat çeken yönü, kodun işlenme sırasıdır. Çoğu programlama dilinde, kod yazıldığı sırada işlenir. SQL'de, işlenen ilk yan tümce FROM yan tümcesi iken, ilk görünen SELECT yan tümcesi neredeyse son işlenir.
Her adım, aşağıdaki adıma girdi olarak kullanılan sanal bir tablo oluşturur. Bu sanal tablolar arayan tarafından kullanılamaz (istemci uygulaması veya dış sorgu). Yalnızca son adım tarafından oluşturulan tablo arayana döndürülür. Bir sorguda belirli bir cümle belirtilmezse, karşılık gelen adım atlanır.
Mantıksal Sorgu İşleme Aşamalarının Kısa Açıklaması
Adımların açıklaması şimdilik çok anlamlı görünmüyorsa çok fazla endişelenmeyin. Bunlar referans olarak verilmiştir. Senaryo örneğinden sonra gelen bölümler adımları daha ayrıntılı olarak ele alacaktır.
FROM: FROM yan tümcesindeki ilk iki tablo arasında bir Kartezyen ürün (çapraz birleştirme) gerçekleştirilir ve sonuç olarak sanal tablo VT1 oluşturulur.
ON: ON filtresi VT1'e uygulanır. <join_condition>
VT2'ye yalnızca TRUE olan satırlar eklenir.
OUTER (birleştirme): Bir OUTER JOIN belirtilirse (bir CROSS JOIN veya INNER JOIN yerine), korunmuş tablodan veya eşleşme bulunmayan tablolardan gelen satırlar, dış satırlar olarak VT2'den satırlara eklenir. VT3. FROM yan tümcesinde ikiden fazla tablo görünürse, tüm birleştirmeler işleninceye kadar 1 ile 3 arasındaki adımlar son birleştirmenin sonucu ile FROM yan tümcesinde bir sonraki tablo arasına art arda uygulanır.
NEREDE: WHERE filtresi VT3'e uygulanır. <where_condition>
VT4'e yalnızca TRUE olan satırlar eklenir.
GROUP BY: VT4'teki satırlar, GROUP BY deyiminde belirtilen sütun listesine göre gruplar halinde düzenlenir. VT5 üretilir.
KÜP | ROLLUP: Üst gruplara (grup grupları) VT5'ten VT6 üreten satırlar eklenir.
HAVING: HAVING filtresi VT6'ya uygulanır. <having_condition>
VT7'ye yalnızca DOĞRU olan gruplar eklenir.
SELECT: SELECT listesi işlenir ve VT8 üretilir.
DISTINCT: Yinelenen satırlar VT8'den kaldırılır. VT9 üretilir.
ORDER BY: VT9'daki satırlar ORDER BY yan tümcesinde belirtilen sütun listesine göre sıralanır. Bir imleç üretilir (VC10).
TOP: Belirtilen satır sayısı veya yüzdesi VC10'un başından itibaren seçilir. Tablo VT11 üretilir ve arayana geri gönderilir.
Bu nedenle, (INNER JOIN) ON, WHERE yantümcesini uygulamadan önce verileri filtreleyecektir (VT'nin veri sayısı burada azaltılacaktır). Sonraki birleştirme koşulları, performansı artıran filtrelenmiş verilerle yürütülür. Bundan sonra sadece WHERE koşulu filtre koşullarını uygulayacaktır.
(ON / WHERE içinde koşullu ifadeler uygulamak, birkaç durumda çok fazla fark yaratmayacaktır. Bu, kaç tabloya katıldığınıza ve her birleştirme tablosunda mevcut satır sayısına bağlıdır)