# önder online
Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri Yapay zekâ ve otomasyonun güvenliğe etkileri Microsoft 365 ve Active Directory güvenlik rehberleri Yazılım geliştirmede güvenlik odaklı yaklaşımlar Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri

Menu

SQL Notları: ORDER BY ve GROUP BY Kullanımı

SQL Notları: ORDER BY ve GROUP BY Kullanımı

MySQL'de `ORDER BY` ve `GROUP BY` ifadeleri, sorgu sonuçlarını sıralamak ve gruplamak için kullanılır. Bu bölümde, bu ifadelerin farklı kullanım senaryolarını ve ipuçlarını inceleyeceğiz.

MySQL'de `ORDER BY` ve `GROUP BY` ifadeleri, sorgu sonuçlarını sıralamak ve gruplamak için kullanılır. Bu bölümde, bu ifadelerin farklı kullanım senaryolarını ve ipuçlarını inceleyeceğiz.

### 1. **ORDER BY ile Sıralama**

`ORDER BY` ifadesi, sorgu sonuçlarını belirli bir sütuna göre sıralamak için kullanılır. Varsayılan olarak artan sırada (ASC) sıralama yapar, ancak azalan sırada (DESC) sıralama da yapılabilir.

**Örnek Kullanım:**
```sql
SELECT * FROM employees 
ORDER BY lastname ASC, firstname ASC;
```

Bu sorgu, `employees` tablosundaki kayıtları önce `lastname` sütununa göre artan sırada, ardından `firstname` sütununa göre artan sırada sıralar.

**NULL Değerler:**
- `NULL` değerler, sıralama işleminde varsayılan olarak en başa gelir. Eğer `NULL` değerlerin en sonda olmasını istiyorsanız, aşağıdaki gibi bir sorgu kullanabilirsiniz:
```sql
SELECT * FROM employees 
ORDER BY lastname IS NULL, lastname ASC;
```

### 2. **GROUP BY ile Gruplama**

`GROUP BY` ifadesi, sorgu sonuçlarını belirli bir sütuna veya sütunlara göre gruplamak için kullanılır. Genellikle `COUNT`, `SUM`, `AVG`, `MIN`, `MAX` gibi agregasyon fonksiyonları ile birlikte kullanılır.

**Örnek Kullanım:**
```sql
SELECT department, COUNT(*) AS employee_count 
FROM employees 
GROUP BY department;
```

Bu sorgu, `employees` tablosundaki çalışanları `department` sütununa göre gruplar ve her departmandaki çalışan sayısını döner.

### 3. **HAVING ile Gruplama Sonrası Filtreleme**

`HAVING` ifadesi, `GROUP BY` ile gruplanmış sonuçlar üzerinde filtreleme yapmak için kullanılır. `WHERE` ifadesi gibi çalışır, ancak `WHERE` ifadesi gruplama öncesi filtreleme yaparken, `HAVING` gruplama sonrası filtreleme yapar.

**Örnek Kullanım:**
```sql
SELECT department, AVG(salary) AS avg_salary 
FROM employees 
GROUP BY department 
HAVING AVG(salary) > 5000;
```

Bu sorgu, `employees` tablosundaki çalışanları `department` sütununa göre gruplar ve ortalama maaşı 5000'den büyük olan departmanları döner.

### 4. **GROUP_CONCAT ile Gruplanmış Verileri Birleştirme**

`GROUP_CONCAT` fonksiyonu, gruplanmış verileri birleştirerek tek bir string olarak döner. Bu, özellikle gruplanmış verileri daha okunabilir hale getirmek için kullanışlıdır.

**Örnek Kullanım:**
```sql
SELECT department, GROUP_CONCAT(lastname ORDER BY lastname ASC SEPARATOR ', ') AS employees 
FROM employees 
GROUP BY department;
```

Bu sorgu, `employees` tablosundaki çalışanları `department` sütununa göre gruplar ve her departmandaki çalışanların soyadlarını birleştirerek döner.

### 5. **Aggregasyon Fonksiyonları ile Gruplama**

`GROUP BY` ifadesi, genellikle agregasyon fonksiyonları ile birlikte kullanılır. İşte bazı yaygın agregasyon fonksiyonları:

- **COUNT:** Belirli bir sütundaki satır sayısını döner.
- **SUM:** Belirli bir sütundaki değerlerin toplamını döner.
- **AVG:** Belirli bir sütundaki değerlerin ortalamasını döner.
- **MIN:** Belirli bir sütundaki en küçük değeri döner.
- **MAX:** Belirli bir sütundaki en büyük değeri döner.

**Örnek Kullanım:**
```sql
SELECT department, 
      COUNT(*) AS employee_count, 
      AVG(salary) AS avg_salary, 
      MIN(salary) AS min_salary, 
      MAX(salary) AS max_salary 
FROM employees 
GROUP BY department;
```

Bu sorgu, `employees` tablosundaki çalışanları `department` sütununa göre gruplar ve her departmandaki çalışan sayısını, ortalama maaşı, en düşük ve en yüksek maaşı döner.

### 6. **ONLY_FULL_GROUP_BY Hatası ve Çözümleri**

MySQL 5.7 ve sonraki sürümlerde, `ONLY_FULL_GROUP_BY` modu varsayılan olarak etkinleştirilmiştir. Bu mod, `GROUP BY` sorgularında seçilen sütunların ya `GROUP BY` ifadesinde belirtilmesini ya da bir agregasyon fonksiyonu içinde kullanılmasını gerektirir. Aksi takdirde, `Error 1055` hatası alınır.

**Örnek Hata:**
```sql
SELECT department, lastname 
FROM employees 
GROUP BY department;
```

Bu sorgu, `ONLY_FULL_GROUP_BY` modu etkin olduğunda hata verecektir çünkü `lastname` sütunu ne `GROUP BY` ifadesinde belirtilmiştir ne de bir agregasyon fonksiyonu içinde kullanılmıştır.

**Çözüm:**
```sql
SELECT department, GROUP_CONCAT(lastname) AS employees 
FROM employees 
GROUP BY department;
```

Bu sorgu, `lastname` sütununu `GROUP_CONCAT` fonksiyonu içinde kullanarak hatayı önler.

---

Bu bilgilerle, MySQL'de `ORDER BY` ve `GROUP BY` ifadelerinin farklı kullanım senaryolarını ve ipuçlarını daha iyi anlayabilirsiniz.