SQL Server'da Group By, Have and Where cümlesinin yürütme sırası nedir?


93

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:


187

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





buna herhangi bir referans var mı?
Geshan

3
@Geshan, bakSET SHOWPLAN_ALL ON
KM.

Merhaba, bir sorum var. koşul, where koşulunu geçersiz kıldığında case ifadesi olacak mı?
MAX

2
Seçilmiş Madde ne olacak? Sonda mı?
MAX

Kısa ve özlü cevap! Teşekkür ederim!
Abhishek Ghosh

14

İş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

Microsoft'tan daha fazla bilgi alın


SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @valBurada ON katılımdan sonra gelir ve seçim önce gelir, herhangi bir açıklama var mı?
noob

Bu yalnızca bir SQL ifadesi yazmanın sözdizimidir. Bahsettiğim sıra, bir SQL motorunun değerlendirdiği gerçek sıradır. Bu, sorgu sözdiziminiz doğruysa, motor FROMönce değerlendirir , sonra ONvb.
Md. Suman Kabir

1
@ShailajaGuptaKapoor Bu blogları
/

WHERE, SELECT'ten önce gelirse, bu neden bir satır döndürür? foo'dan 1 = 0 olan toplamı (1) seçin
Tony B

8

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.


2
İyileştiricinin, bir toplamaya bağlı değillerse tümceleri HAVING konumundan WHERE konumuna taşıyabileceğini de eklemeye değer. Bu gösterilen sonuçları etkilemeyecektir.
Damien_The_Unbeliever

2

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


:-) ile bağlantı kurduğunuz çok güzel bir açıklama.
sleske

1
Bağlantı öldü. Bunu düzeltebilirsen harika olur :)
Akash KC

2

Oracle 12c'de, kodu her iki sırayla da çalıştırabilirsiniz:

Where
Group By
Having

Veya

Where 
Having
Group by

1

Uygulamak istiyorsanız ne yapmanız gerektiğini düşünün:

  • NEREDE : JOIN işlemlerini yürütme ihtiyacı.
  • GROUP BY : Birleşimdeki sonuçları "gruplamak" için Gruplama ölçütü belirtirsiniz, ardından WHERE kullanımından sonra JOIN işleminden sonra bunu yapması gerekir.
  • HAVING : HAVING, GROUP BY ifadelerinin dediği gibi filtreleme içindir. Ardından, GROUP BY'dan sonra yürütülür.

Sıralama, WHERE, GROUP BY ve HAVING şeklindedir.


Burada açıkladığınız şey harika. SAHİP OLMAK ile ilgili şüphelerimi ortadan kaldırdı. Özetlemek gerekirse - GROUP BY & HaveING, SELECT & WHERE ile aynı şekilde çalışır. HAVING yan tümcesi her zaman COMPLETE tablo verilerinde çalışır ve GRUPLANDIRILMIŞ veri ÜZERİNE DEĞİL, resimdeki GROUP BY koşulunu alır.
Naveen Kumar

1

Aşağıdaki Sırayla

  1. TARAFINDAN & KATIL
  2. NEREDE
  3. GRUPLAMA
  4. SAHİP
  5. SEÇ
  6. TARAFINDAN SİPARİŞ
  7. SINIR

0

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


0

Bu, bir Sorgunun SQL Yürütme Sırasıdır,

görüntü açıklamasını buraya girin

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 .

  1. 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.
  1. 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:-


-2

SEÇ
GELEN
JOIN
NEREDE
tarafından GRUBU
OLAN
SİPARİŞ BY


13
Bu aslında yanlış. MS Certified Trainer'lara ve resmi eğitim materyaline göre, Order By, Select'ten sonradır. Düşündüğün zaman biraz mantıklı. Henüz getirmediğiniz ve yapıştırmadığınız sanal bir masa sipariş etmek aptalca olur. :)
simme
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.