MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

मारियाडीबी को छोड़कर ऑपरेटर ने समझाया

MariaDB में, EXCEPT ऑपरेटर बाईं इनपुट क्वेरी से पंक्तियाँ लौटाता है जो सही इनपुट क्वेरी द्वारा आउटपुट नहीं होती हैं।

इसे लगाने का दूसरा तरीका यह है कि यह बाईं ओर से सभी पंक्तियों को लौटाता है SELECT परिणाम सेट छोड़कर पंक्तियाँ जो दाईं ओर हैं SELECT परिणाम सेट।

सिंटैक्स

आधिकारिक वाक्य रचना इस प्रकार है:

SELECT ...
(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL | DISTINCT]) SELECT ...
[(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL | DISTINCT]) SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

उपरोक्त में INTERSECT . भी शामिल है और UNION सिंटैक्स में ऑपरेटर, जैसा कि उन ऑपरेटरों पर समान सिंटैक्स लागू होता है।

मारियाडीबी 10.4.0 से, कोष्ठकों का उपयोग पूर्वता निर्दिष्ट करने के लिए किया जा सकता है।

उदाहरण

मान लीजिए कि हमारे पास निम्नलिखित टेबल हैं:

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        |
+-----------+-------------+

हम EXCEPT . का उपयोग कर सकते हैं जो शिक्षक भी छात्र नहीं हैं, उन्हें लौटाने के लिए ऑपरेटर:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

परिणाम:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

इसलिए हमें केवल वही मान मिलते हैं जो Teachers . में दिखाई देते हैं तालिका जो Students . में भी दिखाई नहीं देती है टेबल।

डिफ़ॉल्ट रूप से, यह अलग-अलग पंक्तियाँ देता है, इसलिए Cathy . के लिए केवल एक पंक्ति दी जाती है , भले ही उस नाम के दो शिक्षक हों। हम इस व्यवहार को बदल सकते हैं - इस पर और बाद में।

हम इसे बदल भी सकते हैं और Students . को डाल सकते हैं बाईं ओर तालिका और Teachers दाईं ओर।

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

परिणाम:

+-------------+
| StudentName |
+-------------+
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+

EXCEPT . का उपयोग किए बिना समान परिणाम प्राप्त करना संभव है ऑपरेटर। उदाहरण के लिए, हम इसके लिए अपना पहला उदाहरण फिर से लिख सकते हैं:

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

परिणाम:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

ध्यान रहे, EXCEPT ऑपरेटर काफी हद तक कोड को सरल बनाने में मदद करता है।

डुप्लिकेट शामिल करें

डिफ़ॉल्ट रूप से, EXCEPT ऑपरेटर परोक्ष रूप से एक DISTINCT लागू करता है कार्यवाही। दूसरे शब्दों में, यह डिफ़ॉल्ट रूप से केवल विशिष्ट मान देता है।

MariaDB 10.5.0 से पहले, निहित DISTINCT हमारा एकमात्र विकल्प था - हम ALL निर्दिष्ट करने में असमर्थ थे . हालाँकि, MariaDB 10.5.0 ने EXCEPT ALL . को पेश किया और EXCEPT DISTINCT वाक्य - विन्यास।

इसका मतलब है कि अब हम इस तरह की क्वेरी कर सकते हैं:

SELECT TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentName FROM Students;

परिणाम:

+-------------+
| TeacherName |
+-------------+
| Cathy       |
| Ben         |
| Cathy       |
| Bill        |
+-------------+

इस बार हमें अपने पहले उदाहरण में मिली दो पंक्तियों के बजाय चार पंक्तियाँ मिलीं।

हम देख सकते हैं कि हमारे पहले उदाहरण में दोनों कैथियों को केवल एक की तरह लौटाया गया था।

बिल के लिए के रूप में? Teachers . में दो विधेयक हैं तालिका, लेकिन यहां केवल एक ही लौटाया जाता है। ऐसा शायद इसलिए है क्योंकि Students . में एक बिल है तालिका, जो हमारे परिणामों में से एक बिल को बाहर कर देगी।

और यहां एक उदाहरण दिया गया है जो स्पष्ट रूप से DISTINCT . का उपयोग करता है ऑपरेटर:

SELECT TeacherName FROM Teachers
EXCEPT DISTINCT
SELECT StudentName FROM Students;

परिणाम:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

जैसा कि अपेक्षित था, हमें वही परिणाम मिलता है जो हमें मिलेगा यदि हम DISTINCT को हटा दें ऑपरेटर।

मारियाडीबी 10.6.1 में, MINUS EXCEPT . के पर्याय के रूप में पेश किया गया था . इसलिए, हम MINUS . का उपयोग कर सकते हैं इसके बजाय EXCEPT मारियाडीबी 10.6.1 और बाद में।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी JSON_QUOTE () समझाया गया

  2. सार्वजनिक नेटवर्क पर साइबर हमलों के खिलाफ अपने MySQL और MariaDB डेटाबेस की सुरक्षा कैसे करें

  3. मारियाडीबी उपयोगकर्ता () समझाया गया

  4. वायरगार्ड का उपयोग करके मारियाडीबी प्रतिकृति के लिए मल्टी-क्लाउड परिनियोजन

  5. क्लस्टर नियंत्रण के साथ मारियाडीबी प्रतिकृति की निगरानी के लिए युक्तियाँ