SQL क्वेरी को SQLite डेटाबेस में लिखने के लिए, आपको यह जानना होगा कि SELECT, FROM, WHERE, GROUP BY, ORDER BY, और LIMIT क्लॉस कैसे काम करते हैं और उनका उपयोग कैसे करें।
इस ट्यूटोरियल के दौरान, आप सीखेंगे कि इन क्लॉस का उपयोग कैसे करें और SQLite क्लॉस कैसे लिखें।
इस ट्यूटोरियल में, आप सीखेंगे-
- चयन के साथ डेटा पढ़ना
- नाम और उपनाम
- कहां है
- सीमित करना और आदेश देना
- डुप्लिकेट निकाल रहा है
- कुल
- समूह द्वारा
- प्रश्न और उपश्रेणी
- ऑपरेशन्स सेट करें, इनरसेक्ट करें
- पूरा संभालना
- सशर्त परिणाम
- सामान्य तालिका अभिव्यक्ति
- उन्नत प्रश्न
चयन के साथ डेटा पढ़ना
चयन खंड एक SQLite डेटाबेस को क्वेरी करने के लिए उपयोग किया जाने वाला मुख्य कथन है। सेलेक्ट क्लॉज में, आप यह चुनें कि आपको क्या चुनना है। लेकिन सेलेक्ट क्लॉज से पहले, आइए देखें कि हम FROM क्लॉज का उपयोग करके डेटा का चयन कहां से कर सकते हैं।
FROM क्लॉज़ का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि आप डेटा कहाँ चुनना चाहते हैं। क्लॉज से, आप डेटा का चयन करने के लिए एक या एक से अधिक तालिका या उपकुंजी निर्दिष्ट कर सकते हैं, जैसा कि हम बाद में ट्यूटोरियल पर देखेंगे।
ध्यान दें कि, निम्नलिखित सभी उदाहरणों के लिए, आपको sqlite3.exe चलाना होगा और नमूना डेटाबेस के लिए एक कनेक्शन खोलना होगा:
चरण 1) इस चरण में,
- मेरा कंप्यूटर खोलें और निम्न निर्देशिका " C: \ sqlite " पर नेविगेट करें और
- फिर " sqlite3.exe " खोलें :
चरण 2) डेटाबेस " TutorialsSampleDB.db " को निम्न कमांड द्वारा खोलें :
अब आप डेटाबेस पर किसी भी प्रकार की क्वेरी चलाने के लिए तैयार हैं।
सेलेक्ट क्लॉज में, आप न केवल एक कॉलम नाम का चयन कर सकते हैं, बल्कि आपके पास चयन करने के लिए निर्दिष्ट करने के लिए बहुत सारे अन्य विकल्प हैं। निम्नलिखित के रूप में:
चुनते हैं *
यह कमांड FROM क्लॉज में सभी संदर्भित तालिकाओं (या उपश्रेणियों) से सभी कॉलमों का चयन करेगी। उदाहरण के लिए:
चुनते हैं *छात्रों सेINNER JOIN विभागों पर Students.DepboxId = Departments.DepboxId;
यह दोनों तालिकाओं के छात्रों और विभागों की तालिकाओं से सभी कॉलमों का चयन करेगा:
टैबलेन का चयन करें। *
यह केवल तालिका "टैबलेन" से सभी कॉलम का चयन करेगा। उदाहरण के लिए:
छात्रों का चयन करें। *छात्रों सेINNER JOIN विभागों पर Students.DepboxId = Departments.DepboxId;
यह केवल छात्र तालिका से सभी कॉलम का चयन करेगा:
एक शाब्दिक मूल्य
एक शाब्दिक मूल्य एक स्थिर मूल्य है जिसे चुनिंदा कथन में निर्दिष्ट किया जा सकता है। आप शाब्दिक मूल्यों का उपयोग उसी तरह कर सकते हैं जिस तरह से आप सेलेक्ट क्लॉज में कॉलम नामों का उपयोग करते हैं। ये शाब्दिक मान SQL क्वेरी द्वारा दी गई पंक्तियों से प्रत्येक पंक्ति के लिए प्रदर्शित किए जाएंगे।
यहाँ विभिन्न शाब्दिक मूल्यों के कुछ उदाहरण दिए गए हैं जिन्हें आप चुन सकते हैं:
- संख्यात्मक साहित्य - किसी भी प्रारूप में संख्याएँ जैसे 1, 2.55,… आदि।
- स्ट्रिंग शाब्दिक - कोई भी स्ट्रिंग 'यूएसए', 'यह एक नमूना पाठ है' ... आदि।
- पूर्ण - पूर्ण मान।
- वर्तमान-समय - यह आपको वर्तमान समय देगा।
- CURRENT_DATE - यह आपको वर्तमान तिथि देगा।
यह कुछ स्थितियों में आसान हो सकता है जहां आपको सभी लौटी पंक्तियों के लिए एक निरंतर मूल्य का चयन करना होगा। उदाहरण के लिए, यदि आप छात्र तालिका से सभी छात्रों का चयन करना चाहते हैं, तो एक नए कॉलम के साथ एक देश जिसे "यूएसए" कहा जाता है, आप ऐसा कर सकते हैं:
चयनित *, 'यूएसए' छात्रों से देश के रूप में;
यह आपको सभी छात्रों के कॉलम, साथ ही एक नया कॉलम "देश" देगा:
ध्यान दें, यह नया स्तंभ देश वास्तव में तालिका में जोड़ा गया एक नया स्तंभ नहीं है। यह एक वर्चुअल कॉलम है, जो परिणामों को प्रदर्शित करने के लिए क्वेरी में बनाया गया है और इसे टेबल पर नहीं बनाया जाएगा।
नाम और उपनाम
उपनाम स्तंभ के लिए एक नया नाम है जो आपको एक नए नाम के साथ कॉलम का चयन करने देता है। कॉलम उपनाम "AS" कीवर्ड का उपयोग करके निर्दिष्ट किया गया है।
उदाहरण के लिए, यदि आप "स्टूडेंट नेम" के बजाय "स्टूडेंट नेम" के साथ लौटाए जाने वाले स्टूडेंटनाम के कॉलम का चयन करना चाहते हैं, तो आप इसे इस तरह से एक अन्य नाम दे सकते हैं:
छात्र से 'छात्र का नाम' चुनें;
यह आपको इस तरह से "छात्रनाम" के बजाय छात्रों के नाम "छात्र का नाम" देगा:
ध्यान दें कि, स्तंभ का नाम अभी भी " छात्रनाम " है; स्तंभ छात्रनाम अभी भी वही है, यह उपनाम से नहीं बदलता है।
उपनाम स्तंभ नाम नहीं बदलेगा; यह सिलेक्ट क्लॉज में केवल डिस्प्ले नेम को बदलेगा।
यह भी ध्यान दें कि, "AS" शब्द वैकल्पिक है, आप इसके बिना उपनाम नाम रख सकते हैं, कुछ इस तरह से:
छात्रों का चयन करें 'छात्र का नाम' छात्रों से;
और यह आपको पिछली क्वेरी के समान सटीक आउटपुट देगा:
आप केवल स्तंभ ही नहीं, टेबल उपनाम भी दे सकते हैं। उसी कीवर्ड "AS" के साथ। उदाहरण के लिए, आप यह कर सकते हैं:
छात्रों का चयन करें।
इससे आपको तालिका के सभी कॉलम मिल जाएंगे:
यदि आप एक से अधिक तालिका में शामिल हो रहे हैं तो यह बहुत उपयोगी हो सकता है; क्वेरी में पूर्ण तालिका नाम दोहराने के बजाय, आप प्रत्येक तालिका को एक छोटा नाम दे सकते हैं। उदाहरण के लिए, निम्नलिखित प्रश्न में:
छात्रों का चयन करेंछात्रों सेINNER JOIN विभागों पर Students.DepboxId = Departments.DepboxId;
यह क्वेरी "छात्र" तालिका से "विभाग" तालिका के विभाग के नाम के साथ प्रत्येक छात्र के नाम का चयन करेगी:
हालाँकि, एक ही क्वेरी को इस तरह लिखा जा सकता है:
चयन करेंछात्रों के रूप में एसINNER JOIN विभागों के रूप में d। S पर s depboxId = d.DepartmentId;
- हमने छात्रों को एक उपनाम "s" दिया और विभागों ने एक उपनाम "d" दिया।
- फिर पूर्ण तालिका के नाम का उपयोग करने के बजाय, हमने उन्हें संदर्भित करने के लिए उनके उपनाम का उपयोग किया।
- INNER JOIN एक शर्त का उपयोग करते हुए दो या अधिक तालिकाओं को एक साथ जोड़ता है। हमारे उदाहरण में, हम डिपार्टमेंट्स टेबल के साथ डिपार्टमेंट टेबल के साथ स्टूडेंट्स टेबल में शामिल हो गए। "SQLite जॉइन" ट्यूटोरियल में INNER JOIN के लिए एक गहन व्याख्या भी है।
यह आपको पिछली क्वेरी के समान सटीक आउटपुट देगा:
कहां है
जैसा कि हमने पिछले भाग में देखा था, FROM क्लॉज के साथ अकेले चयन क्लॉज़ का उपयोग करके एसक्यूएल क्वेरी लिखना, आपको तालिकाओं से सभी पंक्तियाँ देगा। हालाँकि, यदि आप लौटाए गए डेटा को फ़िल्टर करना चाहते हैं, तो आपको "WHERE" क्लॉज़ जोड़ना होगा।
WHERE क्लॉज का उपयोग SQL क्वेरी द्वारा लौटाए गए परिणाम सेट को फ़िल्टर करने के लिए किया जाता है। यह कैसे काम करता है:
- WHERE क्लॉज में, आप "एक्सप्रेशन" निर्दिष्ट कर सकते हैं।
- उस अभिव्यक्ति का मूल्यांकन FROM क्लॉज में निर्दिष्ट तालिका से लौटी प्रत्येक पंक्ति के लिए किया जाएगा।
- अभिव्यक्ति का मूल्यांकन एक बूलियन अभिव्यक्ति के रूप में किया जाएगा, जिसके परिणामस्वरूप सच, गलत या अशक्त होगा।
- फिर केवल उन पंक्तियों के लिए जिनके लिए एक सच्चे मूल्य के साथ अभिव्यक्ति का मूल्यांकन किया गया था, और उन्हें गलत, या अशक्त परिणामों के साथ अनदेखा किया जाएगा और परिणाम सेट में शामिल नहीं किया जाएगा।
- WHERE क्लॉज का उपयोग करके सेट किए गए परिणामों को फ़िल्टर करने के लिए, आपको अभिव्यक्तियों और ऑपरेटरों का उपयोग करना होगा।
SQLite में ऑपरेटरों की सूची और उनका उपयोग कैसे करें
निम्नलिखित अनुभाग में, हम बताएंगे कि आप अभिव्यक्ति और ऑपरेटरों का उपयोग करके कैसे फ़िल्टर कर सकते हैं।
अभिव्यक्ति एक या एक से अधिक शाब्दिक मान या स्तंभ एक ऑपरेटर के साथ एक दूसरे के साथ संयुक्त है।
ध्यान दें, आप सेलेक्ट क्लॉज और व्हेयर क्लॉज दोनों में एक्सप्रेशन का उपयोग कर सकते हैं।
निम्नलिखित उदाहरणों में, हम चयन खंड और WHERE क्लॉज दोनों में अभिव्यक्तियों और ऑपरेटरों की कोशिश करेंगे। आपको यह दिखाने के लिए कि वे कैसा प्रदर्शन करते हैं।
विभिन्न प्रकार के भाव और संचालक हैं जिन्हें आप निम्नानुसार निर्दिष्ट कर सकते हैं:
"संचालक संघटन" को SQLite करें ||
इस ऑपरेटर का उपयोग एक या एक से अधिक शाब्दिक मूल्यों या स्तंभों को एक दूसरे से जोड़ने के लिए किया जाता है। यह सभी संक्षिप्त शाब्दिक मूल्यों या स्तंभों से परिणामों की एक स्ट्रिंग का उत्पादन करेगा। उदाहरण के लिए:
'Id with Name:' का चयन करें || स्टूडेंट आई डी || छात्रनामछात्रों से;
यह एक नया उपनाम " स्टूडेंट आईडिथनेम " में सम्मिलित करेगा :
- शाब्दिक स्ट्रिंग मान " नाम के साथ आईडी: "
- " StudentId " कॉलम के मान के साथ और
- " StudentName " कॉलम से मान के साथ
SQLite कास्ट ऑपरेटर:
CAST ऑपरेटर का उपयोग किसी मान को डेटा प्रकार से दूसरे डेटा प्रकार में परिवर्तित करने के लिए किया जाता है।
उदाहरण के लिए, यदि आपके पास इस " '12 .5 ' " जैसे एक स्ट्रिंग मान के रूप में एक संख्यात्मक मान संग्रहीत है और आप इसे एक संख्यात्मक मान के रूप में परिवर्तित करना चाहते हैं तो आप इसे " CAST ('12 .5') इस तरह से करने के लिए CAST ऑपरेटर का उपयोग कर सकते हैं। वास्तविक) ”। या यदि आपके पास 12.5 जैसा एक दशमलव मान है, और आपको केवल पूर्णांक भाग प्राप्त करने की आवश्यकता है, तो आप इसे "CAST (12.5 AS INTEGER)" जैसे पूर्णांक में डाल सकते हैं।
उदाहरण
निम्नलिखित कमांड में हम विभिन्न मूल्यों को अन्य डेटा प्रकारों में बदलने का प्रयास करेंगे:
चयनित कैस्ट ('12 .5 'AS REAL) ToReal, CAST (12.5 AS INTEGER) के रूप में Toteger;
यह आपको देगा:
परिणाम इस प्रकार है:
- CAST ('12 .5 'AS REAL) - मान '12 .5' एक स्ट्रिंग मान है, इसे REAL मान में परिवर्तित किया जाएगा।
- CAST (12.5 AS INTEGER) - मान 12.5 एक दशमलव मान है, इसे पूर्णांक मान में परिवर्तित किया जाएगा। दशमलव भाग को काट दिया जाएगा, और यह 12 हो जाता है।
SQLite अंकगणितीय ऑपरेटर:
दो या अधिक संख्यात्मक शाब्दिक मान या संख्यात्मक कॉलम लें और एक संख्यात्मक मान लौटाएं। SQLite में समर्थित अंकगणित ऑपरेटर हैं:
|
उदाहरण:
निम्नलिखित उदाहरण में, हम पाँच अंकगणितीय संचालकों को उसी में शाब्दिक संख्यात्मक मानों के साथ आज़माएँगे
क्लॉज चुनें:
25 + 6, 25-6, 25 * 6, 25% 6, 25/6 का चयन करें;
यह आपको देगा:
ध्यान दें कि हमने यहां FROM क्लॉज के बिना एक SELECT स्टेटमेंट का उपयोग कैसे किया। और जब तक हम शाब्दिक मूल्यों का चयन करते हैं, तब तक SQLite में इसकी अनुमति है।
SQLite तुलना ऑपरेटरों
एक दूसरे के साथ दो ऑपरेंड्स की तुलना करें और निम्नानुसार एक सही या गलत लौटाएं:
|
ध्यान दें कि, SQLite 1 के साथ सही मान और 0 के साथ गलत मान व्यक्त करता है।
उदाहरण:
चुनते हैं10 <6 AS '<', 10 <= 6 AS '<=',10> 6 एएस '>', 10> = 6 एएस '> =',10 = 6 एएस '=', 10 == 6 एएस '==')10! = 6 AS '! =', 10 <> 6 AS '<>';
यह कुछ इस तरह देगा:
SQLite पैटर्न मिलान ऑपरेटरों
" LIKE " - पैटर्न मिलान के लिए उपयोग किया जाता है। " लाइक " का उपयोग करके , आप उन मूल्यों की खोज कर सकते हैं जो वाइल्डकार्ड का उपयोग करके निर्दिष्ट पैटर्न से मेल खाते हैं।
बाईं ओर का ऑपरेंड या तो एक स्ट्रिंग शाब्दिक मूल्य या एक स्ट्रिंग स्तंभ हो सकता है। पैटर्न निम्नानुसार निर्दिष्ट किया जा सकता है:
- पैटर्न शामिल हैं। उदाहरण के लिए, छात्रनाम '% a% ’ - यह छात्रों के उन नामों की खोज करेगा जिनमें छात्रनाम कॉलम पर किसी भी स्थिति में" a "अक्षर होता है।
- पैटर्न के साथ शुरू होता है। उदाहरण के लिए, " StudentName LIKE 'a%' -" अक्षर "a से शुरू होने वाले छात्रों के नाम खोजें।
- पैटर्न के साथ समाप्त होता है। उदाहरण के लिए, " StudentName LIKE '% a " - अक्षर "a" अक्षर के साथ समाप्त होने वाले छात्रों के नाम खोजें।
- अंडरस्कोर अक्षर "_" का उपयोग करके स्ट्रिंग में किसी भी एकल वर्ण का मिलान करना। उदाहरण के लिए, " StudentName LIKE 'J___' " - छात्रों के नाम खोजें जो 4 वर्णों की लंबाई हैं। यह "J" अक्षर से शुरू होना चाहिए और "J" अक्षर के बाद किसी भी अन्य तीन और अक्षर हो सकते हैं।
पैटर्न मिलान उदाहरण:
- छात्रों के नाम प्राप्त करें जो 'j' अक्षर से शुरू होते हैं:
छात्रों से छात्र का चयन करें, जहां छात्रनाम 'j% ’पसंद करता है;
परिणाम:
- 'Y' अक्षर के साथ छात्रों के नाम प्राप्त करें:
छात्रों से छात्रनाम का चयन करें, जहां छात्रनाम '% y' पसंद करता है;
परिणाम:
- छात्रों के नाम प्राप्त करें जिनमें 'n' अक्षर है:
छात्रों से छात्रनाम का चयन करें, जहां छात्रनाम '% n%' पसंद करता है;
परिणाम:
"GLOB" - LIKE ऑपरेटर के बराबर है, लेकिन LIKE ऑपरेटर के विपरीत GLOB संवेदनशील है। उदाहरण के लिए, निम्नलिखित दो आदेश अलग परिणाम देंगे:
'जैक' GLOB 'j%' का चयन करें;'जैक' LIKE 'j%' का चयन करें;
यह आपको देगा:
- पहला कथन 0 (गलत) देता है क्योंकि GLOB ऑपरेटर संवेदनशील है, इसलिए 'J' 'J' के बराबर नहीं है। हालाँकि, दूसरा कथन 1 (सही) वापस आएगा क्योंकि LIKE ऑपरेटर असंवेदनशील है, इसलिए 'J' 'J' के बराबर है।
अन्य ऑपरेटर:
SQLite और
एक तार्किक ऑपरेटर जो एक या अधिक अभिव्यक्तियों को जोड़ता है। यह सच है, केवल तभी जब सभी अभिव्यक्तियाँ एक "सही" मान देती हैं। हालाँकि, यह केवल तभी गलत होगा जब सभी अभिव्यक्तियाँ "गलत" मान प्राप्त करेंगी।
उदाहरण:
निम्नलिखित प्रश्न उन छात्रों की खोज करेंगे जिनके पास StudentId> 5 और StudentName अक्षर N से शुरू होता है, लौटे छात्रों को दो छात्रों को पूरा करना होगा:
चुनते हैं *छात्रों सेकहाँ (छात्र> 5) और (छात्रनाम 'एन%');
आउटपुट के रूप में, उपरोक्त स्क्रीनशॉट में, यह आपको केवल "नैन्सी" देगा। नैन्सी एकमात्र ऐसी छात्रा है जो दोनों स्थितियों को पूरा करती है।
SQLite OR
एक तार्किक ऑपरेटर जो एक या एक से अधिक अभिव्यक्तियों को जोड़ता है, ताकि यदि संयुक्त संचालकों में से कोई एक सत्य प्राप्त करता है, तो यह सच हो जाएगा। हालाँकि, यदि सभी भाव गलत हैं, तो यह गलत होगा।
उदाहरण:
निम्न प्रश्न उन छात्रों को खोजेगा जिनके पास छात्र> 5 या छात्रनाम एन अक्षर से शुरू होता है, लौटे छात्रों को कम से कम एक शर्तों को पूरा करना होगा:
चुनते हैं *छात्रों सेकहाँ (छात्र> 5) या (छात्रनाम 'एन%');
यह आपको देगा:
एक आउटपुट के रूप में, उपरोक्त स्क्रीनशॉट में, यह आपको एक छात्र का नाम देगा जिसमें उनके नाम में "n" अक्षर होगा और साथ ही छात्र की id> मान> 5 होगा।
जैसा कि आप देख सकते हैं कि परिणाम AND ऑपरेटर के साथ क्वेरी से भिन्न है।
SQLite BETWEEN
BETWEEN का उपयोग उन मूल्यों को चुनने के लिए किया जाता है जो दो मानों की श्रेणी के भीतर हैं। उदाहरण के लिए, " X BETWEEN Y AND Z " सही (1) लौटाएगा यदि मान X दो मान Y और Z के बीच है। अन्यथा, यह गलत (0) वापस आ जाएगा। " X BETWEEN Y AND Z " " X> = Y AND X <= Z " के बराबर है, X का Y से अधिक या बराबर होना चाहिए और X, Z के बराबर या उससे कम है।
उदाहरण:
निम्नलिखित उदाहरण क्वेरी में, हम 5 और 8 के बीच Id मान वाले छात्रों को प्राप्त करने के लिए एक प्रश्न लिखेंगे:
चुनते हैं *छात्रों सेजहां छात्र 5 और 8 पास हो;
यह केवल छात्रों को 5, 6, 7 और 8 अंक देगा।
SQLite में
एक ऑपरेंड और ऑपरेंड की एक सूची लेता है। यदि सूची में से किसी एक ऑपरेंड के मूल्य के बराबर पहला ऑपरेंड मान सही है, तो यह वापस आ जाएगा। IN ऑपरेटर सही है (1) यदि ऑपरेंड की सूची में इसके मान के भीतर पहला ऑपरेंड वैल्यू है। अन्यथा, यह गलत (0) वापस आ जाएगा।
जैसे: " col IN (x, y, z) "। यह " (col = x) या (col = y) या (col = z) " के बराबर है ।
उदाहरण:
निम्नलिखित प्रश्न केवल 2, 4, 6, 8 वाले छात्रों का चयन करेंगे:
चुनते हैं *छात्रों सेकहाँ छात्र में (2, 4, 6, 8);
इस कदर:
पिछली क्वेरी निम्न क्वेरी के रूप में सटीक परिणाम देगी क्योंकि वे समकक्ष हैं:
चुनते हैं *छात्रों सेWHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR या (StudentId = 8);
दोनों प्रश्न सटीक आउटपुट देते हैं। हालांकि, दो प्रश्नों के बीच का अंतर है, पहली क्वेरी हमने "IN" ऑपरेटर का उपयोग किया। दूसरी क्वेरी में, हमने कई "OR" ऑपरेटरों का उपयोग किया।
IN ऑपरेटर कई OR ऑपरेटर का उपयोग करने के बराबर है। " WHERE StudentId IN (2, 4, 6, 8) " " WHERE (StudentId = 2) OR (StudentId = 4) OR या (StudentId = 6) OR (StudentId = 8) के बराबर है; "
इस कदर:
SQLite नहीं में
"NOT IN" ऑपरेंड IN ऑपरेटर के विपरीत है। लेकिन एक ही वाक्यविन्यास के साथ; यह एक ऑपरेंड और ऑपरेंड की एक सूची लेता है। यदि पहला ऑपरेंड मान सूची से किसी ऑपरेंड के मूल्य के बराबर नहीं है तो यह सही होगा। यदि, ऑपरेंड की सूची में पहले ऑपरेंड शामिल नहीं है, तो यह सच (0) वापस आ जाएगी। इस तरह: " col NOT IN IN (x, y, z) "। यह " (col <> x) और (col <> y) AND (col <> z) " के बराबर है ।
उदाहरण:
निम्न क्वेरी उन छात्रों के साथ चुनेगी, जिनके पास इन Ids 2, 4, 6, 8 में से एक के बराबर नहीं है:
चुनते हैं *छात्रों सेकहाँ छात्र में नहीं (2, 4, 6, 8);
इस कदर
पिछली क्वेरी को हम निम्न क्वेरी के रूप में सटीक परिणाम देते हैं क्योंकि वे समकक्ष हैं:
चुनते हैं *छात्रों सेकहां (स्टूडेंटआईड <> 2) और (स्टूडेंटआईड <> 4) और (स्टूडेंटआईड <> 6) और (स्टूडेंटआईड <> 8);
इस कदर:
उपरोक्त स्क्रीनशॉट में,
हमने छात्रों की एक सूची प्राप्त करने के लिए कई नहीं के बराबर ऑपरेटरों "<>" का उपयोग किया, जो कि निम्नलिखित में से किसी भी Id के 2, 4, 6, न के बराबर नहीं हैं। 8. यह क्वेरी Id की इन सूची के अलावा अन्य सभी छात्रों को लौटाएगी।
SQLite EXISTS
EXISTS ऑपरेटर कोई ऑपरेंड नहीं लेते हैं; इसके बाद केवल एक सेलेक्ट क्लॉज लगता है। EXISTS ऑपरेटर सही (1) लौटाएगा यदि सेलेक्ट क्लॉज से कोई पंक्तियाँ वापस आती हैं, और यह तब तक गलत (0) वापस आ जाएगी जब सेलेक्ट क्लॉज़ से सभी पंक्तियाँ वापस नहीं आती हैं।
उदाहरण:
निम्नलिखित उदाहरण में, हम विभाग के नाम का चयन करेंगे, यदि विभाग आईडी छात्रों की तालिका में मौजूद है:
विभाग का चयन करेंसे विभागों के रूप में dजहां से छात्रों का चयन होता है, वहां से विभाग का चयन करें।
यह आपको देगा:
केवल तीन विभागों " आईटी, भौतिकी और कला " को लौटाया जाएगा। और विभाग का नाम " गणित " वापस नहीं किया जाएगा क्योंकि उस विभाग में कोई छात्र नहीं है, इसलिए विभाग आईडी छात्रों की तालिका में मौजूद नहीं है। यही कारण है कि EXISTS ऑपरेटर ने " गणित " विभाग की उपेक्षा की ।
SQLite नहीं
इसके बाद आने वाले ऑपरेटर के परिणाम को उलट देता है। उदाहरण के लिए:
- BETWEEN नहीं - यह सही है अगर BETWEEN झूठी और इसके विपरीत लौट आए।
- नहीं पसंद - अगर झूठ गलत है और इसके विपरीत है तो यह सच हो जाएगा।
- GLOB नहीं - यह सही साबित होगा यदि GLOB गलत और इसके विपरीत लौटता है।
- EXISTS नहीं - यदि EXISTS गलत है और इसके विपरीत है तो यह सही है।
उदाहरण:
निम्नलिखित उदाहरण में, हम छात्रों के टेबल में मौजूद विभागों के नाम प्राप्त करने के लिए EXISTS ऑपरेटर के साथ NOT ऑपरेटर का उपयोग करेंगे, जो EXISTS ऑपरेटर का रिवर्स परिणाम है। इसलिए, खोज विभागीय विभाग के माध्यम से की जाएगी जो विभाग तालिका में मौजूद नहीं है।
विभाग का चयन करेंसे विभागों के रूप में dजहां नहीं है (चयन विभाग का चयन करेंछात्रों के रूप में एसजहां d.DepartmentId = s.DepboxId);
आउटपुट :
केवल विभाग " मठ " को वापस किया जाएगा। क्योंकि " गणित " विभाग एकमात्र विभाग है, जो छात्रों की तालिका में मौजूद नहीं है।
सीमित करना और आदेश देना
SQLite आदेश
SQLite ऑर्डर आपके परिणाम को एक या अधिक अभिव्यक्तियों के आधार पर क्रमबद्ध करना है। परिणाम सेट करने के लिए, आपको निम्नानुसार ORDER BY क्लॉज का उपयोग करना होगा:
- सबसे पहले, आपको ORDER BY क्लॉज को निर्दिष्ट करना होगा।
- आदेश द्वारा खंड को क्वेरी के अंत में निर्दिष्ट किया जाना चाहिए; इसके बाद केवल सीमा खंड निर्दिष्ट किया जा सकता है।
- डेटा के साथ ऑर्डर करने के लिए अभिव्यक्ति निर्दिष्ट करें, यह अभिव्यक्ति एक कॉलम नाम या एक अभिव्यक्ति हो सकती है।
- अभिव्यक्ति के बाद, आप एक वैकल्पिक सॉर्ट दिशा निर्दिष्ट कर सकते हैं। या तो DESC, डेटा अवरोही या ASC को ऑर्डर करने के लिए डेटा आरोही। यदि आपने उनमें से कोई भी निर्दिष्ट नहीं किया है, तो डेटा को आरोही क्रमबद्ध किया जाएगा।
- आप एक दूसरे के बीच "," का उपयोग करके अधिक अभिव्यक्ति निर्दिष्ट कर सकते हैं।
उदाहरण
निम्नलिखित उदाहरण में, हम सभी छात्रों को उनके नाम से आदेश देंगे, लेकिन अवरोही क्रम में, फिर आरोही क्रम में विभाग के नाम से:
चयन करेंछात्रों के रूप में एसINNER JOIN विभाग के रूप में d.DepartmentId = d.DepartmentId पर हैORDER BY d.DepartmentName ASC, s.StudentName DESC;
यह आपको देगा:
- SQLite पहले सभी छात्रों को उनके विभाग के नाम पर आरोही क्रम में आदेश देगा
- फिर प्रत्येक विभाग के नाम के लिए, उस विभाग के नाम के तहत सभी छात्रों को उनके नाम से अवरोही क्रम में प्रदर्शित किया जाएगा
SQLite सीमा:
आप अपनी SQL क्वेरी द्वारा दी गई पंक्तियों की संख्या को सीमित कर सकते हैं, लिमाइट क्लॉज का उपयोग करके। उदाहरण के लिए, LIMIT 10 आपको केवल 10 पंक्तियाँ देगा और अन्य सभी पंक्तियों को अनदेखा करेगा।
LIMIT क्लॉज में, आप OFFSET क्लॉज का उपयोग करके एक विशिष्ट स्थिति से शुरू होने वाली विशिष्ट पंक्तियों का चयन कर सकते हैं। उदाहरण के लिए, " LIMIT 4 OFFSET 4 " पहले 4 पंक्तियों को अनदेखा करेगा, और 5 पंक्तियों से शुरू होने वाली 4 पंक्तियाँ लौटाएगा, इसलिए आपको पंक्तियाँ 5,6,7, और 8 मिलेंगी।
ध्यान दें कि OFFSET क्लॉज वैकल्पिक है, आप इसे " LIMIT 4, 4 " की तरह लिख सकते हैं और यह आपको सटीक परिणाम देगा।
उदाहरण :
निम्नलिखित उदाहरण में, हम छात्र आईडी 5 से शुरू करने वाले केवल 3 छात्रों को क्वेरी का उपयोग करके वापस करेंगे:
छात्रों से चयन करें * 4,3 लिमिट से;
यह आपको केवल 5 पंक्ति से शुरू होने वाले तीन छात्र देगा।
डुप्लिकेट निकाल रहा है
यदि आपकी SQL क्वेरी डुप्लिकेट मान लौटाती है, तो आप उन डुप्लिकेट को निकालने के लिए " DISTINCT " कीवर्ड का उपयोग कर सकते हैं और अलग-अलग मानों पर लौट सकते हैं। आप DISTINCT कुंजी कार्य के बाद एक से अधिक कॉलम निर्दिष्ट कर सकते हैं।
उदाहरण:
निम्नलिखित क्वेरी डुप्लिकेट "विभाग का नाम मान" लौटाएगी: यहां हमारे पास आईटी, भौतिकी और कला के नामों के साथ डुप्लिकेट मान हैं।
D.DepartmentName का चयन करेंछात्रों के रूप में एसINNER JOIN विभागों के रूप में d। S पर s depboxId = d.DepartmentId;
यह आपको विभाग के नाम के लिए डुप्लिकेट मान देगा:
ध्यान दें, विभाग के नाम के लिए डुप्लिकेट मान कैसे हैं। अब, हम डुप्लिकेट कीवर्ड का उपयोग उसी डुप्लिकेट को निकालने के लिए उसी क्वेरी के साथ करेंगे और केवल अनन्य मान प्राप्त करेंगे। इस कदर:
DISTINCT d.DepartmentName का चयन करेंछात्रों के रूप में एसINNER JOIN विभागों के रूप में d। S पर s depboxId = d.DepartmentId;
यह आपको विभाग के नाम कॉलम के लिए केवल तीन अद्वितीय मान देगा:
कुल
SQLite एग्रीगेट्स बिल्ट-इन फ़ंक्शन SQLite में परिभाषित हैं जो कई पंक्तियों के कई मानों को एक मान में समूहित करेंगे।
यहाँ SQLite द्वारा समर्थित समुच्चय हैं:
SQLite AVG ()
सभी x मानों के लिए औसत लौटाया।
उदाहरण:
निम्नलिखित उदाहरण में हम सभी परीक्षाओं से प्राप्त करने के लिए छात्रों को औसत अंक प्राप्त करेंगे:
मार्क्स से एवीजी (मार्क) का चयन करें;
इससे आपको "18.375" मूल्य मिलेगा:
ये परिणाम उनकी गिनती से विभाजित सभी चिह्न मूल्यों के योग से आते हैं।
COUNT () - COUNT (X) या COUNT (*)
एक्स मान प्रकट होने की संख्या की कुल संख्या लौटाता है। और यहां कुछ विकल्प दिए गए हैं जिनका आप COUNT के साथ उपयोग कर सकते हैं:
- COUNT (x): केवल x मानों की गणना करता है, जहाँ x एक स्तंभ नाम है। यह NULL मानों की अनदेखी करेगा।
- COUNT (*): सभी कॉलम से सभी पंक्तियों को गिनें।
- COUNT (DISTINCT x): आप DISTINCT कीवर्ड को x से पहले निर्दिष्ट कर सकते हैं जिसे x के अलग-अलग मानों की गिनती मिल जाएगी।
उदाहरण
निम्नलिखित उदाहरण में, हमें COUNT (DepartmentId), COUNT (*), और COUNT (DISTINCT DepartmentId) के साथ विभागों की कुल संख्या मिलेगी और वे कैसे भिन्न हैं:
चयनित COUNT (DepartmentId), COUNT (DISTINCT DepartmentId), COUNT (*) छात्रों से;
यह आपको देगा:
निम्नलिखित के रूप में:
- COUNT (DepartmentId) आपको सभी विभाग आईडी की गिनती देगा, और यह अशक्त मूल्यों की अनदेखी करेगा।
- COUNT (DISTINCT DepartmentId) आपको DepartmentId के अलग-अलग मान देते हैं, जो केवल 3. हैं। जो कि विभाग के नाम के तीन अलग-अलग मूल्य हैं। ध्यान दें कि छात्र के नाम में विभाग के नाम के 8 मूल्य हैं। लेकिन केवल तीन अलग-अलग मूल्य जो गणित, आईटी और भौतिकी हैं।
- COUNT (*) छात्रों की तालिका में पंक्तियों की संख्या को गिनता है जो 10 छात्रों के लिए 10 पंक्तियाँ हैं।
GROUP_CONCAT () - GROUP_CONCAT (X) या GROUP_CONCAT (X, Y)
GROUP_CONCAT कुल फ़ंक्शन उन्हें अलग करने के लिए अल्पविराम के साथ एक मान में कई गुना मान बढ़ाता है। इसके निम्नलिखित विकल्प हैं:
- GROUP_CONCAT (X): यह एक्स के सभी मान को एक स्ट्रिंग में, कॉमा के साथ "," मानों के बीच विभाजक के रूप में उपयोग किया जाएगा। पूर्ण मानों को अनदेखा किया जाएगा।
- GROUP_CONCAT (X, Y): यह x के मानों को एक स्ट्रिंग में बदल देगा, जिसमें y का मान डिफ़ॉल्ट विभाजक के बजाय प्रत्येक मान के बीच विभाजक के रूप में उपयोग किया जाता है ','। पूर्ण मानों को भी नजरअंदाज कर दिया जाएगा।
- GROUP_CONCAT (DISTINCT X): यह एक्स के सभी विशिष्ट मानों को एक स्ट्रिंग में, कॉमा के साथ "," मानों के बीच विभाजक के रूप में उपयोग किया जाएगा। पूर्ण मानों को अनदेखा किया जाएगा।
GROUP_CONCAT (विभाग का नाम) उदाहरण
निम्नलिखित क्वेरी छात्रों से सभी विभाग के नाम के मानों को अलग कर देगी और विभागों की तालिका एक स्ट्रिंग अल्पविराम में अलग हो जाएगी। इसलिए मूल्यों की सूची वापस करने के बजाय, प्रत्येक पंक्ति पर एक मान। यह एक पंक्ति में केवल एक मान लौटाएगा, जिसमें सभी मान अलग हो जाएंगे:
चुनेंछात्रों के रूप में एसINNER JOIN विभागों के रूप में d। S पर s depboxId = d.DepartmentId;
यह आपको देगा:
यह आपको अलग-अलग एक स्ट्रिंग कॉमा में अलग-अलग 8 विभागों के नामों के मूल्यों की सूची देगा।
GROUP_CONCAT (DISTINCT DepartmentName) उदाहरण
निम्नलिखित क्वेरी छात्रों और विभागों के विभाग के नाम के अलग-अलग मानों को अलग-अलग एक स्ट्रिंग कॉमा में विभाजित करेगी:
ग्रुप का चयन करेंछात्रों के रूप में एसINNER JOIN विभागों के रूप में d। S पर s depboxId = d.DepartmentId;
यह आपको देगा:
ध्यान दें कि परिणाम पिछले परिणाम से अलग कैसे है; केवल तीन मान लौटे, जो अलग-अलग विभागों के नाम हैं, और डुप्लिकेट मान हटा दिए गए थे।
GROUP_CONCAT (विभाग का नाम, 'और') उदाहरण
निम्नलिखित प्रश्न छात्रों और विभागों के विभाग नाम स्तंभ के सभी मानों को एक स्ट्रिंग में बदल देगा, लेकिन एक विभाजक के रूप में अल्पविराम के बजाय 'और' वर्ण के साथ:
चुनेंछात्रों के रूप में एसINNER JOIN विभागों के रूप में d। S पर s depboxId = d.DepartmentId;
यह आपको देगा:
ध्यान दें कि कैसे "चरित्र" और डिफ़ॉल्ट चरित्र के बजाय "," का उपयोग मूल्यों के बीच अलग करने के लिए किया जाता है।
SQLite MAX () और MIN ()
MAX (X) आपको X मानों से उच्चतम मूल्य लौटाता है। यदि x के सभी मान शून्य हैं, तो MAX एक पूर्ण मान लौटाएगा। जबकि MIN (X) आपको X मान से सबसे छोटा मान लौटाता है। यदि X के सभी मान शून्य हैं, तो MIN एक पूर्ण मान लौटाएगा।
उदाहरण
निम्नलिखित प्रश्न में, हम " अंक " तालिका से उच्चतम अंक और सबसे कम अंक प्राप्त करने के लिए MIN और MAX फ़ंक्शन का उपयोग करेंगे :
सेलेक्ट मैक्स (मार्क), MIN (मार्क) मार्क्स से;
यह आपको देगा:
SQLite SUM (x), कुल (x)
वे दोनों सभी x मानों का योग लौटाएंगे। लेकिन वे निम्नलिखित में भिन्न हैं:
- यदि सभी मान शून्य हैं, तो SUM शून्य हो जाएगा, लेकिन कुल 0 वापस आएगा।
- कुल हमेशा अस्थायी बिंदु मान लौटाता है। SUM पूर्णांक मान देता है यदि सभी x मान पूर्णांक हैं। हालाँकि, यदि मान पूर्णांक नहीं हैं, तो यह एक अस्थायी बिंदु मान लौटाएगा।
उदाहरण
निम्नलिखित क्वेरी में हम " मार्क्स " टेबल में सभी अंकों का योग पाने के लिए SUM और कुल का उपयोग करेंगे :
सेलेक्ट SUM (मार्क), TOTAL (मार्क) मार्क्स से;
यह आपको देगा:
जैसा कि आप देख सकते हैं, TOTAL हमेशा एक अस्थायी बिंदु देता है। लेकिन एसयूएम एक पूर्णांक मान लौटाता है क्योंकि "मार्क" कॉलम के मान पूर्णांक में हो सकते हैं।
SUM और TOTAL उदाहरण के बीच अंतर:
निम्नलिखित क्वेरी में हम SUM और TOTAL के बीच का अंतर दिखाएंगे जब उन्हें NULL मानों का SUM मिलता है:
Select SUM (मार्क), TOTAL (मार्क) मार्क्स से जहां TestId = 4;
यह आपको देगा:
ध्यान दें कि TestId = 4 के लिए कोई निशान नहीं हैं, इसलिए उस परीक्षण के लिए शून्य मान हैं। SUM रिक्त के रूप में एक शून्य मान लौटाता है, जबकि TOTAL 0 देता है।
समूह द्वारा
ग्रुप बाय क्लॉज का उपयोग एक या एक से अधिक स्तंभों को निर्दिष्ट करने के लिए किया जाता है जिनका उपयोग पंक्तियों को समूहों में समूहित करने के लिए किया जाएगा। समान मान वाली पंक्तियों को समूहों में एक साथ इकट्ठा (व्यवस्थित) किया जाएगा।
किसी भी अन्य कॉलम के लिए जो कॉलम द्वारा समूह में शामिल नहीं है, आप इसके लिए एक कुल फ़ंक्शन का उपयोग कर सकते हैं।
उदाहरण:
निम्नलिखित प्रश्न आपको प्रत्येक विभाग में उपस्थित छात्रों की कुल संख्या देंगे।
छात्रों का चयन करेंछात्रों के रूप में एसINNER JOIN विभाग के रूप में d.DepartmentId = d.DepartmentId पर हैग्रुप द्वारा d। विभाग का नाम;
यह आपको देगा:
ग्रुपबीवाई विभागनाम खंड सभी छात्रों को प्रत्येक विभाग के नाम के लिए समूह एक में समूहित करेगा। "विभाग" के प्रत्येक समूह के लिए, यह उस पर छात्रों की गणना करेगा।
हवलदार खंड
यदि आप ग्रुप BY क्लॉज द्वारा लौटाए गए समूहों को फ़िल्टर करना चाहते हैं, तो आप ग्रुप BY के बाद अभिव्यक्ति के साथ "HAVING" क्लॉज को निर्दिष्ट कर सकते हैं। इन समूहों को फ़िल्टर करने के लिए अभिव्यक्ति का उपयोग किया जाएगा।
उदाहरण
निम्नलिखित प्रश्न में, हम उन विभागों का चयन करेंगे जिनके पास केवल दो छात्र हैं:
छात्रों का चयन करेंछात्रों के रूप में एसINNER JOIN विभाग के रूप में d.DepartmentId = d.DepartmentId पर हैग्रुप द्वारा d। विभाग का नामHAVING COUNT (s.StudentId) = 2;
यह आपको देगा:
खण्ड HAVING COUNT (S.StudentId) = 2 दिए गए समूहों को फ़िल्टर करेगा और केवल उन्हीं समूहों को लौटाएगा जिन पर ठीक दो छात्र हैं। हमारे मामले में, कला विभाग में 2 छात्र हैं, इसलिए इसे आउटपुट में प्रदर्शित किया जाता है।
SQLite क्वेरी और सबक्वेरी
किसी भी क्वेरी के अंदर, आप किसी अन्य क्वेरी का चयन किसी भी SELECT, INSERT, DELETE, UPDATE या किसी अन्य सबक्वेरी के अंदर कर सकते हैं।
इस नेस्टेड क्वेरी को एक सबक्वेरी कहा जाता है। अब हम चयन खंड में उपश्रेणियों के उपयोग के कुछ उदाहरण देखेंगे। हालाँकि, संशोधित डेटा ट्यूटोरियल में, हम देखेंगे कि हम INSERT, DELETE और UPDIT स्टेटमेंट के साथ उपश्रेणियों का उपयोग कैसे कर सकते हैं।
FROM क्लॉज उदाहरण में सबक्वेरी का उपयोग करना
निम्नलिखित प्रश्न में हम FROM क्लॉज के अंदर एक उपश्रेणी शामिल करेंगे:
चुनते हैंs.StudentName, t.Markछात्रों के रूप में एसआंतरिक रूप से जुड़ा()छात्र का चयन करें, मार्कसे टेस्ट के रूप में टीINNER JOIN मार्क्स के रूप में m पर t.TestId = m.TestId है) ऑन s.StudentId = t.StudentId;
पूछताछ:
छात्र का चयन करें, मार्कसे टेस्ट के रूप में टीINNER JOIN मार्क्स के रूप में m पर t.TestId = m.TestId है
उपरोक्त क्वेरी को यहां एक सबक्वेरी कहा जाता है क्योंकि इसे FROM क्लॉज़ के अंदर नेस्टेड किया जाता है। ध्यान दें कि हमने इसे एक उपनाम नाम "t" दिया ताकि हम क्वेरी में दिए गए स्तंभों का उल्लेख कर सकें।
यह प्रश्न आपको देगा:
तो हमारे मामले में,
- s.StudentName मुख्य क्वेरी से चुना जाता है जो छात्रों का नाम देता है और
- t.ark उपकुंजी से चुना गया है; इनमें से प्रत्येक छात्र द्वारा प्राप्त किए गए अंक
WHERE क्लॉज उदाहरण में सबक्वेरी का उपयोग करना
निम्नलिखित प्रश्न में हम WHERE क्लॉज में एक उपश्रेणी शामिल करेंगे:
विभाग का चयन करेंसे विभागों के रूप में dजहां नहीं है (चयन विभाग का चयन करेंछात्रों के रूप में एसजहां d.DepartmentId = s.DepboxId);
पूछताछ:
विभाग का चयन करेंछात्रों के रूप में एसजहां d.DepartmentId = s.DepboxId है
उपरोक्त क्वेरी को यहां एक सबक्वेरी कहा जाता है क्योंकि यह WHERE क्लॉज में नेस्टेड है। उपश्रेणी, विभागीय मान लौटाएगी जिसका उपयोग ऑपरेटर द्वारा नहीं किया जाएगा।
यह प्रश्न आपको देगा:
उपरोक्त क्वेरी में, हमने उस विभाग को चुना है जिसका कोई छात्र इसमें नामांकित नहीं है। यहाँ पर "मठ" विभाग कौन सा है।
सेट ऑपरेशंस - UNION, Intersect
SQLite निम्नलिखित SET संचालन का समर्थन करता है:
यूनिअन और यूनिअन ऑल
यह एक से अधिक परिणाम सेटों में से एक या अधिक परिणाम सेट (पंक्तियों का एक समूह) को एक परिणाम सेट में जोड़ता है।
UNION अलग मान लौटाएगा। हालांकि, UNION ALL में डुप्लिकेट शामिल नहीं होंगे।
ध्यान दें कि कॉलम नाम पहले सेलेक्ट स्टेटमेंट में निर्दिष्ट कॉलम नाम होगा।
यूनिअन उदाहरण
निम्नलिखित उदाहरण में, हम छात्रों की तालिका से विभाग की सूची और विभाग की सूची विभाग की तालिका से एक ही कॉलम में प्राप्त करेंगे:
छात्रों से विभाग का चयन करेंसंघविभाग से चयनित विभाग;
यह आपको देगा:
क्वेरी केवल 5 पंक्तियाँ लौटाती है जो कि विशिष्ट विभाग आईडी मान हैं। पहला मान जो शून्य मान है ध्यान दें।
SQLite यूनिअन सभी उदाहरण
निम्नलिखित उदाहरण में, हम छात्रों की तालिका से विभाग की सूची और विभाग की सूची विभाग की तालिका से एक ही कॉलम में प्राप्त करेंगे:
छात्रों से विभाग का चयन करेंयूनिअन ऑलविभाग से चयनित विभाग;
यह आपको देगा:
क्वेरी 14 पंक्तियों, छात्रों की तालिका से 10 पंक्तियों, और 4 विभागों की तालिका से वापस आ जाएगी। ध्यान दें कि, दिए गए मानों में डुप्लिकेट हैं। इसके अलावा, ध्यान दें कि कॉलम का नाम पहले चयन कथन में निर्दिष्ट किया गया था।
अब, देखते हैं कि यदि हम UNION को UNION से प्रतिस्थापित करते हैं, तो UNION सभी को अलग-अलग परिणाम देगा:
SQLite INTERSECT
उन मानों को वापस लौटाता है जो दोनों संयुक्त परिणामों में मौजूद हैं। संयुक्त परिणाम सेट में मौजूद मानों को अनदेखा किया जाएगा।
उदाहरण
निम्नलिखित प्रश्न में, हम उन विभागीय मानों का चयन करेंगे जो विभागीय कॉलम में छात्रों और विभागों दोनों तालिकाओं में मौजूद हैं:
छात्रों से विभाग का चयन करेंइंटरसेक्टविभाग से चयनित विभाग;
यह आपको देगा:
क्वेरी केवल तीन मान 1, 2 और 3 लौटाती है। वे मान जो दोनों तालिकाओं में मौजूद हैं।
हालाँकि, मान शून्य और 4 शामिल नहीं थे क्योंकि शून्य मान केवल छात्र तालिका में मौजूद है और विभाग तालिका में नहीं है। और मान 4 विभागों की तालिका में मौजूद है, छात्रों की तालिका में नहीं।
इसीलिए NULL और 4 दोनों मानों को अनदेखा किया गया और लौटाए गए मानों में शामिल नहीं किया गया।
के सिवाय
मान लीजिए कि यदि आपके पास दो पंक्तियों की सूची, सूची 1 और सूची 2 है, और आप केवल उन सूची 1 से पंक्तियों को चाहते हैं जो सूची 2 में मौजूद नहीं हैं, तो आप "EXCEPT" खंड का उपयोग कर सकते हैं। अपवाद खंड दो सूचियों की तुलना करता है और सूची 1 में मौजूद उन पंक्तियों को वापस करता है और सूची 2 में मौजूद नहीं है।
उदाहरण
निम्नलिखित प्रश्न में, हम विभाग तालिका में मौजूद विभागीय मानों का चयन करेंगे और छात्रों की तालिका में मौजूद नहीं हैं:
विभागों से चयनित विभागके सिवायछात्रों से विभाग का चयन करें;
यह आपको देगा:
क्वेरी केवल मान लौटाता है। 4. केवल वही मान है जो विभागों की तालिका में मौजूद है, और छात्रों की तालिका में मौजूद नहीं है।
पूरा संभालना
" NULL " मान SQLite में एक विशेष मूल्य है। इसका उपयोग उस मान का प्रतिनिधित्व करने के लिए किया जाता है जो अज्ञात या अनुपलब्ध मान है। ध्यान दें कि शून्य मान " 0 " या रिक्त "" मान से पूरी तरह भिन्न है । क्योंकि 0 और रिक्त मान ज्ञात मूल्य है, हालांकि, शून्य मान अज्ञात है।
NULL मान को SQLite में एक विशेष हैंडलिंग की आवश्यकता होती है, हम अब देखेंगे कि NULL मान कैसे संभाला जाए।
NULL मान खोजें
अशक्त मानों को खोजने के लिए आप सामान्य समानता ऑपरेटर (=) का उपयोग नहीं कर सकते। उदाहरण के लिए, निम्नलिखित प्रश्न उन विद्यार्थियों को खोजता है जिनके पास अशक्त विभागीय मान है:
छात्रों से * का चयन करें जहां विभाग = NULL;
यह प्रश्न कोई परिणाम नहीं देगा:
क्योंकि NULL मान किसी भी अन्य मूल्य के बराबर नहीं है, इसमें एक शून्य मान भी शामिल है, इसीलिए इसने कोई परिणाम नहीं दिया।
- हालाँकि, क्वेरी कार्य करने के लिए, आपको निम्न के रूप में अशक्त मानों को खोजने के लिए "IS NULL" ऑपरेटर का उपयोग करना होगा :
छात्रों से चयन करें * जहां से विभाग पूर्ण हो;
यह आपको देगा:
क्वेरी उन छात्रों को वापस कर देगी जिनके पास एक अशक्त विभागीय मान है।
- यदि आप उन मानों को प्राप्त करना चाहते हैं जो शून्य नहीं हैं, तो आपको " IS NOT NULL " ऑपरेटर का उपयोग इस तरह करना होगा:
छात्रों से चयन करें * जहां से विभाग पूर्ण न हो;
यह आपको देगा:
क्वेरी उन छात्रों को वापस कर देगी जिनके पास NULL DepartmentId मान नहीं है।
सशर्त परिणाम
यदि आपके पास मूल्यों की सूची है और आप कुछ शर्तों के आधार पर उनमें से किसी एक का चयन करना चाहते हैं। उसके लिए, उस विशेष मूल्य के लिए शर्त चयनित होने के लिए सही होनी चाहिए।
CASE अभिव्यक्ति सभी मानों के लिए शर्तों की इन सूची का मूल्यांकन करेगी। यदि स्थिति सही है, तो वह मान लौटा देगा।
उदाहरण के लिए, यदि आपके पास एक कॉलम "ग्रेड" है और आप निम्न के रूप में ग्रेड मूल्य के आधार पर एक पाठ मान का चयन करना चाहते हैं:
- "उत्कृष्ट" यदि ग्रेड 85 से अधिक है।
- "वेरी गुड" यदि ग्रेड 70 और 85 के बीच है।
- "अच्छा" यदि ग्रेड 60 और 70 के बीच है।
फिर आप ऐसा करने के लिए CASE अभिव्यक्ति का उपयोग कर सकते हैं।
इसका उपयोग सेलेक्ट क्लॉज में कुछ लॉजिक को परिभाषित करने के लिए किया जा सकता है ताकि आप उदाहरण के लिए स्टेटमेंट जैसे कुछ शर्तों के आधार पर कुछ परिणामों का चयन कर सकें।
CASE ऑपरेटर को विभिन्न सिंटैक्स के साथ निम्नानुसार परिभाषित किया जा सकता है:
- आप विभिन्न स्थितियों का उपयोग कर सकते हैं:
मामलाजब हालत 1 तब परिणाम 1जब हालत 2 तब परिणाम 2जब हालत 3 तब परिणाम 3 ... ईएलएसई परिणामसमाप्त
- या, आप केवल एक ही अभिव्यक्ति का उपयोग कर सकते हैं और विभिन्न संभावित मूल्यों को चुन सकते हैं:
मामला अभिव्यक्तिजब परिणाम 1 तब मान 1जब परिणाम 2 मान 2जब परिणाम 3 हो जाता है ... ईएलएसई पुनर्स्थापनासमाप्त
ध्यान दें कि ELSE क्लॉज वैकल्पिक है।
उदाहरण
निम्नलिखित उदाहरण में, हम पाठ तालिका 'नो डिपार्टमेंट' को प्रदर्शित करने के लिए छात्र तालिका में विभाग आईडी कॉलम में NULL मान के साथ CASE अभिव्यक्ति का उपयोग करेंगे:
चुनते हैंछात्र का नाम,मामलाजब कोई विभाग नहीं हैELSE DepartmentIdEND ASI विभागछात्रों से;
- CASE ऑपरेटर विभाग के मान की जांच करेगा कि वह शून्य है या नहीं।
- यदि यह एक NULL मान है, तो यह विभागीय मान के बजाय शाब्दिक मान 'No Department' का चयन करेगा।
- यदि एक शून्य मान नहीं है, तो वह विभागीय कॉलम के मूल्य का चयन करेगा।
यह आपको नीचे दिखाए अनुसार आउटपुट देगा:
सामान्य तालिका अभिव्यक्ति
सामान्य तालिका अभिव्यक्तियाँ (CTE) उपश्रेणियाँ हैं जो किसी दिए गए नाम के साथ SQL कथन के अंदर परिभाषित होती हैं।
यह सबक्वेरीज़ पर एक फायदा है क्योंकि इसे SQL स्टेटमेंट से परिभाषित किया गया है और इससे प्रश्नों को पढ़ने, रखरखाव और समझने में आसानी होगी।
एक सामान्य सारणी अभिव्यक्ति को निम्न कथनों के साथ क्लॉज के साथ नीचे रखकर निम्न के रूप में परिभाषित किया जा सकता है:
CTEname के साथजैसा()चयन कथन)CTE से यहां अपडेट, अपडेट, इंसर्ट या स्टेटमेंट अपडेट करें
" CTEname " कोई भी नाम है जिसे आप CTE के लिए दे सकते हैं, आप इसे बाद में संदर्भित करने के लिए उपयोग कर सकते हैं। ध्यान दें, आप CTE पर SELECT, UPDATE, INSERT, या DELETE स्टेटमेंट को परिभाषित कर सकते हैं
अब, आइए देखें कि सेलेक्ट क्लॉज में सीटीई का उपयोग कैसे करें।
उदाहरण
निम्नलिखित उदाहरण में, हम एक CTE को एक SELECT स्टेटमेंट से परिभाषित करेंगे, और फिर हम इसे बाद में किसी अन्य क्वेरी पर उपयोग करेंगे:
AllDepartments के साथजैसा()विभाग का चयन करें, विभागनामविभागों से)चुनते हैंs.StudentId,s.SudentName,.डेपबॉक्सनामछात्रों के रूप में एसINNER JOIN AllDepartments को ON s.DepboxId =.D.DepartmentId के रूप में शामिल करें;
इस क्वेरी में, हमने CTE को परिभाषित किया और इसे " AllDepartments " नाम दिया । इस CTE को एक SELECT क्वेरी से परिभाषित किया गया था:
विभाग का चयन करें, विभागनामविभागों से
फिर CTE को परिभाषित करने के बाद हमने इसका चयन SELECT क्वेरी में किया जो इसके बाद आती है।
ध्यान दें कि, सामान्य तालिका अभिव्यक्तियाँ क्वेरी के आउटपुट को प्रभावित नहीं करती हैं। यह एक तार्किक दृश्य या उपश्रेणी को परिभाषित करने का एक तरीका है ताकि उन्हें उसी क्वेरी में पुनः उपयोग किया जा सके। सामान्य तालिका अभिव्यक्तियाँ एक चर की तरह होती हैं जिसे आप घोषित करते हैं, और इसे एक उपश्रेणी के रूप में पुन: उपयोग करते हैं। केवल चयन कथन क्वेरी के आउटपुट को प्रभावित करता है।
यह प्रश्न आपको देगा:
उन्नत प्रश्न
उन्नत प्रश्न वे प्रश्न होते हैं जिनमें जटिल जुड़ाव, उपश्रेणियाँ और कुछ समुच्चय शामिल होते हैं। निम्नलिखित अनुभाग में हम एक उन्नत क्वेरी का एक उदाहरण देखेंगे:
जहां हम,
- प्रत्येक विभाग के लिए सभी छात्रों के साथ विभाग के नाम
- छात्रों का नाम अल्पविराम के साथ अलग हो गया
- विभाग दिखा रहा है कि इसमें कम से कम तीन छात्र हैं
चुनते हैंडी। डंपनाम,COUNT (s.StudentId) छात्रGROUP_CONCAT (छात्रनाम) के रूप में छात्रसे विभागों के रूप में dINNER JOIN छात्रों ने s.DepboxId = d.DepboxId पर लिखा हैग्रुप बाय d.DepartmentNameHAVING COUNT (s.StudentId)> = 3;
हमने विभाग तालिका से विभागनाम प्राप्त करने के लिए एक JOIN खंड जोड़ा। उसके बाद हमने दो समग्र कार्यों के साथ एक ग्रुप BY क्लॉज जोड़ा:
- प्रत्येक विभाग समूह के छात्रों की गणना करने के लिए "COUNT"।
- एक समूह में प्रत्येक समूह के लिए छात्रों को एक स्ट्रिंग में अलग करने के लिए GROUP_CONCAT।
- GROUP BY के बाद, हमने विभागों को फ़िल्टर करने के लिए HAVING क्लॉज़ का उपयोग किया और केवल उन विभागों का चयन किया जिनमें कम से कम 3 छात्र हैं।
परिणाम निम्नानुसार होगा:
सारांश:
यह SQLite क्वेरी और डेटाबेस को क्वेरी करने की मूल बातें लिखने के लिए एक परिचय था और आप लौटे डेटा को कैसे फ़िल्टर कर सकते हैं। अब आप अपनी खुद की SQLite क्वेरी लिख सकते हैं।