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

MySQL में UNION और UNION ALL

UNION Rows Combine करता है; JOIN Columns

UNION compatible query results को vertically stack करने वाला set operation है। JOIN tables relate करके same row में दोनों sides की columns दे सकता है।

OperationCore action
UNIONBranches append, फिर duplicate result rows remove
UNION ALLहर branch row append
JOINPredicate से related rows match
Decision: हर occurrence मायने रखे तो UNION ALL; distinct set चाहिए तो UNION।

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;
Aarav Kabir Meera Sana

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;
Aarav Aarav Kabir Meera Sana Sana

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 लें।

UNION columns को position से match करता है, alias से नहीं। Two same-type columns reverse करना syntactically valid पर semantically wrong data दे सकता है।

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;
Aarav Aarav Kabir Meera

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;
Aarav | A Aarav | B Kabir | B Meera | A Sana | A Sana | B

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 करें।

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

UNION और UNION ALL में क्या अंतर है?
UNION combined result से duplicates हटाता है। UNION ALL हर branch row append करता है, duplicates सहित।
UNION branches में कितनी columns होनी चाहिए?
हर query block same number of corresponding columns compatible result types के साथ return करे।
Final column names कहाँ से आते हैं?
First query block output column names तय करता है, इसलिए उसमें clear aliases दें।
ORDER BY कहाँ लगाएँ?
Final ORDER BY पूरे set result को sort करता है। Branch-specific ordering/limit के लिए carefully parenthesized query expressions चाहिए।
क्या UNION ALL सामान्यतः faster है?
यह global duplicate elimination avoid करता है और अक्सर less work है; पर इसे valid duplicates के कारण चुनें, फिर actual plan measure करें।
🔗

Share this topic with a friend

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

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

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

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

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