# ö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ı: JOIN ve UNION Kullanımı

SQL Notları: JOIN ve UNION Kullanımı

MySQL'de `JOIN` ve `UNION` ifadelerinin farklı kullanım senaryolarını ve ipuçlarını daha iyi anlayabilirsiniz. Bir sonraki yazıda, alt sorgular ve daha gelişmiş SQL konularına değineceğiz.

## MySQL'de JOIN ve UNION Kullanımı

MySQL'de `JOIN` ve `UNION` ifadeleri, birden fazla tablodan veri çekmek ve bu verileri birleştirmek için kullanılır. Bu bölümde, bu ifadelerin farklı kullanım senaryolarını ve ipuçlarını inceleyeceğiz.

### 1. **JOIN ile Tabloları Birleştirme**

`JOIN` ifadesi, iki veya daha fazla tablodan veri çekmek ve bu verileri belirli bir koşula göre birleştirmek için kullanılır. MySQL'de farklı `JOIN` türleri bulunur:

- **INNER JOIN:** İki tablodaki eşleşen kayıtları döner.
- **LEFT JOIN:** Sol tablodaki tüm kayıtları ve sağ tablodaki eşleşen kayıtları döner. Eşleşmeyen kayıtlar için `NULL` değer döner.
- **RIGHT JOIN:** Sağ tablodaki tüm kayıtları ve sol tablodaki eşleşen kayıtları döner. Eşleşmeyen kayıtlar için `NULL` değer döner.
- **FULL OUTER JOIN:** MySQL'de doğrudan desteklenmez, ancak `UNION` ile taklit edilebilir.

**Örnek Kullanım (INNER JOIN):**
```sql
SELECT user.name, course.name
FROM user
INNER JOIN course ON user.course = course.id;
```

Bu sorgu, `user` tablosundaki her kullanıcının adını ve `course` tablosundaki ilgili kursun adını döner.

**Örnek Kullanım (LEFT JOIN):**
```sql
SELECT user.name, course.name
FROM user
LEFT JOIN course ON user.course = course.id;
```

Bu sorgu, `user` tablosundaki tüm kullanıcıları ve eşleşen kursları döner. Eğer bir kullanıcının kursu yoksa, kurs adı `NULL` olarak döner.

### 2. **FULL OUTER JOIN Taklidi**

MySQL'de `FULL OUTER JOIN` doğrudan desteklenmez, ancak `LEFT JOIN` ve `RIGHT JOIN` kullanılarak taklit edilebilir.

**Örnek Kullanım:**
```sql
SELECT owners.owner, tools.tool
FROM owners
LEFT JOIN tools ON owners.owner_id = tools.owner_id
UNION ALL
SELECT owners.owner, tools.tool
FROM owners
RIGHT JOIN tools ON owners.owner_id = tools.owner_id
WHERE owners.owner_id IS NULL;
```

Bu sorgu, `owners` ve `tools` tablolarındaki tüm kayıtları birleştirir. Eşleşmeyen kayıtlar için `NULL` değerler döner.

### 3. **UNION ile Sorguları Birleştirme**

`UNION` ifadesi, iki veya daha fazla `SELECT` sorgusunun sonuçlarını birleştirmek için kullanılır. Varsayılan olarak, `UNION` yinelenen kayıtları kaldırır. Eğer yinelenen kayıtları korumak istiyorsanız, `UNION ALL` kullanabilirsiniz.

**Örnek Kullanım:**
```sql
SELECT name, email, phone_number
FROM authors
UNION
SELECT name, email, phone_number
FROM editors;
```

Bu sorgu, `authors` ve `editors` tablolarındaki tüm ad, e-posta ve telefon numarası bilgilerini birleştirir ve yinelenen kayıtları kaldırır.

**Örnek Kullanım (UNION ALL):**
```sql
SELECT name, email, phone_number
FROM authors
UNION ALL
SELECT name, email, phone_number
FROM editors;
```

Bu sorgu, `authors` ve `editors` tablolarındaki tüm ad, e-posta ve telefon numarası bilgilerini birleştirir ve yinelenen kayıtları korur.

### 4. **ORDER BY ve LIMIT ile UNION Kullanımı**

`UNION` ile birleştirilen sorguların sonuçlarını sıralamak ve sınırlamak için `ORDER BY` ve `LIMIT` kullanılabilir.

**Örnek Kullanım:**
```sql
(SELECT name, email FROM authors ORDER BY name LIMIT 10)
UNION
(SELECT name, email FROM editors ORDER BY name LIMIT 10)
ORDER BY name LIMIT 10;
```

Bu sorgu, `authors` ve `editors` tablolarındaki ilk 10 kaydı birleştirir ve sonuçları `name` sütununa göre sıralar.

### 5. **JOIN ile Alt Sorgu Kullanımı**

`JOIN` ifadesi, alt sorgular (subqueries) ile birlikte kullanılabilir. Bu, özellikle karmaşık sorgularda kullanışlıdır.

**Örnek Kullanım:**
```sql
SELECT user.name, course.name
FROM user
INNER JOIN (SELECT id, name FROM course WHERE id > 5) AS course ON user.course = course.id;
```

Bu sorgu, `course` tablosundaki `id` değeri 5'ten büyük olan kursları `user` tablosu ile birleştirir.

---

Bu bilgilerle, MySQL'de `JOIN` ve `UNION` ifadelerinin farklı kullanım senaryolarını ve ipuçlarını daha iyi anlayabilirsiniz. Bir sonraki yazıda, alt sorgular ve daha gelişmiş SQL konularına değineceğiz.