LEFT JOIN से किसी टेबल की हर पंक्ति को बनाए रखें, IS NULL से अनुपस्थितियों को पहचानें और COALESCE से उन्हें बदल दें।
इस पाठ को Kodokon में खोलेंपिछले पाठ का INNER JOIN उन ग्राहकों को छिपा देता है जिनका कोई ऑर्डर नहीं है। फिर भी सबसे आम व्यावसायिक प्रश्न ठीक यही होता है: कौन गायब है? निष्क्रिय ग्राहक, कभी न बिके उत्पाद, बिना भुगतान वाले चालान... इस स्क्रिप्ट को sqliteonline.com या sqlite3 में चलाएँ: यह बिना किसी ऑर्डर वाला एक चौथा ग्राहक जोड़ती है।
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
city TEXT
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
amount REAL NOT NULL
);
INSERT INTO customers (id, name, city) VALUES
(1, 'Alice', 'Lyon'),
(2, 'Karim', 'Paris'),
(3, 'Mina', 'Nantes'),
(4, 'Paulo', 'Lille');
INSERT INTO orders (id, customer_id, amount)
VALUES
(1, 1, 49.90),
(2, 1, 15.00),
(3, 2, 120.50);LEFT JOIN बाईं ओर की टेबल (जिसका नाम कीवर्ड से पहले आता है) की सभी पंक्तियों को रखता है, भले ही दाईं ओर कोई मिलान न हो। जब मिलान गायब होता है, तो दाईं ओर की टेबल के कॉलम NULL से भर दिए जाते हैं।
SELECT c.name, o.id AS order_id, o.amount
FROM customers AS c
LEFT JOIN orders AS o
ON o.customer_id = c.id;जो गायब है उसे अलग करने के लिए, इन NULL वैल्यू पर फ़िल्टर करें: यह एंटी-जॉइन पैटर्न है, जो डेटा विश्लेषण में एक अनिवार्य सजगता है। जाँची जाने वाली कॉलम दाईं ओर की टेबल से आनी चाहिए और स्वाभाविक रूप से कभी NULL नहीं होनी चाहिए, इसीलिए इसकी प्राइमरी की o.id को चुना गया है।
SELECT c.name, c.city
FROM customers AS c
LEFT JOIN orders AS o
ON o.customer_id = c.id
WHERE o.id IS NULL;एक आखिरी टूल: COALESCE(a, b) a लौटाता है यदि वह NULL नहीं है, अन्यथा b। किसी LEFT JOIN और एक एग्रीगेशन के साथ मिलकर, यह किसी रिपोर्ट या चालान में अनुपस्थितियों को उपयोगी शून्य में बदल देता है।
SELECT c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers AS c
LEFT JOIN orders AS o
ON o.customer_id = c.id
GROUP BY c.id
ORDER BY total_spent DESC;