SQL में, OR
ऑपरेटर आपको अपने प्रश्नों को फ़िल्टर करते समय वैकल्पिक स्थितियों का उपयोग करने की अनुमति देता है।
OR
ऑपरेटर दो स्थितियों को जोड़ता है, और TRUE
returns लौटाता है जब कोई भी शर्त TRUE
हो ।
स्रोत तालिका
इस पृष्ठ पर उदाहरणों के लिए निम्न तालिका का उपयोग किया गया है।
SELECT * FROM Pets;
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
उदाहरण
OR
को प्रदर्शित करने के लिए यहां एक सरल उदाहरण दिया गया है ऑपरेटर।
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet';
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
हम देख सकते हैं कि इसने वास्तव में उन पंक्तियों को वापस कर दिया जहां PetName
कॉलम या तो था Fluffy
या Tweet
. कोई अन्य पंक्तियाँ नहीं लौटाई गईं।
विभिन्न कॉलम
पिछले उदाहरण में, दोनों स्थितियां एक ही कॉलम से मानों की तुलना कर रही थीं, लेकिन यह कोई आवश्यकता नहीं है। OR
. के दोनों ओर के भाव मूल्यों की तुलना करने के लिए ऑपरेटर विभिन्न स्तंभों का उपयोग कर सकता है। OR
ऑपरेटर बस TRUE
लौटाएगा जब इनमें से कोई भी शर्त TRUE
हो ।
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR DOB < '2020-01-01';
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
अन्य ऑपरेटरों के साथ संयुक्त
आपके फ़िल्टरिंग मानदंड उन अभिव्यक्तियों को जोड़ सकते हैं जो OR
. के अतिरिक्त अन्य ऑपरेटरों का उपयोग करते हैं ऑपरेटर।
यहां एक उदाहरण दिया गया है जिसमें AND
शामिल है ऑपरेटर।
SELECT * FROM Pets
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
ध्यान दें कि मैंने OR
. को घेर लिया है कोष्ठक के साथ स्थिति। मैंने ऐसा इसलिए किया क्योंकि, डिफ़ॉल्ट रूप से, OR
ऑपरेटरों का मूल्यांकन AND
. के बाद किया जाता है ऑपरेटरों। SQL में एक एक्सप्रेशन में ऑपरेटरों की प्राथमिकता का एक परिभाषित क्रम होता है, और यह निर्देश देता है कि AND
ऑपरेटर का मूल्यांकन OR
. से पहले किया जाता है ऑपरेटर।
हालांकि, आप अभिव्यक्ति में ऑपरेटरों की परिभाषित प्राथमिकता को ओवरराइड करने के लिए कोष्ठक का उपयोग कर सकते हैं। कोष्ठक के भीतर सब कुछ एक मूल्य वापस करने के लिए मूल्यांकन किया जाता है। उस मान का उपयोग किसी भी ऑपरेटर द्वारा उन कोष्ठकों के बाहर किया जा सकता है।
दूसरे शब्दों में, आप कोष्ठक का उपयोग उस क्रम को निर्दिष्ट करने के लिए कर सकते हैं जिसमें आप चाहते हैं कि प्रत्येक तार्किक ऑपरेटर का मूल्यांकन एक व्यंजक में किया जाए।
यह एक मुद्दा क्यों है?
जब हम कोष्ठक हटाते हैं तो परिणामों पर एक नज़र डालें।
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
हमें वास्तव में एक अलग परिणाम मिलता है।
ऐसा इसलिए है, क्योंकि क्वेरी अब PetName = 'Tweet' AND DOB >= '2020-11-20'
की जांच करती है। सबसे पहले, फिर OR
की जांच करता है अभिव्यक्ति PetName = 'Fluffy'
।
यह ऐसा है जैसे हम AND
. के चारों ओर कोष्ठक लगाते हैं अभिव्यक्ति, इस तरह:
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');
हालांकि, चीजों को और अधिक भ्रमित करने के लिए, हम अपनी क्वेरी को पुनर्व्यवस्थित कर सकते हैं ताकि हम कोष्ठक का उपयोग न करें, और फिर भी वही परिणाम प्राप्त करें जो हमारे पहले उदाहरण कोष्ठक के साथ है।
इस तरह:
SELECT * FROM Pets
WHERE DOB >= '2020-11-20'
AND PetName = 'Fluffy' OR PetName = 'Tweet';
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
इस मामले में, AND
अपेक्षित के रूप में पहले अभिव्यक्ति का मूल्यांकन किया गया था। भावों का क्रम बस इतना हुआ कि DOB >= '2020-11-20' AND PetName = 'Fluffy'
पहले मूल्यांकन किया गया था, इसलिए हमने Fluffy नामक दूसरे पालतू जानवर को उसके DOB
. के कारण बाहर कर दिया उस सीमा से बाहर गिरना। उसके बाद ही, OR
. था अभिव्यक्ति का मूल्यांकन हमारे मौजूदा AND
. की वैकल्पिक स्थिति के रूप में किया जाता है परिणाम।
इस कहानी से क्या शिक्षा मिलती है? एकाधिक ऑपरेटरों का उपयोग करते समय कोष्ठक का प्रयोग करें। इस तरह आप सटीक क्रम निर्दिष्ट कर सकते हैं जिसमें आप चाहते हैं कि प्रत्येक अभिव्यक्ति का मूल्यांकन किया जाए।