דילוג לתוכן המרכזי
מודול 5 · שיעור 3 מתוך 419/57 בקורס~10 min
שיעורי מודול (3/4)

חיבור חיצוני: מציאת ה"פערים"

במודול 3 ראית את LEFT JOIN: השאר את כל השורות בצד שמאל, אפילו אלה ללא התאמה מימין (שהופכים ל-NULL). בפרק זה אנחנו הרחב את ערכת הכלים עם RIGHT JOIN ו-FULL OUTER JOIN, ואנחנו לומדים כיצד להשתמש בהם כדי למצוא את "החורים" בנתונים: שורות בטבלה אחת have no counterpart in the other.

שלושת הסוגים של OUTTER JOIN

SQL
A LEFT  JOIN B  ON …  -- tutte le righe di A, con o senza match in B
A RIGHT JOIN B  ON …  -- tutte le righe di B, con o senza match in A
A FULL  JOIN B  ON …  -- tutte le righe di A *e* di B; NULL dove non c'è match

A RIGHT JOIN B תמיד ניתן לכתוב מחדש כ-B LEFT JOIN A עם אותו הדבר ON: זה עניין של קריאות. Many styles (including this course) מעדיף להשתמש תמיד ב-LEFT JOIN לצורך עקביות.

דפוס ה"אנטי-הצטרפות": מציאת החסרים

השימוש הנפוץ ביותר ב-LEFT JOIN אינו "העשר בנתונים על ימין", אבל מצא את השורות משמאל שאין להן התאמה ב- נכון. It's called an anti-join:

SQL
-- Prodotti senza nessuna recensione:
SELECT p.id, p.name
FROM   products p
LEFT JOIN reviews r ON r.product_id = p.id
WHERE  r.id IS NULL
ORDER BY p.id;

היגיון דפוס:

  1. LEFT JOIN מצרף סקירות של כל מוצר, אם בכלל;
  2. עבור מוצרים ללא ביקורות, כל העמודות r הן NULL;
  3. WHERE r.id IS NULL שומר רק את המוצרים האלה.

בדיקת מפתח: id IS NULL בעמודה NOT NULL של הטבלה הימנית means "there was no match". You often filter on the PK of the right-hand table precisely for this reason.

הצטרפות חיצונית מלאה

FULL OUTER JOIN שומר על שני הצדדים ללא התאמה. נעשה בו שימוש נדיר, typically for data integrity checks:

SQL
SELECT c.id AS customer_id, o.id AS order_id
FROM   customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id
WHERE  c.id IS NULL OR o.id IS NULL;

שורות עם c.id IS NULL יהיו הזמנות יתומות (customer_id ש doesn't exist in customers). Those with o.id IS NULL are customers ללא פקודות. במערך הנתונים שלנו המפתחות הזרים מבטיחים שאין יתום קיימות פקודות; only the customers without orders remain.

נסה זאת בעצמך

פעילות גופנית#sql.m5.l3.e1
ניסיונות: 0טוען...

Trova tutti i prodotti che non hanno mai ricevuto una recensione. שם מוסטרה סולו לה קולונה. אורדינה לשם.

טוען עורך...
הצג רמז

דפוס נגד הצטרפות: LEFT JOIN ביקורות su product_id, poi WHERE r.id IS NULL.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#sql.m5.l3.e2
ניסיונות: 0טוען...

Trova i clienti che non hanno mai ordinato nulla. אימייל של מוסטרה. אורדינה למייל.

טוען עורך...
הצג רמז

Stesso pattern dell'esercizio precedente, ma fra לקוחות e הזמנות.

הפתרון זמין לאחר 3 ניסיונות