← Back to MySQL Course | Chapter 9: Joins | Lesson 3 of 10

LEFT JOIN

LEFT JOIN पहली class के सबके लिए roll call करने और अगर उनके पास कोई हो तो दूसरी class से उनका partner add करने जैसा है। जिनके पास partner नहीं वे list में एक blank के साथ रहते हैं।
Syntax
sql
SELECT columns
FROM table1
LEFT JOIN table2
  ON table1.column = table2.column;

एक LEFT JOIN क्या है?

एक LEFT JOIN left table की सारी rows रखता है चाहे एक match exist करे या नहीं। यह उन्हें possible होने पर right table की rows से match करता है। अगर कोई match नहीं है, right side row को पूरी तरह drop करने के बजाय NULL return करता है।

उदाहरण: What is a LEFT JOIN?

sql
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1);
SELECT customers.name, orders.order_id
FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id;

Unmatched Rows ढूँढना

आप left table में ऐसी rows ढूँढ सकते हैं जिनकी right table में कोई matches नहीं, जैसे वे customers जिन्होंने कभी order नहीं किया। इसके लिए, right table के किसी column पर एक WHERE IS NULL check के साथ एक LEFT JOIN इस्तेमाल करें।

उदाहरण: Finding Unmatched Rows

sql
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1);
SELECT customers.name
FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.order_id IS NULL;

Left बनाम Right Sides Filter करना

LEFT JOIN इस्तेमाल करते समय ON clause में filtering WHERE clause में filtering से अलग behave करती है। ON clause join होने से पहले filter करता है, extra condition fail होने पर भी left-side rows preserve करते हुए, जबकि right table पर एक WHERE filter चुपचाप आपके LEFT JOIN को एक INNER JOIN में बदल सकता है।

उदाहरण: Filtering Left vs Right Sides

sql
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT, total INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1, 500);
-- Filter in ON: keeps all customers
SELECT customers.name, orders.total
FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id AND orders.total > 100;
-- Filter in WHERE: turns it into an INNER JOIN
SELECT customers.name, orders.total
FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.total > 100;

कई LEFT JOINs

आप एक साथ कई optional relationships खींचने के लिए कई LEFT JOIN statements chain कर सकते हैं। यह कई अलग tables से optional details खींचने के लिए helpful है, जैसे किसी customer का सबसे हाल का order और उनका loyalty tier, इनमें से कोई missing होने पर customers को exclude किए बिना।

उदाहरण: Multiple LEFT JOINs

sql
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
CREATE TABLE loyalty (customer_id INT, tier TEXT);
INSERT INTO customers VALUES (1, 'Amit');
INSERT INTO orders VALUES (101, 1);
INSERT INTO loyalty VALUES (1, 'Gold');
SELECT customers.name, orders.order_id, loyalty.tier
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
LEFT JOIN loyalty ON customers.customer_id = loyalty.customer_id;

COALESCE / IFNULL के साथ LEFT JOIN

जब कोई match न मिलने की वजह से एक join NULL return करता है, आप इसे COALESCE या IFNULL इस्तेमाल करके एक fallback value से replace कर सकते हैं। यह आपके reports को neat और clean रखता है, एक blank cell के बजाय 'No orders yet' जैसा कुछ दिखाते हुए।

उदाहरण: LEFT JOIN with COALESCE / IFNULL

sql
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1);
SELECT customers.name, COALESCE(orders.order_id, 'No orders yet') AS latest_order
FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id;
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. ON के बजाय WHERE में right table पर एक filter रखना, जो NULL rows हटा देता है और इसे एक inner join में बदल देता है।
  2. IS NULL के बजाय = NULL से unmatched rows check करना।
  3. table order swap करना और गलत table preserve हो जाना।
🔒

Chapter Quiz — Complete all 10 topics to unlock

0/10 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.