WHERE ve HAVING cümleleri bu makalede derinlemesine tartışılmaktadır. Ayrıca SQL sorgularındaki kayıtları filtrelemek için de kullanılırlar. NEREDE ve HAVING cümleciği arasındaki fark, görüşme sırasında sorulan en yaygın sorudur. Aralarındaki temel fark, WHERE yan tümcesinin herhangi bir gruplama yapılmadan önce kayıtları filtrelemek için bir koşulu belirtmek için kullanılması, HAVING yan tümcesinin ise bir gruptaki değerleri filtrelemek için bir koşul belirtmek için kullanılmasıdır. Karşılaştırma yapmadan önce öncelikle bunları bileceğiz. SQL maddeleri.
NEREDE Maddesi
MySQL'deki WHERE cümlesi SELECT ile birlikte kullanılır, SOKMAK , GÜNCELLEME , Ve SİLMEK tablodan veya ilişkiden verileri filtrelemek için sorgular. JOIN yan tümcesini kullanarak tek bir tablodan veya birden çok tablodan kayıt alırken belirli bir koşulu açıklar. Belirtilen koşul karşılanırsa tablodan belirli değeri döndürür. WHERE yan tümcesi seçili sütunlara koşullar yerleştirir.
MySQL'deki WHERE yan tümcesi ayrıca mantıksal bağlaçları uygulama VE, VEYA ve DEĞİL. Bunlar olması gereken Boole koşulu olarak bilinir. doğru Verileri almak için. Mantıksal bağlayıcı ifadeler, işlenenleri olarak karşılaştırma işleçlerini kullanır:<, ,>=, = ve . Karşılaştırma operatörleri genellikle dizeleri ve aritmetik ifadeleri karşılaştırmak için kullanılır.,>
Aşağıdaki sözdizimi WHERE yan tümcesinin kullanımını göstermektedir:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Bu cümleyi anlamak için bir örnek verelim. Diyelim ki adında bir tablomuz var. çalışanlar aşağıdaki verileri içeren:
Eğer istersek çalışma saatleri 9'dan fazla olan çalışanın detayını almak için , o zaman ifadeyi şu şekilde kullanabiliriz:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Çalışma saatleri 9'dan büyük olan çalışan ayrıntılarını görebileceğimiz aşağıdaki çıktıyı alacağız:
Yukarıdaki sorguyu şununla kullanırsak GRUPLANDIRMA ŞEKLİ maddesinde farklı bir sonuç elde edeceğiz:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
İşte çıktı:
HAVING Maddesi
MySQL'de HAVING yan tümcesi GROUP BY ile birlikte kullanılır cümlesi, sonuçta hangi grup sonuçlarının görüneceğini filtreleyen koşulları belirtmemize olanak sağlar. Nihai sonuçtaki gruplardan yalnızca belirli koşulları karşılayan değerleri döndürür. Seçim esnasında WHERE ve HAVING deyimini birlikte de kullanabiliriz. Bu durumda, WHERE yan tümcesi önce bireysel satırları filtreler, ardından satırlar gruplandırılır, toplu hesaplamalar gerçekleştirir ve son olarak HAVING yan tümcesi grupları filtreler.
Bu yan tümce, GROUP BY yan tümcesi tarafından oluşturulan gruplara koşullar yerleştirir. SQL deyimi GROUP BY anahtar sözcüğünü kullanmadığında WHERE yan tümcesi gibi davranır. SUM , MIN, MAX, AVG ve gibi toplama (grup) işlevlerini kullanabiliriz. SAYMAK yalnızca iki cümleyle: SELECT ve HAVING.
Aşağıdaki sözdizimi HAVING yan tümcesinin kullanımını göstermektedir:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Bu cümleyi anlamak için bir örnek verelim. Burada aynı tabloyu düşünüyoruz çalışanlar gösteri için.
Eğer istersek çalışma süresi 6 saatten fazla olan her çalışan için toplam çalışma saatini almak , o zaman ifadeyi şu şekilde kullanabiliriz:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Her çalışanın toplam çalışma saatlerini görebileceğimiz aşağıdaki çıktıyı alacağız:
WHERE ve HAVING Cümlesi Arasındaki Temel Farklılıklar
Aşağıdaki noktalar veritabanı ile şema arasındaki temel farkları açıklamaktadır:
- WHERE yan tümcesi tek tek satırları filtrelerken, HAVING yan tümcesi tek seferde bir satır yerine grupları filtreler.
- WHERE yan tümcesini, tek tek satırları filtrelemek için çalıştığı için toplama işlevleriyle kullanamayız. Buna karşılık HAVING, grupları filtrelemek için kullanıldığından toplama işlevleriyle çalışabilir.
- Satır işlemleri WHERE yan tümcesi tarafından gerçekleştirilir, HAVING yan tümcesi ise özetlenmiş satırlara veya gruplara yönelik sütun işlemlerini yönetir.
- WHERE, GROUP BY'den önce gelir; bu, WHERE yan tümcesinin, toplu hesaplamaları gerçekleştirmeden önce satırları filtrelediği anlamına gelir. HAVING, GROUP BY'den sonra gelir; bu, HAVING yan tümcesinin toplu hesaplamalar yapıldıktan sonra satırları filtrelediği anlamına gelir. Sonuç olarak, HAVING, verimlilik açısından WHERE'den daha yavaştır ve mümkün olan her yerde bundan kaçınılmalıdır.
- WHERE ve HAVING yan tümcesini bir SELECT sorgusunda birleştirebiliriz. Bu durumda, tek tek satırları filtrelemek için ilk olarak WHERE yan tümcesi kullanılır. Daha sonra satırlar gruplandırılır, toplu hesaplamalar yapılır ve son olarak HAVING yan tümcesi grupları filtrelemek için kullanılır.
- WHERE deyimi, belirtilen koşula göre istenen verileri alır. Öte yandan, HAVING deyimi önce tüm verileri getirir ve ardından belirtilen koşula göre ayırma yapılır.
- SELECT ifadesi olmadan HAVING yan tümcesini kullanamayız. Bunun tersine, SELECT, UPDATE ve DELETE ifadeleriyle WHERE ifadesini kullanabiliriz.
- WHERE yan tümcesi bir ön filtredir, HAVING yan tümcesi ise bir son filtredir.
WHERE ve HAVING Karşılaştırma Tablosu
Aşağıdaki karşılaştırma tablosu temel farklarını hızlı bir şekilde açıklamaktadır:
Karşılaştırma Temeli | NEREDE Maddesi | HAVING Maddesi |
---|---|---|
Tanım | Bireysel satırlarda filtreleme yapmak için kullanılır. | Gruplar üzerinde filtreleme yapmak için kullanılır. |
Temel | Satır işlemlerinde uygulanır. | Sütun işlemlerinde uygulanır. |
Veri getiriliyor | WHERE deyimi, belirtilen koşula göre belirli satırlardan belirli verileri getirir | HAVING yan tümcesi ilk önce tüm verileri getirir. Daha sonra bunları verilen duruma göre ayırır. |
Toplama İşlevleri | WHERE yan tümcesi toplu işlevlerle çalışmaya izin vermez. | HAVING yan tümcesi toplu işlevlerle çalışabilir. |
Gibi davran | WHERE deyimi ön filtre görevi görür. | HAVING yan tümcesi bir son filtre görevi görür. |
İle kullanılan | WHERE deyimini SELECT, UPDATE ve DELETE ifadeleriyle birlikte kullanabiliriz. | HAVING deyimi yalnızca SELECT deyimiyle kullanılabilir. |
GRUPLANDIRMA ŞEKLİ | GROUP BY deyimi WHERE deyiminden sonra gelir. | GROUP BY cümlesi HAVING cümlesinden önce gelir. |
Çözüm
Bu yazımızda WHERE ve HAVING cümlesi arasında bir karşılaştırma yaptık. Burada, bazı ek özelliklerin HAVING yan tümcesini daha popüler hale getirmesi dışında, her iki yan tümcenin verileri filtrelemede aynı şekilde çalıştığı sonucuna varıyoruz. HAVING yan tümcesindeki toplama işlevleriyle verimli bir şekilde çalışabiliriz, ancak WHERE toplama işlevlerine izin vermez.