Ana içeriğe geç
Modül 3 · Ders 1 ders 4Kurstaki 9/57~12 min
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

SQL
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.

SQL
-- 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 = NULL sahibiyse, 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):

SQL
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

Egzersiz#sql.m3.l1.e1
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İ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

Egzersiz#sql.m3.l1.e2
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İ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