Free tutorials & notes in Hindi & English · Clean code examples · Mobile friendly learning
MySQL + SQL · Lesson 67

MySQL में SQL Join Examples

Dataset और Professional Method

ये examples JOIN overview के पाँच join_students और तीन classes rows लेते हैं। जरूरत हो तो lab दोबारा बनाएँ। हर query से पहले required population, matching rule और expected row count लिखें।

FactVerified value
Assigned students4
Unassigned students1 (Vihaan)
Students वाली classes2
Students के बिना classes1 (XI-A)
JOIN को isolated syntax की तरह न पढ़ें। हर example business question से शुरू होता और known data से output check करता है।

Example 1–2: Students और Classes Match करें

1. Assigned students और classroom

SELECT s.student_name, c.class_name, c.room_no
FROM join_students AS s
INNER JOIN classes AS c
  ON c.class_id = s.class_id
ORDER BY s.student_id;
Aarav | X-A | Room 101 Meera | X-A | Room 101 Kabir | X-B | Room 102 Sana | X-B | Room 102

2. Ms. Rao के students

SELECT s.student_name
FROM join_students AS s
JOIN classes AS c
  ON c.class_id = s.class_id
WHERE c.teacher_name = 'Ms. Rao'
ORDER BY s.student_name;
Aarav Meera

पहली query many-to-one है—हर assigned student एक class से match होता है। दूसरी matched population को class attribute से filter करती है।

Example 3: हर Student Preserve करें

SELECT s.student_name,
       COALESCE(c.class_name, 'Not assigned') AS class_name
FROM join_students AS s
LEFT JOIN classes AS c
  ON c.class_id = s.class_id
ORDER BY s.student_id;
Aarav | X-A Meera | X-A Kabir | X-B Sana | X-B Vihaan | Not assigned

COALESCE केवल display logic है। Stored class_id NULL ही रहता है। Meaningful missing relationship को invented database data से न भरें।

Example 4–5: Missing Relationships खोजें

4. Class के बिना students

SELECT s.student_id, s.student_name
FROM join_students AS s
LEFT JOIN classes AS c
  ON c.class_id = s.class_id
WHERE c.class_id IS NULL;
5 | Vihaan

5. Students के बिना classes

SELECT c.class_id, c.class_name
FROM classes AS c
LEFT JOIN join_students AS s
  ON s.class_id = c.class_id
WHERE s.student_id IS NULL;
30 | XI-A

ये anti-join patterns हैं। दूसरी side की non-nullable primary key test करें, nullable descriptive column नहीं; वरना genuine NULL को missing row समझ सकते हैं।

Example 6: Zero सहित Class Counts

SELECT c.class_id, c.class_name,
       COUNT(s.student_id) AS student_count
FROM classes AS c
LEFT JOIN join_students AS s
  ON s.class_id = c.class_id
GROUP BY c.class_id, c.class_name
ORDER BY c.class_id;
10 | X-A | 2 20 | X-B | 2 30 | XI-A | 0

COUNT(s.student_id) XI-A का NULL placeholder ignore करता है। COUNT(*) उस preserved class के लिए गलत रूप से one joined row गिनता।

Example 7: Students खोए बिना Matches Filter करें

Report में सभी students चाहिए, लेकिन class data केवल X-A के लिए दिखाना है। Right-table restriction ON में रखें:

SELECT s.student_name, c.class_name
FROM join_students AS s
LEFT JOIN classes AS c
  ON c.class_id = s.class_id
 AND c.class_name = 'X-A'
ORDER BY s.student_id;
Aarav | X-A Meera | X-A Kabir | NULL Sana | NULL Vihaan | NULL

c.class_name = 'X-A' को WHERE में ले जाने पर केवल Aarav और Meera मिलेंगे। वह अलग question के लिए सही हो सकता है, पर सभी students preserve नहीं करता।

Debugging Checklist और अभ्यास

  1. Ambiguous columns को aliases से qualify करें।
  2. देखें ON condition में key के सभी parts हैं।
  3. Actual और predicted row counts compare करें।
  4. Mismatch देखने के लिए दोनों join keys temporarily select करें।
  5. Deterministic display चाहिए तभी ORDER BY दें।
  6. Result logically correct होने के बाद EXPLAIN चलाएँ।

अभ्यास: हर teacher के साथ student count दिखाएँ; कम-से-कम दो students वाली classes list करें; Example 7 को X-B matches के लिए बदलें लेकिन सभी पाँच students रखें।

Official संदर्भ

Syntax और optimizer notes official MySQL 8.4 manual से जाँचे गए हैं। अपने schema और data पर plan तथा row count अवश्य test करें।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

SQL में दो tables कैसे join करें?
दोनों tables को alias दें और ON में keys का relation लिखें, जैसे c.class_id = s.class_id। फिर केवल required columns select करें।
No-match rows कैसे list करें?
जिस population को रखना है उससे LEFT JOIN करें, फिर दूसरी table की non-nullable key पर IS NULL लगाएँ।
Zero children वाले parents सहित count कैसे करें?
Parent से child को LEFT JOIN करके parent key पर GROUP BY करें और COUNT(child_primary_key) लें। COUNT(*) न लें, क्योंकि preserved parent फिर भी one row बनाता है।
Right-table filter ON में जाए या WHERE में?
Unmatched left rows बचानी हों तो ON में रखें। Completed result में condition satisfy करने वाली rows ही चाहिए तो WHERE में रखें।
JOIN चलाने से पहले row count predict क्यों करें?
Prediction wrong cardinality, missing predicate और accidental Cartesian product को report error बनने से पहले पकड़ता है।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.