Menu
Coddy logo textTech

Union

Coddy'nin SQL Journey'sinin Temeller bölümünün bir parçası — ders 48 / 72.

Union'lar, join'lardan farklıdır. Join'ler tabloları birleştirmek için koşullar kullanır ancak union'lar iki tabloyu birinin üstüne diğerini sadece ekler. UNION kullanmak için şunu yazacağız:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

Her iki select de aşağıdaki kurallara uymalıdır:

  • Alan sayısı eşit olmalıdır
  • Sıra önemlidir
  • Aynı konumdaki sütunlar veri türleriyle eşleşmelidir

Örneğin, aşağıdaki tablolarımız olduğunu varsayalım:

germany_people

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

Sorun: Elimizdeki tüm isimlerden oluşan büyük bir tablo oluşturmak istiyoruz.

SELECT name from germany_people
UNION
SELECT name from england_people

Sonuç:

isim
Lena
Leonie
George

UNION yalnızca benzersiz değerleri döndürürken UNION ALL tüm kayıtları olduğu gibi döndürür:

SELECT name from germany_people
UNION ALL
SELECT name from england_people

Sonuç:

isim
Lena
Leonie
George
Lena

Ayrıca UNION ALL'i GROUP BY, kümeye toplama fonksiyonları ve ORDER BY ile bir alt sorguya sararak birleştirebilirsiniz. Örneğin, her ismin her iki tabloda da kaç kez göründüğünü saymak için:

SELECT name, COUNT(*) AS total
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESC

Sonuç:

isimtoplam
Lena2
Leonie1
George1

Burada, UNION ALL tüm satırları (kopyalar dahil) korur, böylece COUNT gerçek tekrar sayısını yansıtır. Dış sorgu ise birleştirilmiş sonucu gruplar ve sıralar.

challenge icon

Görev

Kolay

Mevcut tablolar ve sütunlar:

  • <strong>sales_2009</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2010</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2011</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>

3 satış tablosu vardır.

Tüm tabloların her ürünü için satışların toplamını bulun.

Sonuç product_id ve toplam satışları içermelidir.

Bu sütunu total_sales olarak adlandırın.

Sonuçları toplam satışa göre azalan sırada sıralayın.

Kopya kağıdı

UNION tabloları dikey olarak yığarak birleştirir. Join'lardan farklı olarak, union'lar koşul kullanmaz - tabloları birbirinin üzerine basitçe ekler.

Temel UNION sözdizimi:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

UNION kuralları:

  • Alan sayısı eşit olmalıdır
  • Sıra önemlidir
  • Aynı konumdaki sütunlar veri türleri ile eşleşmelidir

UNION vs UNION ALL:

  • UNION yalnızca farklı değerleri döndürür
  • UNION ALL yinelenenler dahil tüm kayıtları döndürür
SELECT name FROM germany_people
UNION
SELECT name FROM england_people
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people

UNION ALL'ı bir alt sorgu içinde kullanabilir ve ardından birleştirilmiş sonuca GROUP BY, ORDER BY ve toplama fonksiyonlarını uygulayabilirsiniz:

SELECT name, COUNT(*) AS total
FROM (
  SELECT name FROM germany_people
  UNION ALL
  SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESC

Bu, her ismin her iki tabloda da kaç kez göründüğünü, yinelenenler dahil sayar.

Kendin dene

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler