SQL Notları: JOIN ve UNION Kullanımı

## 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.