{"id":214,"title":"SQL Notlar\u0131: ORDER BY ve GROUP BY Kullan\u0131m\u0131","content":"<p>MySQL'de `ORDER BY` ve `GROUP BY` ifadeleri, sorgu sonu\u00e7lar\u0131n\u0131 s\u0131ralamak ve gruplamak i\u00e7in kullan\u0131l\u0131r. Bu b\u00f6l\u00fcmde, bu ifadelerin farkl\u0131 kullan\u0131m senaryolar\u0131n\u0131 ve ipu\u00e7lar\u0131n\u0131 inceleyece\u011fiz.<\/p><p>### 1. **ORDER BY ile S\u0131ralama**<\/p><p>`ORDER BY` ifadesi, sorgu sonu\u00e7lar\u0131n\u0131 belirli bir s\u00fctuna g\u00f6re s\u0131ralamak i\u00e7in kullan\u0131l\u0131r. Varsay\u0131lan olarak artan s\u0131rada (ASC) s\u0131ralama yapar, ancak azalan s\u0131rada (DESC) s\u0131ralama da yap\u0131labilir.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT * FROM employees&nbsp;<br>ORDER BY lastname ASC, firstname ASC;<br>```<\/p><p>Bu sorgu, `employees` tablosundaki kay\u0131tlar\u0131 \u00f6nce `lastname` s\u00fctununa g\u00f6re artan s\u0131rada, ard\u0131ndan `firstname` s\u00fctununa g\u00f6re artan s\u0131rada s\u0131ralar.<\/p><p>**NULL De\u011ferler:**<br>- `NULL` de\u011ferler, s\u0131ralama i\u015fleminde varsay\u0131lan olarak en ba\u015fa gelir. E\u011fer `NULL` de\u011ferlerin en sonda olmas\u0131n\u0131 istiyorsan\u0131z, a\u015fa\u011f\u0131daki gibi bir sorgu kullanabilirsiniz:<br>```sql<br>SELECT * FROM employees&nbsp;<br>ORDER BY lastname IS NULL, lastname ASC;<br>```<\/p><p>### 2. **GROUP BY ile Gruplama**<\/p><p>`GROUP BY` ifadesi, sorgu sonu\u00e7lar\u0131n\u0131 belirli bir s\u00fctuna veya s\u00fctunlara g\u00f6re gruplamak i\u00e7in kullan\u0131l\u0131r. Genellikle `COUNT`, `SUM`, `AVG`, `MIN`, `MAX` gibi agregasyon fonksiyonlar\u0131 ile birlikte kullan\u0131l\u0131r.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT department, COUNT(*) AS employee_count&nbsp;<br>FROM employees&nbsp;<br>GROUP BY department;<br>```<\/p><p>Bu sorgu, `employees` tablosundaki \u00e7al\u0131\u015fanlar\u0131 `department` s\u00fctununa g\u00f6re gruplar ve her departmandaki \u00e7al\u0131\u015fan say\u0131s\u0131n\u0131 d\u00f6ner.<\/p><p>### 3. **HAVING ile Gruplama Sonras\u0131 Filtreleme**<\/p><p>`HAVING` ifadesi, `GROUP BY` ile gruplanm\u0131\u015f sonu\u00e7lar \u00fczerinde filtreleme yapmak i\u00e7in kullan\u0131l\u0131r. `WHERE` ifadesi gibi \u00e7al\u0131\u015f\u0131r, ancak `WHERE` ifadesi gruplama \u00f6ncesi filtreleme yaparken, `HAVING` gruplama sonras\u0131 filtreleme yapar.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT department, AVG(salary) AS avg_salary&nbsp;<br>FROM employees&nbsp;<br>GROUP BY department&nbsp;<br>HAVING AVG(salary) &gt; 5000;<br>```<\/p><p>Bu sorgu, `employees` tablosundaki \u00e7al\u0131\u015fanlar\u0131 `department` s\u00fctununa g\u00f6re gruplar ve ortalama maa\u015f\u0131 5000'den b\u00fcy\u00fck olan departmanlar\u0131 d\u00f6ner.<\/p><p>### 4. **GROUP_CONCAT ile Gruplanm\u0131\u015f Verileri Birle\u015ftirme**<\/p><p>`GROUP_CONCAT` fonksiyonu, gruplanm\u0131\u015f verileri birle\u015ftirerek tek bir string olarak d\u00f6ner. Bu, \u00f6zellikle gruplanm\u0131\u015f verileri daha okunabilir hale getirmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT department, GROUP_CONCAT(lastname ORDER BY lastname ASC SEPARATOR ', ') AS employees&nbsp;<br>FROM employees&nbsp;<br>GROUP BY department;<br>```<\/p><p>Bu sorgu, `employees` tablosundaki \u00e7al\u0131\u015fanlar\u0131 `department` s\u00fctununa g\u00f6re gruplar ve her departmandaki \u00e7al\u0131\u015fanlar\u0131n soyadlar\u0131n\u0131 birle\u015ftirerek d\u00f6ner.<\/p><p>### 5. **Aggregasyon Fonksiyonlar\u0131 ile Gruplama**<\/p><p>`GROUP BY` ifadesi, genellikle agregasyon fonksiyonlar\u0131 ile birlikte kullan\u0131l\u0131r. \u0130\u015fte baz\u0131 yayg\u0131n agregasyon fonksiyonlar\u0131:<\/p><p>- **COUNT:** Belirli bir s\u00fctundaki sat\u0131r say\u0131s\u0131n\u0131 d\u00f6ner.<br>- **SUM:** Belirli bir s\u00fctundaki de\u011ferlerin toplam\u0131n\u0131 d\u00f6ner.<br>- **AVG:** Belirli bir s\u00fctundaki de\u011ferlerin ortalamas\u0131n\u0131 d\u00f6ner.<br>- **MIN:** Belirli bir s\u00fctundaki en k\u00fc\u00e7\u00fck de\u011feri d\u00f6ner.<br>- **MAX:** Belirli bir s\u00fctundaki en b\u00fcy\u00fck de\u011feri d\u00f6ner.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT department,&nbsp;<br>&nbsp; &nbsp; &nbsp; COUNT(*) AS employee_count,&nbsp;<br>&nbsp; &nbsp; &nbsp; AVG(salary) AS avg_salary,&nbsp;<br>&nbsp; &nbsp; &nbsp; MIN(salary) AS min_salary,&nbsp;<br>&nbsp; &nbsp; &nbsp; MAX(salary) AS max_salary&nbsp;<br>FROM employees&nbsp;<br>GROUP BY department;<br>```<\/p><p>Bu sorgu, `employees` tablosundaki \u00e7al\u0131\u015fanlar\u0131 `department` s\u00fctununa g\u00f6re gruplar ve her departmandaki \u00e7al\u0131\u015fan say\u0131s\u0131n\u0131, ortalama maa\u015f\u0131, en d\u00fc\u015f\u00fck ve en y\u00fcksek maa\u015f\u0131 d\u00f6ner.<\/p><p>### 6. **ONLY_FULL_GROUP_BY Hatas\u0131 ve \u00c7\u00f6z\u00fcmleri**<\/p><p>MySQL 5.7 ve sonraki s\u00fcr\u00fcmlerde, `ONLY_FULL_GROUP_BY` modu varsay\u0131lan olarak etkinle\u015ftirilmi\u015ftir. Bu mod, `GROUP BY` sorgular\u0131nda se\u00e7ilen s\u00fctunlar\u0131n ya `GROUP BY` ifadesinde belirtilmesini ya da bir agregasyon fonksiyonu i\u00e7inde kullan\u0131lmas\u0131n\u0131 gerektirir. Aksi takdirde, `Error 1055` hatas\u0131 al\u0131n\u0131r.<\/p><p>**\u00d6rnek Hata:**<br>```sql<br>SELECT department, lastname&nbsp;<br>FROM employees&nbsp;<br>GROUP BY department;<br>```<\/p><p>Bu sorgu, `ONLY_FULL_GROUP_BY` modu etkin oldu\u011funda hata verecektir \u00e7\u00fcnk\u00fc `lastname` s\u00fctunu ne `GROUP BY` ifadesinde belirtilmi\u015ftir ne de bir agregasyon fonksiyonu i\u00e7inde kullan\u0131lm\u0131\u015ft\u0131r.<\/p><p>**\u00c7\u00f6z\u00fcm:**<br>```sql<br>SELECT department, GROUP_CONCAT(lastname) AS employees&nbsp;<br>FROM employees&nbsp;<br>GROUP BY department;<br>```<\/p><p>Bu sorgu, `lastname` s\u00fctununu `GROUP_CONCAT` fonksiyonu i\u00e7inde kullanarak hatay\u0131 \u00f6nler.<\/p><p>---<\/p><p>Bu bilgilerle, MySQL'de `ORDER BY` ve `GROUP BY` ifadelerinin farkl\u0131 kullan\u0131m senaryolar\u0131n\u0131 ve ipu\u00e7lar\u0131n\u0131 daha iyi anlayabilirsiniz.<\/p>","excerpt":"MySQL'de `ORDER BY` ve `GROUP BY` ifadeleri, sorgu sonu\u00e7lar\u0131n\u0131 s\u0131ralamak ve gruplamak i\u00e7in kullan\u0131l\u0131r. Bu b\u00f6l\u00fcmde, bu ifadelerin farkl\u0131 kullan\u0131m senaryolar\u0131n\u0131 ve ipu\u00e7lar\u0131n\u0131 inceleyece\u011fiz.","created_at":"2025-01-13 14:49:54","updated_at":"2026-09-23 17:39:20","category_id":9,"view_count":631,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 14:49:54","featured_image":"resimyok.jpg","slug":"sql-notlari-order-by-ve-group-by-kullanimi","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim"}