SQLite क्वेरी: चयन करें, कहां, सीमा, ऑफसेट, गणना, समूह द्वारा

⚡ स्मार्ट सारांश

SQLite क्वेरी SELECT, FROM, WHERE, GROUP BY, ORDER BY और LIMIT क्लॉज़ का उपयोग करके डेटा को पुनर्प्राप्त और फ़िल्टर करती हैं। इन क्लॉज़ को ऑपरेटर, एग्रीगेट, सबक्वेरी और सेट ऑपरेशन के साथ संयोजित करके आप किसी भी डेटाबेस से रिकॉर्ड को पढ़ सकते हैं, उसे आकार दे सकते हैं और उसका सारांश बना सकते हैं। SQLite डेटाबेस।

  • 🔍 SELECT और FROM: SELECT क्लॉज़ कॉलम, लिटरल या एलियास का चयन करता है; FROM क्लॉज़ डेटा प्रदान करने वाली तालिकाओं या सबक्वेरी के नाम बताता है।
  • 🧮 और कहां Operaटोर्स: WHERE क्लॉज़, concatenation, CAST, arithmetic, comparison, LIKE, GLOB, BETWEEN, IN और EXISTS ऑपरेटरों के साथ पंक्तियों को फ़िल्टर करता है।
  • 📊 समूह और समूहping: AVGCOUNT, GROUP_CONCAT, MAX, MIN, SUM और TOTAL को GROUP BY और HAVING के साथ मिलाकर समूहीकृत पंक्तियों का सारांश तैयार किया जाता है।
  • 🔗 सबक्वेरी और सेट: सबक्वेरी, कॉमन टेबल एक्सप्रेशन और UNION, INTERSECT और EXCEPT कई SELECT स्टेटमेंट के परिणामों को संयोजित करते हैं।
  • 🧩 क्रमबद्धता और NULL मान: ORDER BY, LIMIT, OFFSET, DISTINCT, CASE और IS NULL पंक्तियों के क्रम, आउटपुट आकार और लुप्त मानों को नियंत्रित करते हैं।
  • 🤖 एआई सहायता: एआई टेक्स्ट-टू-एसक्यूएल सहायक और गिटहब कोपायलट उत्पन्न करते हैं SQLite सरल अंग्रेजी में दिए गए प्रश्नों से SELECT, JOIN और GROUP BY क्वेरीज़ का उपयोग करें।

SQLite प्रश्न

नीचे दिए गए अनुभागों में SELECT और FROM का उपयोग करके डेटा पढ़ना, WHERE और इसके ऑपरेटरों का उपयोग करके पंक्तियों को फ़िल्टर करना, परिणामों को क्रमबद्ध और सीमित करना, एग्रीगेट फ़ंक्शन, GROUP BY और HAVING, सबक्वेरी, सेट ऑपरेशन, NULL हैंडलिंग, CASE एक्सप्रेशन और कॉमन टेबल एक्सप्रेशन के बारे में विस्तार से बताया गया है।

लिखना एसक्यूएल प्रश्नों एक में SQLite डेटाबेस में, आपको यह जानना होगा कि SELECT, FROM, WHERE, GROUP BY, ORDER BY, और LIMIT क्लॉज कैसे काम करते हैं और उनका उपयोग कैसे किया जाता है।

इस ट्यूटोरियल के दौरान, आप सीखेंगे कि इन क्लॉज़ का उपयोग कैसे करें और कैसे लिखें SQLite खंड।

चयन के साथ डेटा पढ़ना

SELECT क्लॉज़ वह मुख्य कथन है जिसका उपयोग आप किसी क्वेरी के लिए करते हैं SQLite डेटाबेस। SELECT क्लॉज में, आप बताते हैं कि क्या चुनना है। लेकिन सेलेक्ट क्लॉज से पहले, आइए देखें कि हम FROM क्लॉज का उपयोग करके कहां से डेटा चुन सकते हैं।

FROM क्लॉज का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि आप डेटा का चयन कहां करना चाहते हैं। फ्रॉम क्लॉज में, आप डेटा का चयन करने के लिए एक या अधिक टेबल या सबक्वेरी निर्दिष्ट कर सकते हैं, जैसा कि हम बाद में ट्यूटोरियल में देखेंगे।

ध्यान दें कि, निम्नलिखित सभी उदाहरणों के लिए, आपको sqlite3.exe चलाना होगा और नमूना डेटाबेस से कनेक्शन खोलना होगा:

चरण 1) इस चरण में,

माय कंप्यूटर खोलें और निम्नलिखित डायरेक्टरी पर जाएं: “C:\sqlite” और फिर “sqlite3.exe” खोलें:

Select का उपयोग करके डेटा पढ़ना SQLite

चरण 2) निम्न कमांड का उपयोग करके "TutorialsSampleDB.db" डेटाबेस खोलें:

Select का उपयोग करके डेटा पढ़ना SQLite

अब आप डेटाबेस पर किसी भी प्रकार की क्वेरी चलाने के लिए तैयार हैं।

SELECT क्लॉज़ में, आप न केवल कॉलम नाम चुन सकते हैं, बल्कि आपके पास यह निर्दिष्ट करने के लिए कई अन्य विकल्प भी हैं कि क्या चुनना है। जैसा कि निम्नलिखित है:

चुनते हैं *

यह कमांड FROM क्लॉज में सभी संदर्भित तालिकाओं (या सबक्वेरीज़) से सभी कॉलम का चयन करेगा। उदाहरण के लिए:

SELECT *
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

यह दोनों तालिकाओं students और department से सभी कॉलमों का चयन करेगा:

Select का उपयोग करके डेटा पढ़ना SQLite

तालिकानाम का चयन करें.*

यह केवल टेबल “tablename” से सभी कॉलम का चयन करेगा। उदाहरण के लिए:

SELECT Students.*
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

यह केवल students तालिका से सभी कॉलम का चयन करेगा:

Select का उपयोग करके डेटा पढ़ना SQLite

शाब्दिक मूल्य

शाब्दिक मान एक स्थिर मान है जिसे चयन कथन में निर्दिष्ट किया जा सकता है। आप शाब्दिक मानों का उपयोग सामान्य रूप से उसी तरह कर सकते हैं जिस तरह आप SELECT क्लॉज़ में कॉलम नामों का उपयोग करते हैं। ये शाब्दिक मान SQL क्वेरी द्वारा लौटाई गई पंक्तियों से प्रत्येक पंक्ति के लिए प्रदर्शित किए जाएँगे।

यहां विभिन्न शाब्दिक मानों के कुछ उदाहरण दिए गए हैं जिन्हें आप चुन सकते हैं:

  • संख्यात्मक शाब्दिक - किसी भी प्रारूप में संख्याएँ जैसे 1, 2.55, ... आदि।
  • स्ट्रिंग लिटरल - कोई भी स्ट्रिंग 'USA', 'यह एक नमूना पाठ है', ... आदि।
  • शून्य - शून्य मान.
  • Current_TIME – यह आपको वर्तमान समय बताएगा।
  • CURRENT_DATE – यह आपको वर्तमान दिनांक देगा.

यह कुछ स्थितियों में उपयोगी हो सकता है जहाँ आपको सभी लौटाई गई पंक्तियों के लिए एक स्थिर मान चुनना होता है। उदाहरण के लिए, यदि आप Students तालिका से सभी छात्रों का चयन करना चाहते हैं, जिसमें एक नया कॉलम है जिसे country कहा जाता है जिसमें “USA” मान होता है, तो आप यह कर सकते हैं:

SELECT *, 'USA' AS Country FROM Students;

इससे आपको सभी छात्रों के कॉलम मिलेंगे, साथ ही एक नया कॉलम “देश” भी मिलेगा:

Select का उपयोग करके डेटा पढ़ना SQLite

ध्यान दें कि, यह नया कॉलम देश वास्तव में टेबल में जोड़ा गया नया कॉलम नहीं है। यह एक वर्चुअल कॉलम है, जिसे परिणाम प्रदर्शित करने के लिए क्वेरी में बनाया गया है और इसे टेबल पर नहीं बनाया जाएगा।

नाम और उपनाम

उपनाम कॉलम के लिए एक नया नाम है जो आपको नए नाम के साथ कॉलम चुनने देता है। कॉलम उपनामों को “AS” कीवर्ड का उपयोग करके निर्दिष्ट किया जाता है।

उदाहरण के लिए, यदि आप चाहते हैं कि StudentName कॉलम को “StudentName” के बजाय “StudentName” के रूप में लौटाया जाए, तो आप इसे इस तरह एक उपनाम दे सकते हैं:

SELECT StudentName AS 'Student Name' FROM Students;

इससे आपको छात्रों के नाम “StudentName” के बजाय “StudentName” के रूप में मिलेंगे, जैसे:

SQLite नाम और उपनाम

ध्यान दें कि कॉलम का नाम अभी भी "StudentName" ही है; StudentName कॉलम का नाम अभी भी वही है, उपनाम से इसमें कोई बदलाव नहीं होता है।

उपनाम स्तंभ नाम को नहीं बदलेगा; यह केवल SELECT खंड में प्रदर्शन नाम को बदल देगा।

इसके अलावा, ध्यान रखें कि, कीवर्ड “AS” वैकल्पिक है, आप इसके बिना भी उपनाम नाम डाल सकते हैं, कुछ इस तरह:

SELECT StudentName 'Student Name' FROM Students;

और यह आपको पिछली क्वेरी के समान ही आउटपुट देगा:

SQLite नाम और उपनाम

आप सिर्फ़ कॉलम ही नहीं, बल्कि टेबल को भी उपनाम दे सकते हैं। उसी कीवर्ड “AS” के साथ। उदाहरण के लिए, आप यह कर सकते हैं:

SELECT s.* FROM Students AS s;

इससे आपको तालिका में सभी कॉलम मिल जाएंगे छात्र:

SQLite नाम और उपनाम

यह बहुत उपयोगी हो सकता है यदि आप एक से अधिक टेबल को जोड़ रहे हैं; क्वेरी में पूरा टेबल नाम दोहराने के बजाय, आप प्रत्येक टेबल को एक छोटा उपनाम नाम दे सकते हैं। उदाहरण के लिए, निम्न क्वेरी में:

SELECT Students.StudentName, Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

यह क्वेरी “छात्र” तालिका से प्रत्येक छात्र का नाम और “विभाग” तालिका से उसके विभाग का नाम चुनेगी:

SQLite नाम और उपनाम

हालाँकि, उसी क्वेरी को इस तरह लिखा जा सकता है:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

हमने स्टूडेंट्स टेबल को “s” और डिपार्टमेंट्स टेबल को “d” उपनाम दिया। फिर, टेबल के पूरे नाम का उपयोग करने के बजाय, हमने उन्हें संदर्भित करने के लिए उनके उपनामों का उपयोग किया। INNER JOIN एक शर्त का उपयोग करके दो या दो से अधिक तालिकाओं को आपस में जोड़ता है। हमारे उदाहरण में, हमने स्टूडेंट्स टेबल को डिपार्टमेंट्स टेबल से DepartmentId कॉलम के साथ जोड़ा है। INNER JOIN की विस्तृत व्याख्या “SQLite जुड़ती”ट्यूटोरियल।

इससे आपको पिछली क्वेरी जैसा ही सटीक आउटपुट मिलेगा:

SQLite नाम और उपनाम

कहां

जैसा कि हमने पिछले अनुभाग में देखा था, FROM क्लॉज के साथ SELECT क्लॉज का उपयोग करके SQL क्वेरी लिखने से आपको टेबल की सभी पंक्तियाँ मिल जाएँगी। हालाँकि, यदि आप लौटाए गए डेटा को फ़िल्टर करना चाहते हैं, तो आपको “WHERE” क्लॉज जोड़ना होगा।

WHERE क्लॉज़ का उपयोग SQL क्वेरी द्वारा लौटाए गए परिणाम सेट को फ़िल्टर करने के लिए किया जाता है। WHERE क्लॉज़ इस प्रकार काम करता है:

  • WHERE क्लॉज़ में, आप एक “एक्सप्रेशन” निर्दिष्ट कर सकते हैं।
  • उस अभिव्यक्ति का मूल्यांकन FROM खंड में निर्दिष्ट तालिका(ओं) से लौटी प्रत्येक पंक्ति के लिए किया जाएगा।
  • अभिव्यक्ति का मूल्यांकन बूलियन अभिव्यक्ति के रूप में किया जाएगा, जिसका परिणाम सत्य, असत्य या शून्य होगा।
  • फिर केवल वे पंक्तियाँ लौटाई जाएंगी जिनके लिए अभिव्यक्ति का मूल्यांकन सत्य मान के साथ किया गया था, तथा गलत या शून्य परिणाम वाली पंक्तियों को अनदेखा कर दिया जाएगा तथा परिणाम सेट में शामिल नहीं किया जाएगा।

WHERE क्लॉज़ का उपयोग करके परिणाम सेट को फ़िल्टर करने के लिए, आपको अभिव्यक्तियों और ऑपरेटरों का उपयोग करना होगा।

ऑपरेटरों की सूची SQLite और उनका उपयोग कैसे करें

अगले अनुभाग में, हम बताएंगे कि आप अभिव्यक्ति और ऑपरेटरों का उपयोग करके कैसे फ़िल्टर कर सकते हैं।

अभिव्यक्ति एक या एक से अधिक शाब्दिक मान या कॉलम हैं जो एक ऑपरेटर के साथ एक दूसरे के साथ संयुक्त होते हैं।

ध्यान दें कि, आप SELECT खंड और WHERE खंड दोनों में अभिव्यक्तियों का उपयोग कर सकते हैं।

निम्नलिखित उदाहरणों में, हम select Clause और WHERE Clause दोनों में अभिव्यक्तियों और ऑपरेटरों को आज़माएँगे। ताकि आपको दिखाया जा सके कि वे कैसे काम करते हैं।

विभिन्न प्रकार के अभिव्यक्तियाँ और ऑपरेटर हैं जिन्हें आप निम्नानुसार निर्दिष्ट कर सकते हैं:

SQLite संयोजन ऑपरेटर “||”

इस ऑपरेटर का उपयोग एक या अधिक शाब्दिक मानों या स्तंभों को एक दूसरे के साथ संयोजित करने के लिए किया जाता है। यह सभी संयोजित शाब्दिक मानों या स्तंभों से परिणामों की एक स्ट्रिंग तैयार करेगा। उदाहरण के लिए:

SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName
FROM Students;

इससे एक नया उपनाम "StudentIdWithName" बनेगा:

  • शाब्दिक स्ट्रिंग मान “नाम के साथ आईडी: “
  • “StudentId” कॉलम के मान के साथ और
  • “StudentName” कॉलम के मान के साथ

SQLite WHERE खंड और ऑपरेटर

SQLite CAST ऑपरेटर:

CAST ऑपरेटर का उपयोग किसी मान को परिवर्तित करने के लिए किया जाता है। डाटा प्रकार किसी अन्य डेटा प्रकार में।

उदाहरण के लिए, यदि आपके पास "12.5" जैसी स्ट्रिंग वैल्यू के रूप में संग्रहीत कोई संख्यात्मक मान है और आप इसे वास्तविक संख्यात्मक मान में बदलना चाहते हैं, तो आप CAST ऑपरेटर का उपयोग करके ऐसा कर सकते हैं: "CAST('12.5' ​​AS REAL)"। या यदि आपके पास 12.5 जैसा दशमलव मान है और आपको केवल पूर्णांक भाग प्राप्त करना है, तो आप इसे पूर्णांक में इस प्रकार बदल सकते हैं: "CAST(12.5 AS INTEGER)"।

उदाहरण

निम्नलिखित कमांड में हम विभिन्न मानों को अन्य डेटा प्रकारों में परिवर्तित करने का प्रयास करेंगे:

SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;

इससे आपको मिलेगा:

SQLite WHERE खंड और ऑपरेटर

परिणाम निम्नलिखित है:

  • CAST('12.5' ​​AS REAL) - मान '12.5' ​​एक स्ट्रिंग मान है, इसे REAL मान में परिवर्तित किया जाएगा।
  • CAST(12.5 AS INTEGER) – मान 12.5 एक दशमलव मान है, इसे पूर्णांक मान में परिवर्तित किया जाएगा। दशमलव भाग को छोटा कर दिया जाएगा, और यह 12 हो जाएगा।

SQLite अंकगणित Operaटोर्स:

दो या अधिक संख्यात्मक शाब्दिक मान या संख्यात्मक कॉलम लें और एक संख्यात्मक मान लौटाएँ। इसमें समर्थित अंकगणितीय ऑपरेटर SQLite यह है:

  • जोड़ “+” – दो ऑपरेंड का योग देता है।
  • उपtraction “–” – उपtracयह दो ऑपरेंड को जोड़ता है और अंतर उत्पन्न करता है।
  • गुणन “*” – दो ऑपरेंड का गुणनफल।
  • शेषफल (मॉड्यूलो) “%” – एक ऑपरेंड को दूसरे ऑपरेंड से विभाजित करने पर प्राप्त शेषफल बताता है।
  • भागफल “/” – बाएँ ऑपरेंड को दाएँ ऑपरेंड से भाग देने पर प्राप्त भागफल लौटाता है।

उदाहरण:

निम्नलिखित उदाहरण में, हम एक ही सेलेक्ट क्लॉज़ में शाब्दिक संख्यात्मक मानों के साथ पांच अंकगणितीय ऑपरेटरों को आज़माएंगे:

SELECT 25+6, 25-6, 25*6, 25%6, 25/6;

इससे आपको मिलेगा:

SQLite WHERE खंड और ऑपरेटर

ध्यान दें कि हमने यहाँ FROM क्लॉज़ के बिना SELECT कथन का उपयोग कैसे किया। और इसकी अनुमति है SQLite जब तक हम शाब्दिक मूल्यों का चयन करते हैं।

SQLite तुलना ऑपरेटरों

दो ऑपरेंडों की एक दूसरे से तुलना करें और निम्नानुसार सत्य या असत्य लौटाएं:

  • “<” – यदि बायां ऑपरेंड दाएं ऑपरेंड से छोटा है तो true लौटाता है।
  • “<=” – यदि बायां ऑपरेंड दाएं ऑपरेंड से छोटा या बराबर है तो true लौटाता है।
  • “>” – यदि बायां ऑपरेंड दाएं ऑपरेंड से बड़ा है तो true लौटाता है।
  • “>=” – यदि बायां ऑपरेंड दाएं ऑपरेंड से बड़ा या बराबर है तो true लौटाता है।
  • “=” और “==” – दोनों ऑपरेंड बराबर होने पर true लौटाते हैं। ध्यान दें कि दोनों ऑपरेटर एक ही हैं, उनमें कोई अंतर नहीं है।
  • “!=” और “<>” – दोनों ऑपरेंड बराबर न होने पर true लौटाते हैं। ध्यान दें कि दोनों ऑपरेटर एक ही हैं, उनमें कोई अंतर नहीं है।

ध्यान दें कि, SQLite सत्य मान को 1 तथा असत्य मान को 0 से व्यक्त करता है।

उदाहरण:

SELECT
  10<6 AS '<', 10<=6 AS '<=',
  10>6 AS '>', 10>=6 AS '>=',
  10=6 AS '=', 10==6 AS '==',
  10!=6 AS '!=', 10<>6 AS '<>';

इससे कुछ इस तरह का परिणाम मिलेगा:

SQLite WHERE खंड और ऑपरेटर

SQLite पैटर्न मिलान ऑपरेटर

“LIKE” का उपयोग पैटर्न मिलान के लिए किया जाता है। “Like” का उपयोग करके, आप वाइल्डकार्ड द्वारा निर्दिष्ट पैटर्न से मेल खाने वाले मानों को खोज सकते हैं।

बाईं ओर का ऑपरेंड या तो स्ट्रिंग लिटरल मान या स्ट्रिंग कॉलम हो सकता है। पैटर्न को निम्न प्रकार से निर्दिष्ट किया जा सकता है:

  • इसमें एक पैटर्न शामिल है। उदाहरण के लिए, StudentName LIKE '%a%' – यह उन छात्रों के नामों को खोजेगा जिनमें StudentName कॉलम में किसी भी स्थान पर अक्षर "a" मौजूद हो।
  • यह एक पैटर्न से शुरू होता है। उदाहरण के लिए, "StudentName LIKE 'a%'" - उन छात्रों के नामों को खोजें जो अक्षर "a" से शुरू होते हैं।
  • यह एक पैटर्न के साथ समाप्त होता है। उदाहरण के लिए, "StudentName LIKE '%a'" - उन छात्रों के नामों को खोजें जिनके नाम "a" अक्षर से समाप्त होते हैं।
  • स्ट्रिंग में किसी भी एक अक्षर का मिलान करने के लिए अंडरस्कोर अक्षर “_” का उपयोग करें। उदाहरण के लिए, “StudentName LIKE 'J___'” – चार अक्षरों वाले छात्रों के नाम खोजें। नाम की शुरुआत “J” अक्षर से होनी चाहिए और इसके बाद कोई भी तीन अक्षर हो सकते हैं।

पैटर्न मिलान के उदाहरण:

'j' अक्षर से शुरू होने वाले छात्रों के नाम प्राप्त करें:

SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

रिजल्ट:

SQLite WHERE खंड और ऑपरेटर

'y' अक्षर से समाप्त होने वाले छात्रों के नाम प्राप्त करें:

SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

रिजल्ट:

SQLite WHERE खंड और ऑपरेटर

'n' अक्षर वाले छात्रों के नाम प्राप्त करें:

SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

रिजल्ट:

SQLite WHERE खंड और ऑपरेटर

“GLOB” – LIKE ऑपरेटर के समतुल्य है, लेकिन LIKE ऑपरेटर के विपरीत GLOB केस सेंसिटिव है। उदाहरण के लिए, निम्नलिखित दो कमांड अलग-अलग परिणाम देंगे:

SELECT 'Jack' GLOB 'j%';
SELECT 'Jack' LIKE 'j%';

इससे आपको मिलेगा:

SQLite WHERE खंड और ऑपरेटर

पहला कथन 0 (गलत) लौटाता है क्योंकि GLOB ऑपरेटर केस सेंसिटिव है, इसलिए 'j' 'J' के बराबर नहीं है। हालाँकि, दूसरा कथन 1 (सत्य) लौटाएगा क्योंकि LIKE ऑपरेटर केस सेंसिटिव नहीं है, इसलिए 'j' 'J' के बराबर है।

अन्य ऑपरेटर:

SQLite और

एक तार्किक ऑपरेटर जो एक या अधिक अभिव्यक्तियों को जोड़ता है। यह तभी सत्य लौटाएगा, जब सभी अभिव्यक्तियाँ “सत्य” मान देंगी। हालाँकि, यह तभी असत्य लौटाएगा, जब सभी अभिव्यक्तियाँ “असत्य” मान देंगी।

उदाहरण:

निम्नलिखित क्वेरी उन छात्रों की खोज करेगी जिनकी StudentId > 5 है और StudentName अक्षर N से शुरू होता है, लौटाए गए छात्रों को दो शर्तों को पूरा करना होगा:

SELECT *
FROM Students
WHERE (StudentId > 5) AND (StudentName LIKE 'N%');

आउटपुट के तौर पर, ऊपर दिए गए स्क्रीनशॉट में, यह आपको सिर्फ़ “नैन्सी” देगा। नैन्सी एकमात्र छात्रा है जो दोनों शर्तों को पूरा करती है।

SQLite WHERE खंड और ऑपरेटर

SQLite OR

एक तार्किक ऑपरेटर जो एक या अधिक अभिव्यक्तियों को जोड़ता है, ताकि यदि संयुक्त ऑपरेटरों में से एक सत्य देता है, तो यह सत्य लौटाएगा। हालाँकि, यदि सभी अभिव्यक्तियाँ असत्य देती हैं, तो यह असत्य लौटाएगा।

उदाहरण:

निम्नलिखित क्वेरी उन छात्रों की खोज करेगी जिनकी StudentId > 5 है या StudentName अक्षर N से शुरू होता है, लौटाए गए छात्रों को कम से कम एक शर्त पूरी करनी होगी:

SELECT *
FROM Students
WHERE (StudentId > 5) OR (StudentName LIKE 'N%');

इससे आपको मिलेगा:

SQLite WHERE खंड और ऑपरेटर

आउटपुट के रूप में, उपरोक्त स्क्रीनशॉट में, यह आपको एक छात्र का नाम देगा जिसके नाम में अक्षर “n” होगा और छात्र आईडी का मान 5 से अधिक होगा।

जैसा कि आप देख सकते हैं, परिणाम AND ऑपरेटर वाली क्वेरी से भिन्न है।

SQLite बीच

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 मान वाले छात्रों को प्राप्त करने के लिए एक क्वेरी लिखेंगे:

SELECT *
FROM Students
WHERE StudentId BETWEEN 5 AND 8;

इससे केवल आईडी 5, 6, 7 और 8 वाले विद्यार्थियों को ही जानकारी मिलेगी:

SQLite WHERE खंड और ऑपरेटर

SQLite IN

एक ऑपरेंड और ऑपरेंड की एक सूची लेता है। यदि पहला ऑपरेंड मान सूची में से किसी एक ऑपरेंड के मान के बराबर है, तो यह सत्य लौटाएगा। यदि ऑपरेंड की सूची में उसके मानों के भीतर पहला ऑपरेंड मान शामिल है, तो IN ऑपरेटर सत्य (1) लौटाता है। अन्यथा, यह गलत (0) लौटाएगा।

इस प्रकार: “col IN(x, y, z)“। यह ” (col=x) या (col=y) या (col=z) ” के समतुल्य है।

उदाहरण:

निम्नलिखित क्वेरी केवल आईडी 2, 4, 6, 8 वाले छात्रों का चयन करेगी:

SELECT *
FROM Students
WHERE StudentId IN(2, 4, 6, 8);

इस कदर:

SQLite WHERE खंड और ऑपरेटर

पिछली क्वेरी निम्नलिखित क्वेरी के समान ही परिणाम देगी क्योंकि वे समतुल्य हैं:

SELECT *
FROM Students
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 WHERE खंड और ऑपरेटर

SQLite अंदर नही

“NOT IN” ऑपरेंड, IN ऑपरेटर का विपरीत होता है। लेकिन इसका सिंटैक्स समान होता है; यह एक ऑपरेंड और ऑपरेंड की एक सूची लेता है। यदि पहले ऑपरेंड का मान सूची में मौजूद किसी भी ऑपरेंड के मान के बराबर नहीं है, तो यह true (0) लौटाएगा। उदाहरण के लिए: “col NOT IN(x, y, z)”। यह “(col<>x) AND (col<>y) AND (col<>z)” के समतुल्य है।

उदाहरण:

निम्नलिखित क्वेरी उन विद्यार्थियों का चयन करेगी जिनकी आईडी इन आईडी 2, 4, 6, 8 में से किसी एक के बराबर नहीं है:

SELECT *
FROM Students
WHERE StudentId NOT IN(2, 4, 6, 8);

इस तरह

SQLite WHERE खंड और ऑपरेटर

पिछली क्वेरी का परिणाम हम निम्नलिखित क्वेरी के समान ही देते हैं क्योंकि वे समतुल्य हैं:

SELECT *
FROM Students
WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);

इस कदर:

SQLite WHERE खंड और ऑपरेटर

उपरोक्त स्क्रीनशॉट में,

हमने छात्रों की एक सूची प्राप्त करने के लिए कई बराबर नहीं ऑपरेटरों “<>” का उपयोग किया, जो निम्नलिखित आईडी 2, 4, 6, और 8 में से किसी के बराबर नहीं हैं। यह क्वेरी आईडी की इन सूचियों के अलावा अन्य सभी छात्रों को वापस कर देगी।

SQLite मौजूद है

EXISTS ऑपरेटर कोई ऑपरेंड नहीं लेता; यह उसके बाद केवल SELECT क्लॉज़ लेता है। यदि SELECT क्लॉज़ से कोई भी पंक्ति वापस आती है, तो EXISTS ऑपरेटर true (1) लौटाएगा, और यदि SELECT क्लॉज़ से कोई भी पंक्ति वापस नहीं आती है, तो यह false (0) लौटाएगा।

उदाहरण:

निम्नलिखित उदाहरण में, यदि विभाग आईडी students तालिका में मौजूद है, तो हम विभाग का नाम चुनेंगे:

SELECT DepartmentName
FROM Departments AS d
WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);

इससे आपको मिलेगा:

SQLite WHERE खंड और ऑपरेटर

केवल तीन विभाग “आईटी, भौतिकी और कला” ही दिखाए जाएंगे। “गणित” विभाग नहीं दिखाया जाएगा क्योंकि उस विभाग में कोई छात्र नहीं है, इसलिए छात्रों की तालिका में विभाग आईडी मौजूद नहीं है। यही कारण है कि EXISTS ऑपरेटर ने “गणित” विभाग को अनदेखा कर दिया।

SQLite नहीं

Reverseयह इसके बाद आने वाले पूर्ववर्ती ऑपरेटर का परिणाम है। उदाहरण के लिए:

  • NOT BETWEEN - यदि BETWEEN गलत लौटाता है तो यह सत्य लौटाएगा और इसके विपरीत।
  • NOT LIKE - यदि LIKE गलत लौटाता है तो यह सत्य लौटाएगा और इसके विपरीत।
  • NOT GLOB - यदि GLOB गलत लौटाता है तो यह सत्य लौटाएगा और इसके विपरीत।
  • NOT EXISTS - यदि EXISTS गलत लौटाता है तो यह सत्य लौटाएगा और इसके विपरीत।

उदाहरण:

निम्नलिखित उदाहरण में, हम EXISTS ऑपरेटर के साथ NOT ऑपरेटर का उपयोग उन विभागों के नाम प्राप्त करने के लिए करेंगे जो Students तालिका में मौजूद नहीं हैं, जो EXISTS ऑपरेटर का उल्टा परिणाम है। इसलिए, खोज DepartmentId के माध्यम से की जाएगी जो विभाग तालिका में मौजूद नहीं है।

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId
                  FROM Students AS s
                  WHERE d.DepartmentId = s.DepartmentId);

आउटपुट:

SQLite WHERE खंड और ऑपरेटर

केवल "गणित" विभाग ही दिखाया जाएगा। चूंकि "गणित" विभाग एकमात्र विभाग है, इसलिए यह छात्रों की तालिका में मौजूद नहीं है।

सीमित करना और आदेश देना

SQLite व्यवस्था

SQLite ऑर्डर आपके परिणाम को एक या अधिक अभिव्यक्तियों के आधार पर क्रमबद्ध करना है। परिणाम सेट को क्रमबद्ध करने के लिए, आपको निम्न प्रकार से ORDER BY क्लॉज़ का उपयोग करना होगा:

  • सबसे पहले, आपको ORDER BY क्लॉज़ निर्दिष्ट करना होगा।
  • ORDER BY क्लॉज को क्वेरी के अंत में निर्दिष्ट किया जाना चाहिए; इसके बाद केवल LIMIT क्लॉज निर्दिष्ट किया जा सकता है।
  • डेटा को क्रमित करने के लिए अभिव्यक्ति निर्दिष्ट करें, यह अभिव्यक्ति एक स्तंभ नाम या एक अभिव्यक्ति हो सकती है।
  • अभिव्यक्ति के बाद, आप वैकल्पिक सॉर्ट दिशा निर्दिष्ट कर सकते हैं। डेटा को अवरोही क्रम में क्रमबद्ध करने के लिए DESC या डेटा को आरोही क्रम में क्रमबद्ध करने के लिए ASC। यदि आपने उनमें से कोई भी निर्दिष्ट नहीं किया है, तो डेटा आरोही क्रम में क्रमबद्ध किया जाएगा।
  • आप एक दूसरे के बीच “,” का उपयोग करके अधिक अभिव्यक्तियाँ निर्दिष्ट कर सकते हैं।

उदाहरण

निम्नलिखित उदाहरण में, हम सभी विद्यार्थियों का चयन उनके नाम के अनुसार अवरोही क्रम में, फिर विभाग के नाम के अनुसार आरोही क्रम में करेंगे:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
ORDER BY d.DepartmentName ASC , s.StudentName DESC;

इससे आपको मिलेगा:

SQLite सीमित करना और आदेश देना

  • SQLite सबसे पहले सभी छात्रों को उनके विभाग के नाम के अनुसार आरोही क्रम में व्यवस्थित किया जाएगा
  • फिर प्रत्येक विभाग के नाम के लिए, उस विभाग के नाम के अंतर्गत सभी छात्रों को उनके नाम के अनुसार अवरोही क्रम में प्रदर्शित किया जाएगा

SQLite सीमा:

आप LIMIT क्लॉज़ का उपयोग करके अपनी SQL क्वेरी द्वारा लौटाई गई पंक्तियों की संख्या को सीमित कर सकते हैं। उदाहरण के लिए, LIMIT 10 आपको केवल 10 पंक्तियाँ देगा और अन्य सभी पंक्तियों को अनदेखा कर देगा।

LIMIT क्लॉज़ में, आप OFFSET क्लॉज़ का उपयोग करके किसी विशिष्ट स्थिति से शुरू होने वाली पंक्तियों की एक निश्चित संख्या का चयन कर सकते हैं। उदाहरण के लिए, "LIMIT 4 OFFSET 4" पहली 4 पंक्तियों को अनदेखा कर देगा और पाँचवीं पंक्ति से शुरू होने वाली 4 पंक्तियाँ लौटाएगा, इस प्रकार आपको पंक्तियाँ 5, 6, 7 और 8 प्राप्त होंगी।

ध्यान दें कि OFFSET क्लॉज़ वैकल्पिक है, आप इसे "LIMIT 4, 4" की तरह लिख सकते हैं और इससे आपको सटीक परिणाम मिलेंगे।

उदाहरण:

निम्नलिखित उदाहरण में, हम क्वेरी का उपयोग करके छात्र आईडी 3 से शुरू करते हुए केवल 5 छात्रों को लौटाएंगे:

SELECT * FROM Students LIMIT 4,3;

इससे आपको पंक्ति 5 से शुरू करते हुए केवल तीन छात्र मिलेंगे। इसलिए यह आपको StudentId 5, 6, और 7 वाली पंक्तियाँ देगा:

SQLite सीमित करना और आदेश देना

डुप्लीकेट हटाना

यदि आपकी SQL क्वेरी में डुप्लिकेट मान मिलते हैं, तो आप उन डुप्लिकेट मानों को हटाने और केवल विशिष्ट मान प्राप्त करने के लिए "DISTINCT" कीवर्ड का उपयोग कर सकते हैं। DISTINCT कुंजी के बाद आप एक से अधिक कॉलम निर्दिष्ट कर सकते हैं।

उदाहरण:

निम्नलिखित क्वेरी डुप्लिकेट "विभाग नाम मान" लौटाएगी: यहां हमारे पास आईटी, भौतिकी और कला नामों के साथ डुप्लिकेट मान हैं।

SELECT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

इससे आपको विभाग के नाम के लिए डुप्लिकेट मान मिलेंगे:

डुप्लिकेट हटाना SQLite

ध्यान दें, विभाग के नाम के लिए डुप्लिकेट मान कैसे हैं। अब, हम उन डुप्लिकेट को हटाने और केवल अद्वितीय मान प्राप्त करने के लिए उसी क्वेरी के साथ DISTINCT कीवर्ड का उपयोग करेंगे। इस तरह:

SELECT DISTINCT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

इससे आपको विभाग नाम कॉलम के लिए केवल तीन अद्वितीय मान मिलेंगे:

डुप्लिकेट हटाना SQLite

कुल

SQLite समुच्चय अंतर्निहित फ़ंक्शन हैं जिन्हें परिभाषित किया गया है SQLite जो एकाधिक पंक्तियों के एकाधिक मानों को एक मान में समूहित करेगा।

यहां पर निम्नलिखित द्वारा समर्थित समुच्चय दिए गए हैं: SQLite:

SQLite AVG()

सभी x मानों का औसत लौटाया गया.

उदाहरण:

निम्नलिखित उदाहरण में हम सभी परीक्षाओं में छात्रों द्वारा प्राप्त औसत अंक प्राप्त करेंगे:

SELECT AVG(Mark) FROM Marks;

इससे आपको “18.375” का मान मिलेगा:

SQLite अलग-अलग कार्य

ये परिणाम सभी अंक मानों के योग को उनकी गिनती से विभाजित करने पर प्राप्त होते हैं।

COUNT() – COUNT(X) या COUNT(*)

x मान के प्रकट होने की कुल संख्या लौटाता है। और यहाँ कुछ विकल्प दिए गए हैं जिनका उपयोग आप COUNT के साथ कर सकते हैं:

  • COUNT(x): केवल x मानों की गणना करता है, जहाँ x एक कॉलम नाम है। यह NULL मानों को अनदेखा कर देगा।
  • COUNT(*): सभी स्तंभों से सभी पंक्तियों की गणना करें।
  • COUNT (DISTINCT x): आप x से पहले DISTINCT कीवर्ड निर्दिष्ट कर सकते हैं जो x के विशिष्ट मानों की गणना प्राप्त करेगा।

उदाहरण

निम्नलिखित उदाहरण में, हम COUNT(DepartmentId), COUNT(*) और COUNT(DISTINCT DepartmentId) वाले विभागों की कुल संख्या प्राप्त करेंगे और देखेंगे कि वे किस प्रकार भिन्न हैं:

SELECT COUNT(DepartmentId), COUNT(DISTINCT DepartmentId), COUNT(*) FROM Students;

इससे आपको मिलेगा:

SQLite अलग-अलग कार्य

के रूप में निम्नानुसार:

  • 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): यह x के सभी मानों को एक स्ट्रिंग में संयोजित करेगा, जिसमें अल्पविराम “,” का उपयोग मानों के बीच विभाजक के रूप में किया जाएगा। शून्य मानों को अनदेखा किया जाएगा।
  • GROUP_CONCAT(X, Y): यह x के मानों को एक स्ट्रिंग में संयोजित करेगा, जिसमें y का मान डिफ़ॉल्ट विभाजक ',' के बजाय प्रत्येक मान के बीच विभाजक के रूप में उपयोग किया जाएगा। NULL मानों को भी अनदेखा किया जाएगा।
  • GROUP_CONCAT(DISTINCT X): यह x के सभी अलग-अलग मानों को एक स्ट्रिंग में संयोजित करेगा, जिसमें अल्पविराम “,” का उपयोग मानों के बीच विभाजक के रूप में किया जाएगा। NULL मानों को अनदेखा किया जाएगा।

GROUP_CONCAT(DepartmentName) उदाहरण

निम्नलिखित क्वेरी छात्रों और विभागों की तालिका से सभी विभाग नाम के मानों को अल्पविराम से अलग करके एक स्ट्रिंग में संयोजित करेगी। इसलिए मानों की सूची लौटाने के बजाय, प्रत्येक पंक्ति पर एक मान लौटाएगा। यह एक पंक्ति पर केवल एक मान लौटाएगा, जिसमें सभी मान अल्पविराम से अलग होंगे:

SELECT GROUP_CONCAT(d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

इससे आपको मिलेगा:

SQLite अलग-अलग कार्य

इससे आपको 8 विभागों के नाम मानों की सूची मिलेगी जो अल्पविराम से अलग करके एक स्ट्रिंग में संयोजित होंगे।

GROUP_CONCAT(DISTINCT विभागनाम) उदाहरण

निम्नलिखित क्वेरी छात्रों और विभागों तालिका से विभाग के नाम के अलग-अलग मानों को अल्पविराम से अलग करके एक स्ट्रिंग में संयोजित करेगी:

SELECT GROUP_CONCAT(DISTINCT d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

इससे आपको मिलेगा:

SQLite अलग-अलग कार्य

ध्यान दें कि परिणाम पिछले परिणाम से किस प्रकार भिन्न है; केवल तीन मान लौटाए गए जो कि अलग-अलग विभागों के नाम हैं, तथा डुप्लिकेट मान हटा दिए गए हैं।

GROUP_CONCAT(DepartmentName ,'&') उदाहरण

निम्नलिखित क्वेरी छात्रों और विभागों तालिका से विभाग नाम कॉलम के सभी मानों को एक स्ट्रिंग में संयोजित करेगी, लेकिन विभाजक के रूप में अल्पविराम के बजाय '&' वर्ण का उपयोग करेगी:

SELECT GROUP_CONCAT(d.DepartmentName, '&')
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

इससे आपको मिलेगा:

SQLite अलग-अलग कार्य

ध्यान दें कि मानों के बीच अंतर करने के लिए डिफ़ॉल्ट वर्ण “,” के स्थान पर वर्ण “&” का उपयोग किया गया है।

SQLite अधिकतम() और न्यूनतम()

MAX(X) आपको X मानों में से सबसे बड़ा मान लौटाता है। अगर x के सभी मान शून्य हैं, तो MAX एक NULL मान लौटाएगा। जबकि MIN(X) आपको X मानों में से सबसे छोटा मान लौटाता है। अगर X के सभी मान शून्य हैं, तो MIN एक NULL मान लौटाएगा।

उदाहरण

निम्नलिखित क्वेरी में, हम "मार्क्स" टेबल से उच्चतम और निम्नतम अंक प्राप्त करने के लिए MIN और MAX फ़ंक्शन का उपयोग करेंगे:

SELECT MAX(Mark), MIN(Mark) FROM Marks;

इससे आपको मिलेगा:

SQLite अलग-अलग कार्य

SQLite योग(x), कुल(x)

दोनों ही सभी x मानों का योग लौटाएंगे। लेकिन वे निम्नलिखित में भिन्न हैं:

  • यदि सभी मान शून्य हैं तो SUM शून्य लौटाएगा, लेकिन कुल 0 लौटाएगा।
  • TOTAL हमेशा फ़्लोटिंग पॉइंट मान लौटाता है। यदि सभी x मान पूर्णांक हैं, तो SUM एक पूर्णांक मान लौटाता है। हालाँकि, यदि मान पूर्णांक नहीं हैं, तो यह फ़्लोटिंग पॉइंट मान लौटाएगा।

उदाहरण

निम्नलिखित क्वेरी में हम "मार्क्स" टेबल में मौजूद सभी मार्क्स का योग प्राप्त करने के लिए SUM और total का उपयोग करेंगे:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks;

इससे आपको मिलेगा:

SQLite अलग-अलग कार्य

जैसा कि आप देख सकते हैं, TOTAL हमेशा एक फ़्लोटिंग पॉइंट लौटाता है। लेकिन SUM एक पूर्णांक मान लौटाता है क्योंकि “मार्क” कॉलम में मान पूर्णांक में हो सकते हैं।

SUM और TOTAL के बीच अंतर का उदाहरण:

निम्नलिखित क्वेरी में हम SUM और TOTAL के बीच अंतर दिखाएंगे जब उन्हें NULL मानों का SUM मिलेगा:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;

इससे आपको मिलेगा:

SQLite अलग-अलग कार्य

ध्यान दें कि TestId = 4 के लिए कोई चिह्न नहीं है, इसलिए उस परीक्षण के लिए शून्य मान हैं। SUM रिक्त के रूप में शून्य मान लौटाता है, जबकि TOTAL 0 लौटाता है।

द्वारा समूह बनाएं

GROUP BY क्लॉज़ का उपयोग एक या अधिक कॉलम निर्दिष्ट करने के लिए किया जाता है जिसका उपयोग पंक्तियों को समूहों में समूहित करने के लिए किया जाएगा। समान मान वाली पंक्तियों को समूहों में एक साथ इकट्ठा (व्यवस्थित) किया जाएगा।

किसी अन्य कॉलम के लिए जो कॉलम द्वारा समूह में शामिल नहीं है, आप उसके लिए एक समग्र फ़ंक्शन का उपयोग कर सकते हैं।

उदाहरण:

निम्नलिखित प्रश्न आपको प्रत्येक विभाग में उपस्थित छात्रों की कुल संख्या बताएगा।

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName;

इससे आपको मिलेगा:

SQLite समूह द्वारा और होना

GROUPBY DepartmentName क्लॉज सभी छात्रों को प्रत्येक विभाग के नाम के लिए एक समूह में समूहित करेगा। “विभाग” के प्रत्येक समूह के लिए, यह उस पर छात्रों की गिनती करेगा।

HAVING खंड

यदि आप GROUP BY क्लॉज द्वारा लौटाए गए समूहों को फ़िल्टर करना चाहते हैं, तो आप GROUP BY के बाद अभिव्यक्ति के साथ “HAVING” क्लॉज निर्दिष्ट कर सकते हैं। अभिव्यक्ति का उपयोग इन समूहों को फ़िल्टर करने के लिए किया जाएगा।

उदाहरण

निम्नलिखित क्वेरी में, हम उन विभागों का चयन करेंगे जिनमें केवल दो छात्र हैं:

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName
HAVING COUNT(s.StudentId) = 2;

इससे आपको मिलेगा:

SQLite समूह द्वारा और होना

क्लॉज HAVING COUNT(S.StudentId) = 2 लौटाए गए समूहों को फ़िल्टर करेगा और केवल उन समूहों को लौटाएगा जिनमें ठीक दो छात्र हैं। हमारे मामले में, कला विभाग में 2 छात्र हैं, इसलिए इसे आउटपुट में प्रदर्शित किया जाता है।

SQLite क्वेरी और सबक्वेरी

किसी भी क्वेरी के अंदर, आप SELECT, INSERT, DELETE, UPDATE या किसी अन्य सबक्वेरी के अंदर किसी अन्य क्वेरी का उपयोग कर सकते हैं।

इस नेस्टेड क्वेरी को सबक्वेरी कहा जाता है। अब हम SELECT क्लॉज में सबक्वेरी का उपयोग करने के कुछ उदाहरण देखेंगे। हालाँकि, डेटा संशोधित करने वाले ट्यूटोरियल में, हम देखेंगे कि हम INSERT, DELETE और UPDATE स्टेटमेंट के साथ सबक्वेरी का उपयोग कैसे कर सकते हैं।

FROM क्लॉज़ उदाहरण में सबक्वेरी का उपयोग करना

निम्नलिखित क्वेरी में हम FROM क्लॉज़ के अंदर एक सबक्वेरी शामिल करेंगे:

SELECT
  s.StudentName, t.Mark
FROM Students AS s
INNER JOIN
(
   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId
)  ON s.StudentId = t.StudentId;

पूछताछ:

   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId

उपरोक्त क्वेरी को यहाँ सबक्वेरी कहा जाता है क्योंकि यह FROM क्लॉज़ के अंदर नेस्टेड है। ध्यान दें कि हमने इसे एक उपनाम नाम “t” दिया है ताकि हम क्वेरी में इससे लौटाए गए कॉलम को संदर्भित कर सकें।

यह क्वेरी आपको देगी:

SQLite क्वेरी और सबक्वेरी

तो हमारे मामले में,

  • s.StudentName मुख्य क्वेरी से चुना जाता है जो छात्रों का नाम देता है और
  • t.Mark को सबक्वेरी से चुना जाता है; जो प्रत्येक छात्र द्वारा प्राप्त अंक देता है

WHERE क्लॉज़ उदाहरण में सबक्वेरी का उपयोग करना

निम्नलिखित क्वेरी में हम WHERE क्लॉज़ में एक सबक्वेरी शामिल करेंगे:

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId
                  FROM Students AS s
                  WHERE d.DepartmentId = s.DepartmentId);

पूछताछ:

SELECT DepartmentId
FROM Students AS s
WHERE d.DepartmentId = s.DepartmentId

उपरोक्त क्वेरी को यहाँ सबक्वेरी कहा जाता है क्योंकि यह WHERE क्लॉज़ में नेस्टेड है। सबक्वेरी डिपार्टमेंटआईडी मान लौटाएगी जिसका उपयोग ऑपरेटर NOT EXISTS द्वारा किया जाएगा।

यह क्वेरी आपको देगी:

SQLite क्वेरी और सबक्वेरी

उपरोक्त क्वेरी में, हमने उस विभाग का चयन किया है जिसमें कोई छात्र नामांकित नहीं है। जो यहाँ पर “गणित” विभाग है।

सेट Operaयूनियन, इंटरसेक्ट

SQLite निम्नलिखित SET ऑपरेशन का समर्थन करता है:

यूनियन और यूनियन ऑल

यह एकाधिक SELECT कथनों से लौटाए गए एक या अधिक परिणाम सेट (पंक्तियों का एक समूह) को एक परिणाम सेट में संयोजित करता है।

UNION अलग-अलग मान लौटाएगा। हालाँकि, UNION ALL ऐसा नहीं करेगा और इसमें डुप्लिकेट शामिल होंगे।

ध्यान दें कि स्तंभ नाम पहले SELECT कथन में निर्दिष्ट स्तंभ नाम होगा।

यूनियन उदाहरण

निम्नलिखित उदाहरण में, हमें उसी कॉलम में students तालिका से DepartmentId की सूची और department तालिका से DepartmentId की सूची मिलेगी:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION
SELECT DepartmentId FROM Departments;

इससे आपको मिलेगा:

SQLite सेट Operaमाहौल

क्वेरी केवल 5 पंक्तियाँ लौटाती है जो अलग-अलग डिपार्टमेंट आईडी मान हैं। पहले मान पर ध्यान दें जो शून्य मान है।

SQLite UNION ALL उदाहरण

निम्नलिखित उदाहरण में, हमें उसी कॉलम में students तालिका से DepartmentId की सूची और department तालिका से DepartmentId की सूची मिलेगी:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION ALL
SELECT DepartmentId FROM Departments;

इससे आपको मिलेगा:

SQLite सेट Operaमाहौल

क्वेरी 14 पंक्तियाँ लौटाएगी, 10 पंक्तियाँ students टेबल से और 4 पंक्तियाँ department टेबल से। ध्यान दें कि लौटाए गए मानों में डुप्लिकेट हैं। साथ ही, ध्यान दें कि कॉलम का नाम वही था जो पहले SELECT कथन में निर्दिष्ट किया गया था।

अब, आइए देखें कि यदि हम UNION ALL को UNION से प्रतिस्थापित करें तो UNION all किस प्रकार भिन्न परिणाम देगा:

SQLite एक दूसरे को काटना

दोनों संयुक्त परिणाम सेट में मौजूद मान लौटाता है। संयुक्त परिणाम सेट में से किसी एक में मौजूद मानों को अनदेखा कर दिया जाएगा।

उदाहरण

निम्नलिखित क्वेरी में, हम DepartmentId कॉलम में Students और Departments दोनों तालिकाओं में मौजूद DepartmentId मानों का चयन करेंगे:

SELECT DepartmentId FROM Students
Intersect
SELECT DepartmentId FROM Departments;

इससे आपको मिलेगा:

SQLite सेट Operaमाहौल

क्वेरी केवल तीन मान 1, 2 और 3 लौटाती है। ये वे मान हैं जो दोनों तालिकाओं में मौजूद हैं।

हालाँकि, शून्य और 4 मान शामिल नहीं किए गए क्योंकि शून्य मान केवल छात्रों की तालिका में मौजूद है और विभागों की तालिका में नहीं है। और मान 4 विभागों की तालिका में मौजूद है और छात्रों की तालिका में नहीं है।

यही कारण है कि NULL और 4 दोनों मानों को नजरअंदाज कर दिया गया और लौटाए गए मानों में शामिल नहीं किया गया।

के सिवाय

मान लीजिए कि आपके पास पंक्तियों की दो सूचियाँ हैं, सूची 1 और सूची 2, और आप केवल सूची 1 से पंक्तियाँ चाहते हैं जो सूची 2 में मौजूद नहीं हैं, तो आप "EXCEPT" खंड का उपयोग कर सकते हैं। EXCEPT खंड दो सूचियों की तुलना करता है और उन पंक्तियों को लौटाता है जो सूची 1 में मौजूद हैं और सूची 2 में मौजूद नहीं हैं।

उदाहरण

निम्नलिखित क्वेरी में, हम उन DepartmentId मानों का चयन करेंगे जो विभाग तालिका में मौजूद हैं और छात्र तालिका में मौजूद नहीं हैं:

SELECT DepartmentId FROM Departments
EXCEPT
SELECT DepartmentId FROM Students;

इससे आपको मिलेगा:

SQLite सेट Operaमाहौल

क्वेरी केवल मान 4 लौटाती है। यह एकमात्र मान है जो विभाग तालिका में मौजूद है, और छात्र तालिका में मौजूद नहीं है।

नल हैंडलिंग

“NULL” मान एक विशेष मान है SQLiteइसका उपयोग अज्ञात या अनुपलब्ध मान को दर्शाने के लिए किया जाता है। ध्यान दें कि नल मान, "0" या रिक्त स्थान से पूरी तरह भिन्न होता है। क्योंकि 0 और रिक्त स्थान ज्ञात मान होते हैं, जबकि नल मान अज्ञात होता है।

NULL मानों को विशेष प्रबंधन की आवश्यकता होती है SQLiteअब हम देखेंगे कि NULL मानों को कैसे संभालना है।

शून्य मानों की खोज करें

आप शून्य मानों को खोजने के लिए सामान्य समानता ऑपरेटर (=) का उपयोग नहीं कर सकते। उदाहरण के लिए, निम्न क्वेरी उन छात्रों की खोज करती है जिनके पास शून्य DepartmentId मान है:

SELECT * FROM Students WHERE DepartmentId = NULL;

यह क्वेरी कोई परिणाम नहीं देगी:

SQLite नल हैंडलिंग

क्योंकि NULL मान किसी अन्य मान के बराबर नहीं होता है जिसमें स्वयं शून्य मान शामिल होता है, इसीलिए इसने कोई परिणाम नहीं दिया।

हालांकि, क्वेरी को काम करने के लिए, आपको शून्य मानों को खोजने के लिए "IS NULL" ऑपरेटर का उपयोग करना होगा, जैसा कि नीचे दिखाया गया है:

SELECT * FROM Students WHERE DepartmentId IS NULL;

इससे आपको मिलेगा:

SQLite नल हैंडलिंग

क्वेरी उन छात्रों को लौटाएगी जिनका DepartmentId मान शून्य है।

यदि आप उन मानों को प्राप्त करना चाहते हैं जो नल नहीं हैं, तो आपको "IS NOT NULL" ऑपरेटर का उपयोग इस प्रकार करना होगा:

SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

इससे आपको मिलेगा:

SQLite नल हैंडलिंग

क्वेरी उन छात्रों को लौटाएगी जिनके पास NULL DepartmentId मान नहीं है।

सशर्त परिणाम

यदि आपके पास मानों की एक सूची है और आप कुछ शर्तों के आधार पर उनमें से किसी एक का चयन करना चाहते हैं, तो उसके लिए उस विशेष मान के लिए शर्त सत्य होनी चाहिए।

CASE अभिव्यक्ति सभी मानों के लिए शर्तों की इन सूची का मूल्यांकन करेगी। यदि शर्त सत्य है, तो यह उस मान को लौटाएगा।

उदाहरण के लिए, यदि आपके पास एक कॉलम “ग्रेड” है और आप ग्रेड मान के आधार पर निम्नलिखित पाठ मान चुनना चाहते हैं:

– “उत्कृष्ट” यदि ग्रेड 85 से अधिक है।

– “बहुत अच्छा” यदि ग्रेड 70 और 85 के बीच है।

– “अच्छा” यदि ग्रेड 60 और 70 के बीच है।

फिर आप ऐसा करने के लिए CASE अभिव्यक्ति का उपयोग कर सकते हैं।

इसका उपयोग SELECT क्लॉज में कुछ तर्क को परिभाषित करने के लिए किया जा सकता है ताकि आप उदाहरण के लिए if स्टेटमेंट जैसी कुछ शर्तों के आधार पर कुछ परिणामों का चयन कर सकें।

CASE ऑपरेटर को निम्नलिखित विभिन्न सिंटैक्स के साथ परिभाषित किया जा सकता है:

आप विभिन्न स्थितियों का उपयोग कर सकते हैं:

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  …
  ELSE resultn
END

या, आप केवल एक अभिव्यक्ति का उपयोग कर सकते हैं और चुनने के लिए विभिन्न संभावित मान रख सकते हैं:

CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  WHEN value3 THEN result3
  …
  ELSE restuln
END

ध्यान रखें कि ELSE खंड वैकल्पिक है।

उदाहरण

निम्नलिखित उदाहरण में, हम स्टूडेंट्स टेबल में डिपार्टमेंट आईडी कॉलम में NULL मान के साथ CASE एक्सप्रेशन का उपयोग करके 'कोई विभाग नहीं' टेक्स्ट प्रदर्शित करेंगे, जैसा कि नीचे दिखाया गया है:

SELECT
  StudentName,
  CASE
    WHEN DepartmentId IS NULL THEN 'No Department'
    ELSE DepartmentId
  END AS DepartmentId
FROM Students;
  • CASE ऑपरेटर DepartmentId का मान जांचेगा कि वह शून्य है या नहीं।
  • यदि यह NULL मान है, तो यह DepartmentId मान के स्थान पर शाब्दिक मान 'No Department' का चयन करेगा।
  • यदि शून्य मान नहीं है, तो यह DepartmentId कॉलम का मान चुनेगा.

इससे आपको नीचे दिखाए अनुसार आउटपुट मिलेगा:

SQLite केस सशर्त परिणाम

सामान्य तालिका अभिव्यक्ति

सामान्य तालिका अभिव्यक्तियाँ (CTE) उपक्वेरी होती हैं जिन्हें SQL कथन के अंदर दिए गए नाम से परिभाषित किया जाता है।

सबक्वेरीज़ की तुलना में इसका एक फायदा यह है कि इसे SQL स्टेटमेंट से अलग परिभाषित किया जाता है और इससे क्वेरीज़ को पढ़ना, बनाए रखना और समझना आसान हो जाता है।

एक सामान्य तालिका अभिव्यक्ति को SELECT कथन के सामने WITH खंड रखकर निम्नानुसार परिभाषित किया जा सकता है:

WITH CTEname
AS
(
   SELECT statement
)
SELECT, UPDATE, INSERT, or update statement here FROM CTE

“CTEname” CTE के लिए दिया गया कोई भी नाम हो सकता है, जिसका उपयोग आप बाद में इसे संदर्भित करने के लिए कर सकते हैं। ध्यान दें कि आप CTE पर SELECT, UPDATE, INSERT या DELETE स्टेटमेंट परिभाषित कर सकते हैं।

अब, आइए एक उदाहरण देखें कि SELECT क्लॉज में CTE का उपयोग कैसे किया जाता है।

उदाहरण

निम्नलिखित उदाहरण में, हम SELECT कथन से CTE परिभाषित करेंगे, और फिर हम बाद में इसे किसी अन्य क्वेरी पर उपयोग करेंगे:

WITH AllDepartments
AS
(
  SELECT DepartmentId, DepartmentName
  FROM Departments
)
SELECT
  s.StudentId,
  s.StudentName,
  a.DepartmentName
FROM Students AS s
INNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;

इस क्वेरी में, हमने एक CTE को परिभाषित किया और उसे "AllDepartments" नाम दिया। इस CTE को एक SELECT क्वेरी से परिभाषित किया गया था:

SELECT DepartmentId, DepartmentName
  FROM Departments

फिर जब हमने CTE को परिभाषित कर लिया तो हमने इसका प्रयोग SELECT क्वेरी में किया जो इसके बाद आती है।

ध्यान दें कि, कॉमन टेबल एक्सप्रेशन क्वेरी के आउटपुट को प्रभावित नहीं करते हैं। यह एक तार्किक दृश्य या सबक्वेरी को परिभाषित करने का एक तरीका है ताकि उन्हें उसी क्वेरी में पुनः उपयोग किया जा सके। कॉमन टेबल एक्सप्रेशन एक वैरिएबल की तरह होते हैं जिसे आप घोषित करते हैं, और इसे सबक्वेरी के रूप में पुनः उपयोग करते हैं। केवल SELECT कथन क्वेरी के आउटपुट को प्रभावित करता है।

यह क्वेरी आपको देगी:

SQLite सामान्य तालिका अभिव्यक्ति

उन्नत प्रश्न

उन्नत क्वेरीज़ वे क्वेरीज़ होती हैं जिनमें जटिल जॉइन, सबक्वेरीज़ और कुछ एग्रीगेट्स होते हैं। अगले भाग में हम उन्नत क्वेरी का एक उदाहरण देखेंगे:

हम कहाँ से प्राप्त करते हैं,

  • प्रत्येक विभाग के सभी छात्रों के साथ विभाग के नाम
  • छात्रों का नाम अल्पविराम से अलग करके
  • कम से कम तीन छात्रों वाले विभाग को दर्शाना
SELECT
  d.DepartmentName,
  COUNT(s.StudentId) StudentsCount,
  GROUP_CONCAT(StudentName) AS Students
FROM Departments AS d
INNER JOIN Students AS s ON s.DepartmentId = d.DepartmentId
GROUP BY d.DepartmentName
HAVING COUNT(s.StudentId) >= 3;

हमने डिपार्टमेंट टेबल से डिपार्टमेंट का नाम प्राप्त करने के लिए एक JOIN क्लॉज़ जोड़ा। उसके बाद हमने दो एग्रीगेट फ़ंक्शन के साथ एक GROUP BY क्लॉज़ जोड़ा:

  • प्रत्येक विभाग समूह के छात्रों की गिनती करने के लिए “COUNT” का प्रयोग करें।
  • GROUP_CONCAT प्रत्येक समूह के छात्रों को एक स्ट्रिंग में अल्पविराम से अलग करके संयोजित करने के लिए।

GROUP BY के बाद, हमने विभागों को फ़िल्टर करने के लिए HAVING क्लॉज़ का उपयोग किया और केवल उन विभागों का चयन किया जिनमें कम से कम 3 छात्र हों।

परिणाम निम्नलिखित होगा:

SQLite उन्नत प्रश्न

अक्सर पूछे जाने वाले प्रश्न

WHERE फ़िल्टर किसी भी समूह से पहले व्यक्तिगत पंक्तियों को फ़िल्टर करता है।ping और एग्रीगेट फ़ंक्शन का उपयोग नहीं किया जा सकता। HAVING, GROUP BY के बाद के पूरे ग्रुप को फ़िल्टर करता है और COUNT या SUM जैसे एग्रीगेट का परीक्षण कर सकता है। क्वेरी में, WHERE को GROUP BY से पहले और HAVING को उसके बाद लिखा जाता है।

SQL में SELECT और WHERE जैसे कीवर्ड केस-इनसेंसिटिव होते हैं। LIKE ऑपरेटर ASCII अक्षरों के लिए केस-इनसेंसिटिव होता है, जबकि GLOB केस-इनसेंसिटिव होता है। कॉलम में संग्रहीत टेक्स्ट अपने मूल केस को बनाए रखता है, इसलिए इक्वल्स ऑपरेटर के साथ मानों की तुलना करते समय सटीक अक्षरों का ध्यान रखा जाता है।

किसी SELECT स्टेटमेंट में ORDER BY RANDOM() और LIMIT 1 जोड़ें, उदाहरण के लिए SELECT * FROM Students ORDER BY RANDOM() LIMIT 1। RANDOM() पंक्तियों को शफल करता है और LIMIT एक पंक्ति लौटाता है। कई यादृच्छिक पंक्तियाँ प्राप्त करने के लिए LIMIT संख्या बढ़ाएँ।

JOIN क्वेरी दो तालिकाओं के कॉलमों को एक मिलान शर्त का उपयोग करके साथ-साथ जोड़ती है, जिससे प्रत्येक पंक्ति का आकार बढ़ जाता है। UNION क्वेरी दो SELECT क्वेरी के परिणामों की पंक्तियों को एक सूची में एक दूसरे के ऊपर रखती है, इसलिए दोनों क्वेरी को समान संख्या में कॉलम लौटाने होंगे।

नहीं। बिना ORDER BY क्लॉज़ के। SQLite यह किसी भी क्रम में पंक्तियाँ लौटा सकता है, इसलिए LIMIT प्रत्येक बार अलग-अलग पंक्तियाँ चुन सकता है। जब आपको पूर्वानुमानित परिणाम चाहिए हों, तो हमेशा LIMIT के साथ ORDER BY का प्रयोग करें, जैसे कि ORDER BY StudentId LIMIT 10।

WHERE, JOIN और ORDER BY क्लॉज़ में उपयोग किए गए कॉलम पर एक इंडेक्स बनाएं ताकि SQLite यह पूरी टेबल को स्कैन किए बिना पंक्तियों का पता लगा सकता है। केवल आवश्यक कॉलम का चयन करके और सांख्यिकी को रीफ़्रेश करने के लिए ANALYZE चलाने से क्वेरी की गति में भी सुधार होता है।

जी हां। एआई टेक्स्ट-टू-एसक्यूएल सहायक साधारण अंग्रेजी अनुरोधों को परिवर्तित करते हैं। SQLite SELECT, WHERE, JOIN और GROUP BY स्टेटमेंट का उपयोग करें। टेबल और कॉलम के नाम देने से सटीकता बढ़ती है, और वास्तविक डेटा पर चलाने से पहले प्रत्येक जेनरेटेड क्वेरी की समीक्षा और परीक्षण किया जाना चाहिए।

हां. गिटहब कोपिलॉट पता चलता है SQLite जैसे संपादकों में क्वेरीज़ इनलाइन VS Codeयह SELECT, JOIN, aggregate और GROUP BY क्लॉज़ को पूरा करता है। यह आस-पास के स्कीमा और टिप्पणियों को पढ़ता है, इसलिए इसके सुझाव आपके वास्तविक टेबल और कॉलम नामों का पुनः उपयोग करते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: