GROUP BY ve HAVING ile bir WHERE cümlesini kullandığımızda bir SQL sorgusunun yürütme sırası ile kafam karıştı. Önce hangisi idam edilir? Sıra nedir?
GROUP BY ve HAVING ile bir WHERE cümlesini kullandığımızda bir SQL sorgusunun yürütme sırası ile kafam karıştı. Önce hangisi idam edilir? Sıra nedir?
Yanıtlar:
sırayla:
DAN ve artır s belirlemek ve filtre sırası satırlarda daha fazla filtre GRUP İLE gruba satırları birleştiren SAHİP filtreler grupları İLE SİPARİŞ düzenler kalan satırlar / gruplar LİMİT kalan satırlar / grup üzerindeki filtreler
SET SHOWPLAN_ALL ON
İşte sql sunucusunun tam sırası:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
Dolayısıyla, yukarıdaki listeden, yürütme sırasını kolayca anlayabilirsiniz GROUP BY, HAVING and WHERE
:
1. WHERE
2. GROUP BY
3. HAVING
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val
Burada ON katılımdan sonra gelir ve seçim önce gelir, herhangi bir açıklama var mı?
FROM
önce değerlendirir , sonra ON
vb.
NEREDE önce gelir, sonra sorgunun sonucunu GRUPLARSINIZ ve son olarak, gruplanmış sonucu filtrelemek için en az HAVING yan tümcesi alınır. Bu "mantıksal" sıralama, bunun motora teknik olarak nasıl uygulandığını bilmiyorum.
Sanırım bu motorda Matthias'ın dediği gibi uygulandı: NEREDE, GRUPLA, HAVING
Tüm diziyi listeleyen çevrimiçi bir referans bulmaya çalışıyordum (yani "SEÇ" en altta geliyor), ancak bulamıyorum. Solid Quality Learning tarafından çok uzun zaman önce okumadığım "Inside Microsoft SQL Server 2005" kitabında ayrıntılı olarak anlatılmıştı.
Düzenle: Bir bağlantı bulundu: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Uygulamak istiyorsanız ne yapmanız gerektiğini düşünün:
Sıralama, WHERE, GROUP BY ve HAVING şeklindedir.
Aşağıdaki Sırayla
Maddeye sahip olmak, maddeye göre gruptan önce / önce gelebilir.
Örnek: * FROM test_std'yi seçin; ROLL_NO SNAME DOB ÖĞRETİMİ
1 John 27-AUG-18 Wills
2 Knit 27-AUG-18 Prestion
3 Perl 27-AUG-18 Wills
4 Ohrm 27-AUG-18 Woods
5 Smith 27-AUG-18 Charmy
6 Jony 27-AUG-18 Wills
Warner 20-NOV-18 Wills
Marsh 12-NOV-18 Langer
FINCH 18-OCT-18 Langer
9 satır seçildi.
öğretme, sayma ( ) öğesinden sayma ( )> 1 gruba sahip olan test_std'den TEACH'e göre say ;
SAYISI ÖĞRET
Langer 2 Wills 4
Bu, bir Sorgunun SQL Yürütme Sırasıdır,
Yürütme sırasını bu makaleden örneklerle kontrol edebilirsiniz .
Sizin için aşağıdaki satırlar yardımcı olabilir ve doğrudan bu makaleden alınmıştır .
- GROUP BY -> WHERE kısıtlamaları uygulandıktan sonra kalan satırlar, GROUP BY yan tümcesinde belirtilen sütundaki ortak değerlere göre gruplanır. Gruplamanın bir sonucu olarak, yalnızca o sütunda benzersiz değerler olduğu kadar satır olacaktır. Örtük olarak, bu, yalnızca sorgunuzda toplama işlevleriniz olduğunda bunu kullanmanız gerektiği anlamına gelir.
- HAVING -> Sorgu bir GROUP BY yan tümcesine sahipse, HAVING yan tümcesindeki kısıtlamalar daha sonra gruplanmış satırlara uygulanır, kısıtlamayı karşılamayan gruplanmış satırları atın. WHERE yan tümcesi gibi, takma adlara da çoğu veritabanında bu adımdan erişilemez.
Referanslar:-
SEÇ
GELEN
JOIN
NEREDE
tarafından GRUBU
OLAN
SİPARİŞ BY