{"id":213,"title":"SQL Notlar\u0131: JOIN ve UNION Kullan\u0131m\u0131","content":"<p>## MySQL'de JOIN ve UNION Kullan\u0131m\u0131<\/p><p>MySQL'de `JOIN` ve `UNION` ifadeleri, birden fazla tablodan veri \u00e7ekmek ve bu verileri birle\u015ftirmek 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. **JOIN ile Tablolar\u0131 Birle\u015ftirme**<\/p><p>`JOIN` ifadesi, iki veya daha fazla tablodan veri \u00e7ekmek ve bu verileri belirli bir ko\u015fula g\u00f6re birle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. MySQL'de farkl\u0131 `JOIN` t\u00fcrleri bulunur:<\/p><p>- **INNER JOIN:** \u0130ki tablodaki e\u015fle\u015fen kay\u0131tlar\u0131 d\u00f6ner.<br>- **LEFT JOIN:** Sol tablodaki t\u00fcm kay\u0131tlar\u0131 ve sa\u011f tablodaki e\u015fle\u015fen kay\u0131tlar\u0131 d\u00f6ner. E\u015fle\u015fmeyen kay\u0131tlar i\u00e7in `NULL` de\u011fer d\u00f6ner.<br>- **RIGHT JOIN:** Sa\u011f tablodaki t\u00fcm kay\u0131tlar\u0131 ve sol tablodaki e\u015fle\u015fen kay\u0131tlar\u0131 d\u00f6ner. E\u015fle\u015fmeyen kay\u0131tlar i\u00e7in `NULL` de\u011fer d\u00f6ner.<br>- **FULL OUTER JOIN:** MySQL'de do\u011frudan desteklenmez, ancak `UNION` ile taklit edilebilir.<\/p><p>**\u00d6rnek Kullan\u0131m (INNER JOIN):**<br>```sql<br>SELECT user.name, course.name<br>FROM user<br>INNER JOIN course ON user.course = course.id;<br>```<\/p><p>Bu sorgu, `user` tablosundaki her kullan\u0131c\u0131n\u0131n ad\u0131n\u0131 ve `course` tablosundaki ilgili kursun ad\u0131n\u0131 d\u00f6ner.<\/p><p>**\u00d6rnek Kullan\u0131m (LEFT JOIN):**<br>```sql<br>SELECT user.name, course.name<br>FROM user<br>LEFT JOIN course ON user.course = course.id;<br>```<\/p><p>Bu sorgu, `user` tablosundaki t\u00fcm kullan\u0131c\u0131lar\u0131 ve e\u015fle\u015fen kurslar\u0131 d\u00f6ner. E\u011fer bir kullan\u0131c\u0131n\u0131n kursu yoksa, kurs ad\u0131 `NULL` olarak d\u00f6ner.<\/p><p>### 2. **FULL OUTER JOIN Taklidi**<\/p><p>MySQL'de `FULL OUTER JOIN` do\u011frudan desteklenmez, ancak `LEFT JOIN` ve `RIGHT JOIN` kullan\u0131larak taklit edilebilir.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT owners.owner, tools.tool<br>FROM owners<br>LEFT JOIN tools ON owners.owner_id = tools.owner_id<br>UNION ALL<br>SELECT owners.owner, tools.tool<br>FROM owners<br>RIGHT JOIN tools ON owners.owner_id = tools.owner_id<br>WHERE owners.owner_id IS NULL;<br>```<\/p><p>Bu sorgu, `owners` ve `tools` tablolar\u0131ndaki t\u00fcm kay\u0131tlar\u0131 birle\u015ftirir. E\u015fle\u015fmeyen kay\u0131tlar i\u00e7in `NULL` de\u011ferler d\u00f6ner.<\/p><p>### 3. **UNION ile Sorgular\u0131 Birle\u015ftirme**<\/p><p>`UNION` ifadesi, iki veya daha fazla `SELECT` sorgusunun sonu\u00e7lar\u0131n\u0131 birle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Varsay\u0131lan olarak, `UNION` yinelenen kay\u0131tlar\u0131 kald\u0131r\u0131r. E\u011fer yinelenen kay\u0131tlar\u0131 korumak istiyorsan\u0131z, `UNION ALL` kullanabilirsiniz.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT name, email, phone_number<br>FROM authors<br>UNION<br>SELECT name, email, phone_number<br>FROM editors;<br>```<\/p><p>Bu sorgu, `authors` ve `editors` tablolar\u0131ndaki t\u00fcm ad, e-posta ve telefon numaras\u0131 bilgilerini birle\u015ftirir ve yinelenen kay\u0131tlar\u0131 kald\u0131r\u0131r.<\/p><p>**\u00d6rnek Kullan\u0131m (UNION ALL):**<br>```sql<br>SELECT name, email, phone_number<br>FROM authors<br>UNION ALL<br>SELECT name, email, phone_number<br>FROM editors;<br>```<\/p><p>Bu sorgu, `authors` ve `editors` tablolar\u0131ndaki t\u00fcm ad, e-posta ve telefon numaras\u0131 bilgilerini birle\u015ftirir ve yinelenen kay\u0131tlar\u0131 korur.<\/p><p>### 4. **ORDER BY ve LIMIT ile UNION Kullan\u0131m\u0131**<\/p><p>`UNION` ile birle\u015ftirilen sorgular\u0131n sonu\u00e7lar\u0131n\u0131 s\u0131ralamak ve s\u0131n\u0131rlamak i\u00e7in `ORDER BY` ve `LIMIT` kullan\u0131labilir.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>(SELECT name, email FROM authors ORDER BY name LIMIT 10)<br>UNION<br>(SELECT name, email FROM editors ORDER BY name LIMIT 10)<br>ORDER BY name LIMIT 10;<br>```<\/p><p>Bu sorgu, `authors` ve `editors` tablolar\u0131ndaki ilk 10 kayd\u0131 birle\u015ftirir ve sonu\u00e7lar\u0131 `name` s\u00fctununa g\u00f6re s\u0131ralar.<\/p><p>### 5. **JOIN ile Alt Sorgu Kullan\u0131m\u0131**<\/p><p>`JOIN` ifadesi, alt sorgular (subqueries) ile birlikte kullan\u0131labilir. Bu, \u00f6zellikle karma\u015f\u0131k sorgularda kullan\u0131\u015fl\u0131d\u0131r.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT user.name, course.name<br>FROM user<br>INNER JOIN (SELECT id, name FROM course WHERE id &gt; 5) AS course ON user.course = course.id;<br>```<\/p><p>Bu sorgu, `course` tablosundaki `id` de\u011feri 5'ten b\u00fcy\u00fck olan kurslar\u0131 `user` tablosu ile birle\u015ftirir.<\/p><p>---<\/p><p>Bu bilgilerle, MySQL'de `JOIN` ve `UNION` ifadelerinin farkl\u0131 kullan\u0131m senaryolar\u0131n\u0131 ve ipu\u00e7lar\u0131n\u0131 daha iyi anlayabilirsiniz. Bir sonraki yaz\u0131da, alt sorgular ve daha geli\u015fmi\u015f SQL konular\u0131na de\u011finece\u011fiz.<\/p><p>&nbsp;<\/p>","excerpt":"MySQL'de `JOIN` ve `UNION` ifadelerinin farkl\u0131 kullan\u0131m senaryolar\u0131n\u0131 ve ipu\u00e7lar\u0131n\u0131 daha iyi anlayabilirsiniz. Bir sonraki yaz\u0131da, alt sorgular ve daha geli\u015fmi\u015f SQL konular\u0131na de\u011finece\u011fiz.","created_at":"2025-01-13 15:02:58","updated_at":"2026-09-23 20:07:43","category_id":9,"view_count":551,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 15:02:58","featured_image":"resimyok.jpg","slug":"sql-notlari-join-ve-union-kullanimi","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim"}