MariaDB में, MINUS
ऑपरेटर बाईं इनपुट क्वेरी से अलग-अलग पंक्तियाँ देता है जो सही इनपुट क्वेरी द्वारा आउटपुट नहीं होती हैं।
MINUS
ऑपरेटर को मारियाडीबी 10.6.1 में EXCEPT
. के पर्याय के रूप में पेश किया गया था Oracle के साथ संगतता के प्रयोजनों के लिए ऑपरेटर। इसलिए, हम MINUS
. का उपयोग कर सकते हैं और EXCEPT
एक दूसरे के स्थान पर (मारियाडीबी 10.6.1 और बाद के संस्करण में)।
हालांकि, मैंने पाया है कि MINUS
ऑपरेटर केवल तभी काम करता है जब मेरा sql_mode = "oracle"
. हालांकि इसका स्पष्ट रूप से मारियाडीबी के दस्तावेज़ीकरण में उल्लेख नहीं किया गया है, यह MINUS
को लागू करने के कार्य में निहित है। मारियाडीबी में ऑपरेटर।
नमूना डेटा
मान लीजिए कि हमारे पास निम्नलिखित टेबल हैं:
SELECT * FROM Teachers;
SELECT * FROM Students;
परिणाम:
+-----------+-------------+ | TeacherId | TeacherName | +-----------+-------------+ | 1 | Warren | | 2 | Ben | | 3 | Cathy | | 4 | Cathy | | 5 | Bill | | 6 | Bill | +-----------+-------------+ +-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Faye | | 2 | Jet | | 3 | Spike | | 4 | Ein | | 5 | Warren | | 6 | Bill | +-----------+-------------+
हम MINUS
. का उपयोग कर सकते हैं उन शिक्षकों को वापस करने के लिए ऑपरेटर जो छात्र भी नहीं हैं।
sql_mode
सेट करें से Oracle
इससे पहले कि हम MINUS
. का प्रयोग शुरू करें ऑपरेटर, चलिए अपना sql_mode
सेट करते हैं करने के लिए Oracle
:
SET sql_mode = "oracle";
ठीक है, अब हम आगे बढ़ सकते हैं और MINUS
. का उपयोग कर सकते हैं ऑपरेटर।
MINUS
का उदाहरण
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
परिणाम:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
इसलिए हमें केवल वही मान मिलते हैं जो Teachers
. में दिखाई देते हैं तालिका जो Students
. में भी दिखाई नहीं देती है टेबल।
डिफ़ॉल्ट रूप से, यह अलग-अलग पंक्तियाँ देता है, इसलिए Cathy
. के लिए केवल एक पंक्ति दी जाती है , भले ही उस नाम के दो शिक्षक हों। हम इस व्यवहार को बदल सकते हैं - इस पर और बाद में।
हम इसे बदल भी सकते हैं और Students
. को डाल सकते हैं बाईं ओर तालिका और Teachers
दाईं ओर।
SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;
परिणाम:
+-------------+ | StudentName | +-------------+ | Faye | | Jet | | Spike | | Ein | +-------------+
MINUS
. का उपयोग किए बिना समान परिणाम प्राप्त करना संभव है (या EXCEPT
) ऑपरेटर। उदाहरण के लिए, हम इसके लिए अपना पहला उदाहरण फिर से लिख सकते हैं:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
परिणाम:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
डुप्लिकेट शामिल करें
डिफ़ॉल्ट रूप से, MINUS
ऑपरेटर परोक्ष रूप से एक DISTINCT
लागू करता है कार्यवाही। दूसरे शब्दों में, यह डिफ़ॉल्ट रूप से केवल विशिष्ट मान देता है। लेकिन हम MINUS ALL
निर्दिष्ट कर सकते हैं परिणाम में डुप्लीकेट शामिल करने के लिए:
SELECT TeacherName FROM Teachers
MINUS ALL
SELECT StudentName FROM Students;
परिणाम:
+-------------+ | TeacherName | +-------------+ | Cathy | | Ben | | Cathy | | Bill | +-------------+
इस बार हमें अपने पहले उदाहरण में मिली दो पंक्तियों के बजाय चार पंक्तियाँ मिलीं।
हम देख सकते हैं कि हमारे पहले उदाहरण में दोनों कैथियों को केवल एक की तरह लौटाया गया था।
बिल के लिए के रूप में? Teachers
. में दो विधेयक हैं तालिका, लेकिन यहां केवल एक ही लौटाया जाता है। ऐसा शायद इसलिए है क्योंकि Students
. में एक बिल है तालिका, जो हमारे परिणामों में से एक बिल को बाहर कर देगी।
और यहां एक उदाहरण दिया गया है जो स्पष्ट रूप से DISTINCT
. का उपयोग करता है ऑपरेटर:
SELECT TeacherName FROM Teachers
MINUS DISTINCT
SELECT StudentName FROM Students;
परिणाम:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
जैसा कि अपेक्षित था, हमें वही परिणाम मिलता है जो हमें मिलेगा यदि हम DISTINCT
को हटा दें ऑपरेटर।
Oracle मोड में नहीं है?
यहां बताया गया है कि जब हम MINUS
. का उपयोग करने का प्रयास करते हैं तो क्या होता है जब Oracle मोड में न हो।
आइए अपना sql_mode
रीसेट करें डिफ़ॉल्ट सेटिंग पर:
SET sql_mode = default;
आइए अब MINUS
. का उपयोग करके देखें ऑपरेटर फिर से:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
परिणाम:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT StudentName FROM Students' at line 3