MySQL में UNION और UNION ALL
UNION Rows Combine करता है; JOIN Columns
UNION compatible query results को vertically stack करने वाला set operation है। JOIN tables relate करके same row में दोनों sides की columns दे सकता है।
| Operation | Core action |
|---|---|
| UNION | Branches append, फिर duplicate result rows remove |
| UNION ALL | हर branch row append |
| JOIN | Predicate से related rows match |
Verified Club Dataset
CREATE TABLE club_a (
student_name VARCHAR(60) PRIMARY KEY
);
CREATE TABLE club_b (
student_name VARCHAR(60) PRIMARY KEY
);
INSERT INTO club_a VALUES
('Aarav'), ('Meera'), ('Sana');
INSERT INTO club_b VALUES
('Aarav'), ('Kabir'), ('Sana');हर club में three members हैं। Aarav और Sana दोनों query results में आते हैं। दोनों branches में six occurrences लेकिन केवल four distinct names हैं।
UNION Duplicate Result Rows हटाता है
SELECT student_name FROM club_a
UNION
SELECT student_name FROM club_b
ORDER BY student_name;Duplicate elimination projected result row देखता है। Source label जैसी another column different हो तो same student_name पर भी rows duplicate नहीं हैं।
UNION ALL सभी Occurrences रखता है
SELECT student_name FROM club_a
UNION ALL
SELECT student_name FROM club_b
ORDER BY student_name;Six input occurrences से six output rows। Attendance events, transactions या source-preserving pipelines में repeated values separate facts हों तो यही सही है।
Column Count, Position और Type Rules
SELECT student_name AS person, 'Club A' AS source
FROM club_a
UNION ALL
SELECT student_name, 'Club B'
FROM club_b;दोनों branches two columns देती हैं। Corresponding positions type-compatible हों; names first branch से आते हैं, इसलिए final columns person और source हैं। Intended result type clear हो तो implicit numeric-to-text conversion की जगह explicit CAST लें।
Global ORDER BY और Branch LIMIT
SELECT student_name FROM club_a
UNION ALL
SELECT student_name FROM club_b
ORDER BY student_name;Final ORDER BY सभी six rows पर लागू है। Branch को अपने top rows चुनने हों तो query block parenthesize करें:
(SELECT student_name
FROM club_a
ORDER BY student_name
LIMIT 2)
UNION ALL
(SELECT student_name
FROM club_b
ORDER BY student_name
LIMIT 2)
ORDER BY student_name;Final ORDER BY के बिना display order guaranteed नहीं, चाहे branch का access order हो।
Source Preserve और Membership Count
SELECT student_name, 'A' AS club_code
FROM club_a
UNION ALL
SELECT student_name, 'B'
FROM club_b
ORDER BY student_name, club_code;Membership count के लिए इस result को derived table में wrap करके student_name पर GROUP BY करें। Aarav और Sana count 2; Kabir और Meera count 1।
Performance, Mistakes और अभ्यास
- Syntax से पहले duplicate semantics चुनें।
- केवल required columns project करें; wider rows distinct processing भारी करती हैं।
- Logically safe हो तो हर branch में filter करें।
- Compatible collations और data types लें।
- Final ORDER BY once लगाएँ और representative query पर EXPLAIN लें।
अभ्यास: distinct four-name roster; six membership events; source labels जोड़कर समझाएँ UNION shared names क्यों collapse नहीं करता; UNION ALL से member counts निकालें।
Official संदर्भ
Syntax और behavior official MySQL 8.4 manual से जाँचे गए हैं। Production से पहले हर query disposable copy पर test करें।