SQLite में, EXCEPT
कंपाउंड बनाने के लिए ऑपरेटर का उपयोग किया जा सकता है SELECT
वह कथन जो बाईं ओर से लौटाई गई पंक्तियों का सबसेट देता है SELECT
जो दाईं ओर से नहीं लौटाए जाते हैं SELECT
।
उदाहरण
मान लीजिए कि हमारे पास निम्नलिखित टेबल हैं:
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
. में भी दिखाई नहीं देती है टेबल।
बाईं ओर कौन सी तालिका है और कौन सी दाईं ओर है, इसके आधार पर हम अलग-अलग परिणाम प्राप्त कर सकते हैं। यहां एक उदाहरण दिया गया है जो Students
को रखता है बाईं ओर तालिका और Teachers
दाईं ओर:
SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;
परिणाम:
StudentName ----------- Ein Faye Jet Spike
इस बार हमें ऐसे छात्र मिले जो शिक्षक भी नहीं हैं।
SQLite का EXCEPT
ऑपरेटर केवल अलग पंक्तियाँ देता है। तो हमारे उदाहरण में, Cathy
. के लिए केवल एक पंक्ति लौटाई जाती है , भले ही उस नाम के दो शिक्षक हों।
कुछ अन्य RDBMS हमें एक वैकल्पिक ALL
. स्वीकार करके परिणाम में डुप्लिकेट शामिल करने की अनुमति देते हैं कीवर्ड उनके EXCEPT
. के साथ ऑपरेटर, लेकिन SQLite नहीं करता है (कम से कम, लेखन के समय नहीं)। कुछ भी परिवर्तन होने पर SQLite के दस्तावेज़ों की जाँच करने के लिए स्वतंत्र महसूस करें।
एक वैकल्पिक
EXCEPT
. का उपयोग किए बिना समान परिणाम प्राप्त करना संभव है ऑपरेटर। उदाहरण के लिए, हम इसके लिए अपना पहला उदाहरण फिर से लिख सकते हैं:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
परिणाम:
TeacherName ----------- Ben Cathy