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.

  • 🔗 Temel Amaç: UNION operatörü, birden fazla SELECT sorgusunun döndürdüğü satırları tek bir sonuç kümesinde, bir sorgu diğerinin altına gelecek şekilde sıralar.
  • 📐 Sütun Kuralı: Her SELECT sorgusu, aynı sayıda sütunu, aynı sırada ve uyumlu veri tipleriyle döndürmelidir.
  • 🧹 UNION DISTINCT: Yinelenen satırlar kaldırılır ve yalnızca benzersiz satırlar döndürülür; davranış bu şekildedir. MySQL Varsayılan olarak uygulanır.
  • 📚 BİRLİK TÜMÜ: Yinelenen kayıtlar da dahil olmak üzere her satır döndürülür; bu, yinelenen kayıtları kaldırma işlemine gerek kalmadığı için daha hızlıdır.
  • ???? ️ Sütun Adları: Sonuç kümesi sütun adlarını ilk SELECT sorgusundan alır, bu nedenle takma adlar o sorguya aittir.
  • Tipik Kullanım: Aynı türden kaydı içeren iki tabloyu, birleştirilmiş çıktıya yinelenen satırların girmesine izin vermeden birleştirme.

MySQL BİRLİĞİ Operator

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.

MySQL BİRLİĞİMySQL BİRLİĞİ

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:

  1. Eşit sütun sayısı. Her SELECT ifadesi aynı sayıda sütun döndürmelidir, aksi takdirde MySQL 1222 numaralı hatayı veriyor.
  2. 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.
  3. İ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.

Birlik-Farklı

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.

Birlik-Tümü

İ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

SSS

UNION, bir sorgunun satırlarını diğerinin altına yığar, böylece sonuç daha uzun olur. JOIN Benzer satırları eşleştirir ve sütunlarını yan yana yerleştirir, böylece sonuç daha geniş olur. Benzer satırlar için UNION, ilişkili tablolar için ise JOIN kullanın.

Tek bir yer TARAFINDAN SİPARİŞ Son SELECT sorgusundan sonra gelen LIMIT yan tümcesi, birleştirilmiş sonucu sıralar ve ilk SELECT sorgusunun ürettiği sütun adlarını kullanmalıdır. Oraya yerleştirilen bir LIMIT yan tümcesi de aynı şekilde davranır.

SELECT sorgusunun dalları eşit olmayan sütun sayıları döndürdüğünde 1222 hatası oluşur. Her daldaki sütunları sayın ve daha kısa olan dala bir sabit değer veya NULL yer tutucu ekleyerek her iki tarafın da aynı sırada hizalanmasını sağlayın.

Evet. Metinden SQL'e dönüştürme yardımcıları, yerleşik olanlar da dahil. MySQL TezgâhBasit bir istekten UNION ifadeleri oluşturun. Sütun sırasını kendiniz kontrol edin, çünkü bir model yalnızca benzer görünen sütunları hizalayabilir.

Yardımcı, tekrarlanan kayıtların mümkün olmadığı durumlarda UNION ALL önerebilir; bu da yaygın bir hız artışı sağlar. Karar yine de verilere bağlıdır, bu nedenle tekrarlanan kayıtları kaldırmadan önce dalların gerçekten üst üste gelmeyeceğini doğrulayın.

Bu yazıyı şu şekilde özetleyin: