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

PostgreSQL में EXCEPT कैसे काम करता है

PostgreSQL में, EXCEPT ऑपरेटर उन पंक्तियों को लौटाता है जो बाईं इनपुट क्वेरी द्वारा लौटाई जाती हैं जो सही इनपुट क्वेरी द्वारा वापस नहीं की जाती हैं। इसे अंतर . के रूप में भी संदर्भित किया जा सकता है दो प्रश्नों के बीच।

सिंटैक्स

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

query1 EXCEPT [ALL] query2

जब तक EXCEPT ALL . डुप्लीकेट हटा दिए जाते हैं उपयोग किया जाता है।

उदाहरण

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

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 
-------------
 Cathy
 Ben

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

डिफ़ॉल्ट रूप से, EXCEPT ऑपरेटर अलग पंक्तियों देता है। तो हमारे उदाहरण में, Cathy . के लिए केवल एक पंक्ति लौटाई जाती है , भले ही उस नाम के दो शिक्षक हों।

उपरोक्त उदाहरण निम्न क्वेरी के बराबर है:

SELECT TeacherName FROM Teachers
EXCEPT DISTINCT
SELECT StudentName FROM Students;

परिणाम:

 teachername 
-------------
 Cathy
 Ben

यह वही परिणाम है जो हमें तब मिला जब कोई स्पष्ट DISTINCT . नहीं था खोजशब्द। हम ALL . के साथ डुप्लीकेट शामिल कर सकते हैं कीवर्ड (इस पर बाद में)।

बाईं ओर कौन सी तालिका है और कौन सी दाईं ओर है, इसके आधार पर हम अलग-अलग परिणाम प्राप्त कर सकते हैं। यहां एक उदाहरण दिया गया है जो Students को रखता है बाईं ओर तालिका और Teachers दाईं ओर:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

परिणाम:

 studentname 
-------------
 Faye
 Jet
 Spike
 Ein

इस बार हमें ऐसे छात्र मिले जो शिक्षक भी नहीं हैं।

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

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

हम ALL . शामिल कर सकते हैं हमारे परिणाम में डुप्लीकेट शामिल करने के लिए कीवर्ड:

SELECT TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentName FROM Students;

परिणाम:

 teachername 
-------------
 Cathy
 Cathy
 Bill
 Ben

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

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

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

एक वैकल्पिक

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

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

परिणाम:

 teachername 
-------------
 Cathy
 Ben

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql में अनलॉक की गई पंक्ति का चयन करें

  2. पोस्टग्रेएसक्यूएल ऑटोइन्क्रिमेंट

  3. मरम्मत भ्रष्ट डेटाबेस postgresql

  4. PostgreSQL में किसी अन्य तालिका के कॉलम के साथ तालिका के कॉलम को अपडेट करें

  5. Postgresql इंटररे त्रुटि:अपरिभाषित प्रतीक:pfree