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 table2Her 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
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
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_peopleSonuç:
| 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_peopleSonuç:
| 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 DESCSonuç:
| isim | toplam |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
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.
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 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 table2UNION 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:
UNIONyalnızca farklı değerleri döndürürUNION ALLyinelenenler dahil tüm kayıtları döndürür
SELECT name FROM germany_people
UNION
SELECT name FROM england_peopleSELECT name FROM germany_people
UNION ALL
SELECT name FROM england_peopleUNION 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 DESCBu, her ismin her iki tabloda da kaç kez göründüğünü, yinelenenler dahil sayar.
Kendin dene
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