MySQL UNION – Eğitimi Tamamla
⚡ Akıllı Özet
MySQL UNION, iki veya daha fazla SELECT sorgusunun sonuçlarını tek bir birleştirilmiş sonuç kümesinde birleştirir. Bu açıklama, bir UNION işlemini geçerli kılan sütun kurallarını, UNION DISTINCT ve UNION ALL arasındaki farkı ve myflixdb veritabanına karşı çalıştırılan örnekleri kapsamaktadır.

Sendika nedir? MySQL?
BİRLİĞİ bir MySQL Birden fazla SELECT sorgusunun sonuçlarını tek bir sonuç kümesinde birleştiren operatör. İkinci sorgunun döndürdüğü satırlar, birinci sorgunun döndürdüğü satırların altına yerleştirilir; bu da iki ayrı liste yerine tek bir dikey liste oluşturur.
Bunun çalışması için tek şart, birleştirilmesi gereken tüm SELECT sorgularındaki sütun sayılarının aynı olmasıdır.
Aşağıdaki gibi iki tablomuz olduğunu varsayalım.
Her iki tabloda da aynı türden iki sütun bulunduğundan, birleşim işlemine uygundurlar. Aşağıdaki örnekler tam olarak bu iki tabloyu birleştirir.
UNION'u Neden Kullanmalısınız?
Diyelim ki veritabanı tasarımınızda bir hata var ve aynı amaç için kullanılan iki farklı tablo kullanıyorsunuz. Bu iki tabloyu, yinelenen kayıtları da hariç tutarak tek bir tabloda birleştirmek istiyorsunuz.ping Yeni tabloya aktarın. Bu gibi durumlarda UNION kullanabilirsiniz.
Bu operatör, günlük raporlama işlerinde de faydalıdır:
- Archived ve canlı veriler: Aynı sütunları paylaşan güncel bir tablo ve arşiv tablosu, fiziksel olarak birleştirilmeden birlikte raporlanabilir.
- Çeşitli kaynaklardan, tek bir rapordan: Üyeler ve filmler veya iki bölgeden yapılan satışlar, hızlı bir denetim için tek bir çıktıda listelenebilir.
- Göç kontrolleri: Eski tablo ve yeni tablodaki satırlar, eski tablo silinmeden önce üst üste yığılıp karşılaştırılabilir.
Birleşim (union) işlemi, birleştirme (join) işleminin yerini tutmaz. Birleşim işlemi satırları alt alta eklerken, birleştirme işlemi sütunları yan yana ekler ve bu fark, işlemin hangi operatörü gerektirdiğini belirler.
MySQL UNION Sözdizimi ve Kuralları
Amacın netleşmesinin ardından, ifadenin yapısına ve veritabanının uyguladığı kurallara bakalım.
SELECT column1, column2 FROM `table1` UNION [DISTINCT | ALL] SELECT column1, column2 FROM `table2`;
Her sendikayı üç kural yönetir:
- Eşit sütun sayısı. Her SELECT ifadesi aynı sayıda sütun döndürmelidir, aksi takdirde MySQL 1222 numaralı hatayı veriyor.
- Uyumlu veri tipleri aynı sırada. Birinci sorgunun birinci sütunu, ikinci sorgunun birinci sütunuyla eşleştirilir; dolayısıyla bir sayı bir sayıyla, bir metin de bir metinle eşleşmelidir.
- İsimler ilk sorgudan geliyor. Sonuç kümesinin başlığı ilk SELECT sorgusundan alınır, bu nedenle herhangi bir takma ad oraya aittir.
An ORDER BY ya da LIMIT Sondaki madde, sonucun tek bir dalına değil, birleştirilmiş sonucuna uygulanır ve ilk SELECT sorgusu tarafından üretilen sütun adlarına atıfta bulunmalıdır.
UNION DISTINCT vs UNION ALL
Kurallar belirlendikten sonra, geriye kalan karar, yinelenen satırların korunup korunmayacağıdır.
DISTINCT Kullanarak Tabloları Birleştirme
Şimdi, DISTINCT kullanarak her iki tabloyu birleştirmek için bir UNION sorgusu oluşturalım.
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1, column2 FROM `table2`;
Burada yinelenen satırlar kaldırılır ve yalnızca benzersiz satırlar döndürülür.
Not: MySQL Hiçbir şey belirtilmemişse UNION sorguları yürütülürken DISTINCT yan tümcesini varsayılan olarak kullanır.
ALL Kullanarak Tabloları Birleştirme
Şimdi, ALL operatörünü kullanarak her iki tabloyu birleştirmek için bir UNION sorgusu oluşturalım.
SELECT `column1`, `column2` FROM `table1` UNION ALL SELECT `column1`, `column2` FROM `table2`;
Burada ALL kullandığımız için yinelenen satırlar da dahil edilmiştir.
İki görsel, aradaki farkı kolayca görmeyi sağlıyor ve aşağıdaki tablo bunu özetliyor.
| Karşılaştırma noktası | BİRLİK FARKLI | BİRLİĞİ TÜMÜ |
|---|---|---|
| Yinelenen satırlar | Sonuçtan kaldırıldı | Sonuçta yer aldı. |
| Varsayılan davranış | Evet, hiçbir şey belirtilmediğinde uygulanır. | Hayır, ALL anahtar kelimesi yazılmalıdır. |
| hız | Daha yavaş, bir veri tekilleştirme işlemi gereklidir. | Daha hızlı, satırlar okundukça döndürülür. |
| En iyi kullanım zamanı | Birleştirilmiş listede benzersiz satırlar bulunmalıdır. | Her satır önemlidir, aksi takdirde tekrarlanan kayıtlar oluşamaz. |
💡 İpucu: İki dal aynı satırları üretemiyorsa, UNION ALL seçeneğini kullanın. Bu durumda veritabanı, DISTINCT'in gerektirdiği sıralama ve karşılaştırma işlemlerini atlar; bu da büyük tablolarda önemli bir tasarruf sağlar.
Pratik Örnek Kullanımı MySQL Tezgâh
Şimdiye kadar kullanılan örneklerde örnek tablolar kullanılmıştı. Aynı sorgu şimdi gerçek myflixdb veritabanına karşı çalıştırılıyor ve burada iki tablo oldukça farklı kayıtlar içeriyor.
myFlixDB'mizde, gelin bunları birleştirelim. membership_number hem de full_names Üyeler tablosundaki sütunlar ile movie_id hem de title Filmler tablosundan sütunlar. Her iki sorgu da iki sütun döndürüyor, bu nedenle birleşim geçerlidir.
Aşağıdaki sorguyu kullanabiliriz.
SELECT `membership_number`, `full_names` FROM `members` UNION SELECT `movie_id`, `title` FROM `movies`;
Yukarıdaki betiğin çalıştırılması MySQL tezgâh myflixdb'ye karşı yapılan sorgu bize aşağıda gösterilen sonuçları veriyor. Alt satırlar film kayıtları olmasına rağmen, başlıkların ilk SELECT sorgusundan geldiğine dikkat edin.
| membership_number | full_names |
|---|---|
| 1 | Janet Jones |
| 2 | Janet Smith Jones |
| 3 | Robert Phil |
| 4 | Gloria Williams |
| 5 | Leonard Hofstadter |
| 6 | Sheldon Cooper |
| 7 | Rajesh Koothrappali |
| 8 | Leslie Winkle |
| 9 | Howard Wolowitz |
| 16 | 67% Guilty |
| 6 | Angels and Demons |
| 4 | Code Name Black |
| 5 | Daddy's Little Girls |
| 7 | Davinci Code |
| 2 | Forgetting Sarah Marshal |
| 9 | Honey mooners |
| 19 | movie 3 |
| 1 | Pirates of the Caribean 4 |
| 18 | sample movie |
| 17 | The Great Dictator |
| 3 | X-Men |




