समस्या:
आप SQL में दो तालिकाओं से दिए गए कॉलम (समान डेटा प्रकार के) से डेटा प्रदर्शित करना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में दो टेबल हैं:employee
और customer
।
employee
तालिका में निम्नलिखित कॉलम में डेटा है:id , पहला_नाम , last_name , और उम्र ।
आईडी | <थ>प्रथम_नामlast_name | उम्र | |
---|---|---|---|
1 | टॉम | मिलर | 22 |
2 | जॉन | स्मिथ | 26 |
3 | लिसा | विलियम्स | 30 |
4 | चार्ल्स | डेविस | 21 |
5 | जेम्स | मूर | 22 |
customer
तालिका में निम्नलिखित कॉलम में डेटा है:id , पहला_नाम , last_name , और उम्र ।
आईडी | <थ>प्रथम_नामlast_name | उम्र | |
---|---|---|---|
1 | मिलान | स्मिथ | 45 |
2 | चार्ल्स | डेविस | 21 |
3 | चिह्नित करें | समर्थक | 19 |
एक परिणाम सेट में, डेटाबेस में सभी लोगों, कर्मचारियों और ग्राहकों दोनों के लिए पहला नाम, अंतिम नाम और आयु प्रदर्शित करते हैं।
समाधान 1:
हम UNION ALL
का उपयोग करेंगे दो तालिकाओं में स्तंभों से डेटा में शामिल होने के लिए।
यहां वह प्रश्न है जो आप लिखेंगे:
SELECT first_name, last_name, age FROM employee UNION ALL SELECT first_name, last_name, age FROM customer;
ये रहा परिणाम:
last_name | उम्र | |
---|---|---|
टॉम | मिलर | 22 |
जॉन | स्मिथ | 26 |
लिसा | विलियम्स | 30 |
चार्ल्स | डेविस | 21 |
जेम्स | मूर | 28 |
मिलान | स्मिथ | 45 |
चार्ल्स | डेविस | 21 |
चिह्नित करें | समर्थक | 19 |
चर्चा:
दो या दो से अधिक तालिकाओं में स्तंभों से डेटा को जोड़ने के लिए UNION ALL क्लॉज का उपयोग करें। हमारे उदाहरण में, हम employee
और customer
टेबल। UNION ALL कीवर्ड के बाईं ओर, पहली तालिका से डेटा प्राप्त करने के लिए पहला SELECT स्टेटमेंट डालें (हमारे उदाहरण में, टेबल employee
) दाईं ओर, दूसरी तालिका से डेटा प्राप्त करने के लिए एक अन्य SELECT कथन का उपयोग करें (हमारे उदाहरण में, customer
)
याद रखें कि दोनों तालिकाओं में चयनित डेटा प्रत्येक कॉलम में समान डेटा प्रकार का होना चाहिए। उदाहरण के लिए, यदि पहले SELECT में पहला कॉलम एक स्ट्रिंग डेटा प्रकार है, तो दूसरे SELECT में पहला कॉलम भी एक स्ट्रिंग डेटा प्रकार होना चाहिए। अगर पहले सेलेक्ट स्टेटमेंट में दूसरा कॉलम एक पूर्णांक है, तो दूसरी तालिका में दूसरा कॉलम भी एक पूर्णांक प्रकार का होना चाहिए।
पहली क्वेरी में, हमने तीसरे कॉलम के लिए उम्र (कर्मचारी की उम्र, जो एक पूर्णांक डेटा प्रकार है) का चयन किया। इसलिए, दूसरे SELECT में तीसरा कॉलम भी एक पूर्णांक मान है; यह उम्र है ग्राहक की।
दोनों सेलेक्ट स्टेटमेंट में दूसरा कॉलम एक ही डेटा टाइप है। हालांकि, यदि दोनों तालिकाओं में मान समान हैं, तो उन्हें कई बार प्रदर्शित किया जाएगा; उदाहरण के लिए, 'चार्ल्स डेविस 21' को परिणाम सेट में दो बार दिखाया गया है।
क्या होगा यदि परिणाम तालिका में एकाधिक समान रिकॉर्ड नहीं चाहिए? इस मामले में, UNION
. का उपयोग करें . यह UNION ALL
. के समान है , लेकिन यह डुप्लिकेट रिकॉर्ड हटा देता है। निम्नलिखित उदाहरण देखें।
समाधान 2:
यहां वह क्वेरी है जो डुप्लिकेट रिकॉर्ड से बचाती है:
SELECT first_name, last_name FROM employee UNION SELECT first_name, last_name FROM customer;
यहाँ उपरोक्त क्वेरी का परिणाम है:
last_name | |
---|---|
चिह्नित करें | समर्थक |
जेम्स | मूर |
जॉन | स्मिथ |
चार्ल्स | डेविस |
मिलान | स्मिथ |
टॉम | मिलर |
लिसा | विलियम्स |
नोट:
UNION ALL
UNION
. से तेज है , लेकिन UNION
डुप्लिकेट पंक्तियों को हटा देता है। चुनाव हमें आवश्यक परिणाम डेटा पर निर्भर करता है।