UNION
Coddy'nin SQL Journey'sinin Temeller bölümünün bir parçası. Ders 48 / 72.
Birleşimler, birleştirmelerden farklıdır. Birleştirmeler tabloları birleştirmek için koşulları kullanır, ancak birleşimler iki tabloyu yalnızca birinin üstüne diğerini 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:
- Alanların sayısı eşit olmalıdır
- Sıra önemlidir
- Aynı konumdaki sütunların veri türleri 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: Sahip olduğumuz 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 farklı 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 |
Ayrıca birden çok tablo genelindeki verileri özetlemek için UNION ALL ifadesini toplama işlevleri, GROUP BY ve ORDER BY ile birleştirebilirsiniz. Buradaki püf noktası, UNION ALL ifadesini bir alt sorgunun içine almak, ardından bunun üzerine gruplama ve sıralama uygulamaktır.
Örneğin, her iki tabloda her adın kaç kez göründüğünü 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 korunması için UNION yerine UNION ALL kullanılır. Aksi hâlde bunlar sayılmadan önce 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.
Görev
KolayKullanılabilir tablolar ve sütunlar:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_2011:product_id,quantity_sold
3 satış tablosu vardır.
Tüm tabloların her bir ü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ışlara göre azalan sırada sıralayın.
Kendin dene
-- Üç tabloyu tek 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
4Daha Fazla Anahtar Sözcük
IN anahtar sözcüğüBETWEEN anahtar sözcüğüLIKE anahtar sözcüğüAS anahtar sözcüğüTekrar - Cep Telefonu Modelleri2Koşullar
Koşulların TemelleriAND Anahtar SözcüğüOR Anahtar SözcüğüNOT Anahtar SözcüğüBirden Çok Koşulu BirleştirmeParantezlerBoolean Değerler3Belirli Döndürme Biçimi
Null değerlerSonuçları Sıralama 1. BölümSonuçları Sıralama 2. BölümTekrar - Siber Güvenlik FirmasıKayıt Sayısını SınırlamaTekrar - Araç Fabrikası6Giriş Alıştırmaları
Tekrar - Parlamento SeçimiTekrar - Polisin Suçluyu TutuklamasıTekrar - Bar İçecek KabıTekrar - Mühendis Yeni Sütunlar9Birden Çok Tablo
Temel JOIN Bölüm 1Temel JOIN Bölüm 2Tekrar - JOINKendine JOINTekrar - Kendine JOINUNIONSorguları Basitleştirme, WITH Anahtar SözcüğüTekrar - WITH SorgularıTekrar - Gayrimenkul Müteahhidi12Pencere Fonksiyonları 2. Bölüm
RANK ve DENSE_RANK FonksiyonlarıTekrar - RANK ve DENSE_RANKNTILE FonksiyonuToplama FonksiyonlarıROWS ve RANGE ÖlçütüKendi başına pratik yap: SQL playground