Union
Coddy'nin SQL Journey'sinin Temeller bölümünün bir parçası — ders 48 / 72.
Union'lar join'lerden farklıdır. Join'ler tabloları birleştirmek için koşullar kullanır ancak union'lar iki tabloyu basitçe üst üste ekler. UNION kullanmak için şöyle yazarız:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Her iki seçimin de (select) aşağıdaki kurallara uyması gerekir:
- Alan sayısı eşit olmalıdır
- Sıralama önemlidir
- Aynı konumdaki sütunların veri tipleri eşleşmelidir
Örneğin, aşağıdaki tablolara sahip olduğumuzu varsayalım:
germany_people
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
Sorun: Elimizdeki tüm isimlerden oluşan tek bir büyük tablo oluşturmak istiyoruz.
SELECT name from germany_people
UNION
SELECT name from england_peopleSonuç:
| name |
| Lena |
| Leonie |
| George |
UNION yalnızca benzersiz (distinct) 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_peopleSonuç:
| name |
| Lena |
| Leonie |
| George |
| Lena |
Verileri birden fazla tabloda özetlemek için UNION ALL ifadesini toplama fonksiyonları (aggregate functions), GROUP BY ve ORDER BY ile de birleştirebilirsiniz. İşin püf noktası, UNION ALL ifadesini bir alt sorgu (subquery) içine sarmak, ardından bunun üzerine gruplama ve sıralama uygulamaktır.
Örneğin, her adın her iki tabloda toplam 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 DESCSonuç:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
Burada, Lena gibi yinelenenlerin tutulması için UNION ALL (UNION değil) kullanılır — aksi takdirde sayma işleminden önce kaldırılırlardı. Alt sorgu tüm satırları birleştirir ve ardından GROUP BY + COUNT bunları özetler. ORDER BY son sonucu sıralar.
Görev
KolayMevcut 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 adet satış tablosu bulunmaktadır.
Tüm tablolardaki her bir ürün için toplam satış miktarını bulun.
Sonuç product_id ve toplam satışları içermelidir.
Bu sütunu total_sales olarak adlandırın.
Sonuçları toplam satışlara göre azalan sırada sıralayın.
Kendin dene
-- Üç tabloyu bir sonuçta yığ, her satırı koruyarak
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- Ürün başına bir satır, en büyük toplam önce
GROUP BY ____
ORDER BY ____ DESC;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
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns