Menu
CoddyTech

UNION

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

Birleştirmeler, join işlemlerinden farklıdır. Join işlemleri tabloları birleştirmek için koşullar kullanır, ancak birleştirmeler iki tabloyu yalnızca alt alta ekler. UNION kullanmak için şunu yazarız:

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

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

  • Sütun sayıları eşit olmalıdır
  • Sıralama önemlidir
  • Aynı konumdaki sütunlar aynı türde veriler içermelidir (SQLite türlerini denetlemez)

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

germany_people

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

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

SELECT name from germany_people
UNION
SELECT name from england_people

Sonuç:

ad
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ç:

İsim
Lena
Leonie
George
Lena

UNION ALL ifadesini birden fazla tablodaki verileri özetlemek için toplama işlevleri, GROUP BY ve ORDER BY ile de birleştirebilirsin. Püf noktası, UNION ALL ifadesini bir alt sorgunun içine almak ve ardından bunun üzerinde gruplama ve sıralama uygulamaktır.

Örneğin, her adın her iki tabloda da kaç kez geçtiğini saymak istediğimizi varsayalım:

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

Sonuç:

nametotal_count
Lena2
Leonie1
George1

Burada, Lena gibi yinelenenlerin korunması için UNION değil, UNION ALL kullanılır. Aksi takdirde sayım yapılmadan önce yinelenenler kaldırılırdı. Alt sorgu tüm satırları birleştirir, ardından GROUP BY + COUNT bunları özetler. ORDER BY nihai sonucu sıralar.

challenge icon

Görev

Kolay

Kullanılabilir tablolar ve sütunlar:

  • sales_2009: product_id, quantity_sold
  • sales_2010: product_id, quantity_sold
  • sales_2011: product_id, quantity_sold

3 satış tablosu vardır.

Tüm tabloları bir arada kullanarak her ürünün toplam satışını bulun.

Sonuçta product_id ve toplam satış yer almalıdır.

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

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

Kendin dene

-- Tüm satırları koruyarak üç tabloyu tek bir sonuçta birleştir
SELECT product_id, ____ AS total_sales
FROM (
    SELECT * FROM sales_2009
    ____
    SELECT * FROM sales_2010
    ____
    SELECT * FROM sales_2011
)
-- Her ürün için bir satır; en yüksek toplam önce
GROUP BY ____
ORDER BY ____ DESC;
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

Kendi başına pratik yap: SQL playground