Modül dersleri (1/4)
İki tabloyu birleştirmek: INNER JOIN
Şu ana kadar tek seferde bir tablo okuduk. Ancak gerçek dünyada veriler
birden fazla ilgili tabloya yayılmış: örneğin veri kümemizde her biri
çalışanın departments tablosuna işaret eden bir department_id var. Görmek
departmanın adını (sadece id değil) katılmamız gerekiyor
iki masa. Bunu yapan operatöre JOIN adı verilir.
Temel sözdizimi
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;İngilizce okuyun: _"table_a alın, her birini eşleştirerek table_b ekleyin.
table_a.x'nın table_b.y"'ye eşit olduğu satır. Sonuç **yeni bir sanal
tablo ** her ikisinin de sütunlarını içeren.
-- For each employee, also show the name of their department:
SELECT employees.first_name,
employees.last_name,
departments.name AS dipartimento
FROM employees
JOIN departments ON employees.department_id = departments.id;ON'den sonraki kısma birleştirme koşulu denir: bu,
motor "bu iki satır hemen hemen aynı şeydir, onları sıralayın". içinde
vakaların büyük çoğunluğunda birincil anahtar ile yabancı anahtar arasındaki eşitlik söz konusudur
anahtarı (burada departments.id ve employees.department_id).
İÇ BİRLEŞTİRME, ayrıntılı olarak
Anahtar kelimenin tamamı INNER JOIN'dir, ancak JOIN tek başına standarttır
eşanlamlı. "İç" yalnızca her ikisinde de eşleşen satırlar anlamına gelir
tablolar döndürülür:
- eğer bir çalışan
department_id = NULLsahibiyse, bu kişi tabloda görünmeyecektir sonuç; - eğer bir departmanın hiç çalışanı yoksa sonuçta görünmez.
Nitelikli sütun adları
İki tablonun aynı ada sahip sütunları olduğunda (burada her ikisinde de id vardır ve
düşünürseniz her ikisinde de name var), hangi tabloyu belirtmeniz gerekir
table.column yazarak bir sütun gelir. Uzun adların tekrarlanmasını önlemek için,
takma adlar sıklıkla kullanılır (bunları Modül 2'de gördünüz):
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;AS burada da isteğe bağlıdır: FROM employees e aynı şekilde çalışır.
Deneyin
Ingegneria departmanındaki her çalışanın adını (first_name), soyadını (soyadı) ve departmanın şehrini (departments.city) gösterin. Üç sütun, çalışan başına bir satır.
İpucu göster
ON koşulunu e.department_id ve d.id arasındaki eşitlikle tamamlayın, ardından üçüncü sütun olarak d.city'yi seçin.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
Milano merkezli bir departmanda çalışan tüm çalışanların adını (first_name) ve soyadını (last_name) listeleyin. Departman adına göre değil, departmanlara göre filtreleyin.
İpucu göster
Önceki alıştırmayla aynı JOIN, ancak departman adı yerine d.city = 'Milano' filtresini kullanın.
3 denemeden sonra çözüm mevcut