MySQL + SQL · Lesson 75
MySQL में UNION और UNION ALL
UNION क्या है?
UNION दो या अधिक SELECT statements के result sets को मिलाकर एक single result बनाता है। यह duplicate rows को automatically हटा देता है। सभी SELECT statements में column की संख्या और data type एक जैसे होने चाहिए।
UNION को mathematics के set union की तरह समझें — अगर एक ही student दो tables में है, तो UNION उसे सिर्फ एक बार दिखाएगा।
- हर SELECT में columns की संख्या बराबर होनी चाहिए।
- Column के data types compatible होने चाहिए।
- Final result में column names पहले SELECT से आते हैं।
- Duplicate rows हट जाती हैं।
UNION ALL क्या है?
UNION ALL भी दो या अधिक SELECT statements के results को मिलाता है, लेकिन यह सभी rows रखता है — duplicates सहित। यह UNION से तेज़ होता है क्योंकि duplicate हटाने की प्रक्रिया नहीं होती।
- सभी duplicate rows रखी जाती हैं।
- UNION से तेज़ — sorting की ज़रूरत नहीं।
- जब duplicates नहीं होंगे या सभी rows चाहिए तब UNION ALL use करें।
UNION vs UNION ALL – अंतर
| Feature | UNION | UNION ALL |
|---|---|---|
| Duplicates | हटा देता है | रखता है |
| Speed | धीमा (sorting होती है) | तेज़ (extra processing नहीं) |
| Use case | Unique rows चाहिए तब | सभी rows चाहिए तब |
| Result rows | कम या बराबर | हमेशा दोनों का जोड़ |
| Memory | ज़्यादा (temp sort) | कम |
Syntax
-- UNION Syntax
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
-- UNION ALL Syntax
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;
नियम: दोनों SELECT में columns की संख्या और data types एक जैसे होने चाहिए।
SQL Examples with Output
Setup – Tables बनाएं
CREATE DATABASE school_db;
USE school_db;
CREATE TABLE students_a (
roll_no INT,
name VARCHAR(60),
city VARCHAR(40)
);
CREATE TABLE students_b (
roll_no INT,
name VARCHAR(60),
city VARCHAR(40)
);
INSERT INTO students_a VALUES
(1, 'Aarav Sharma', 'Khurja'),
(2, 'Priya Verma', 'Aligarh'),
(3, 'Ravi Singh', 'Meerut');
INSERT INTO students_b VALUES
(3, 'Ravi Singh', 'Meerut'), -- duplicate
(4, 'Neha Gupta', 'Agra'),
(5, 'Amit Yadav', 'Mathura');
Example 1: UNION का उपयोग
SELECT roll_no, name, city FROM students_a
UNION
SELECT roll_no, name, city FROM students_b;
Output (5 rows — Ravi Singh एक बार दिखेगा):
+---------+--------------+---------+
| 1 | Aarav Sharma | Khurja |
| 2 | Priya Verma | Aligarh |
| 3 | Ravi Singh | Meerut |
| 4 | Neha Gupta | Agra |
| 5 | Amit Yadav | Mathura |
+---------+--------------+---------+
+---------+--------------+---------+
| 1 | Aarav Sharma | Khurja |
| 2 | Priya Verma | Aligarh |
| 3 | Ravi Singh | Meerut |
| 4 | Neha Gupta | Agra |
| 5 | Amit Yadav | Mathura |
+---------+--------------+---------+
Example 2: UNION ALL का उपयोग
SELECT roll_no, name, city FROM students_a
UNION ALL
SELECT roll_no, name, city FROM students_b;
Output (6 rows — Ravi Singh दो बार दिखेगा):
+---------+--------------+---------+
| 1 | Aarav Sharma | Khurja |
| 2 | Priya Verma | Aligarh |
| 3 | Ravi Singh | Meerut |
| 3 | Ravi Singh | Meerut | <-- duplicate
| 4 | Neha Gupta | Agra |
| 5 | Amit Yadav | Mathura |
+---------+--------------+---------+
+---------+--------------+---------+
| 1 | Aarav Sharma | Khurja |
| 2 | Priya Verma | Aligarh |
| 3 | Ravi Singh | Meerut |
| 3 | Ravi Singh | Meerut | <-- duplicate
| 4 | Neha Gupta | Agra |
| 5 | Amit Yadav | Mathura |
+---------+--------------+---------+
Example 3: UNION के साथ ORDER BY
SELECT roll_no, name FROM students_a
UNION
SELECT roll_no, name FROM students_b
ORDER BY name;
ध्यान रखें: ORDER BY सिर्फ एक बार — पूरी query के अंत में लिखें।
Real-World Use Cases
- School ERP: XII-A, XII-B, XII-C sections की student list एक attendance report में combine करें।
- Fee System: पिछले 3 महीनों में fee देने वाले सभी students दिखाएं।
- Library System: दो branches से एक दिन में issued सभी books।
- E-commerce: दो seller tables के सभी products दिखाएं।
- Reporting: Archive table और current table को मिलाकर पूरी history दिखाएं।
Common Mistakes
- अलग column count: दोनों SELECT में columns की संख्या बराबर होनी चाहिए — नहीं तो ERROR आएगा।
- Incompatible data types: INT और VARCHAR को मिलाने पर result गलत हो सकता है।
- बीच में ORDER BY: ORDER BY केवल अंत में लिखें, किसी एक SELECT में नहीं।
- UNION ALL की जगह UNION: जब duplicates नहीं हैं तो UNION ALL use करें — तेज़ होगा।
- Column names की गलतफहमी: Final result में column name पहले SELECT से आता है।
Practice Tasks
teachers_mathऔरteachers_sciencetables बनाएं, 1 common teacher रखें। UNION और UNION ALL का output compare करें।- class10, class11, class12 — तीन tables को UNION ALL से combine करके total rows count करें।
- दोनों student tables से unique cities की list निकालें UNION से।
- Viva question लिखें: "UNION में column count अलग हो तो क्या होगा?" — Answer दें।
Summary
- UNION = Combine करो + Duplicates हटाओ (धीमा)
- UNION ALL = Combine करो + सब रखो (तेज़)
- दोनों में same columns और compatible data types ज़रूरी हैं।
- ORDER BY सिर्फ पूरी query के अंत में लिखें।
- Unique report के लिए UNION; सब data चाहिए तो UNION ALL।
💻 लाइव कोड एडिटर
इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.