डेटा को प्रतिबंधित करना और सॉर्ट करना

SELECT स्टेटमेंट की आवश्यक क्षमताएं चयन, प्रोजेक्शन और जॉइनिंग हैं। किसी तालिका से विशिष्ट कॉलम प्रदर्शित करना प्रोजेक्ट ऑपरेशन के रूप में जाना जाता है। अब हम आउटपुट की विशिष्ट पंक्तियों को प्रदर्शित करने पर ध्यान केंद्रित करेंगे। इसे चुनिंदा ऑपरेशन के रूप में जाना जाता है। विशिष्ट पंक्तियों का चयन एक चयन क्वेरी में WHERE क्लॉज जोड़कर किया जा सकता है। तथ्य की बात के रूप में, सिलेक्ट क्वेरी पदानुक्रम में FROM क्लॉज के ठीक बाद WHERE क्लॉज दिखाई देता है। अनुक्रम सभी परिदृश्यों में बनाए रखा जाना है। यदि उल्लंघन किया जाता है, तो ओरेकल एक अपवाद उठाता है।

वाक्य - विन्यास:

SELECT *|{[DISTINCT] column| expression [alias],..}
FROM table
[WHERE condition(s)]

वाक्य रचना में,

  • जहां क्लॉज कीवर्ड है

  • [स्थिति] में कॉलम के नाम, भाव, स्थिरांक, शाब्दिक और एक तुलना ऑपरेटर शामिल हैं।

मान लीजिए कि आपका प्रबंधक आपके संगठन के लिए त्रैमासिक बजट पर काम कर रहा है। इस गतिविधि के भाग के रूप में, प्रत्येक कर्मचारी के आवश्यक विवरणों की एक सूची तैयार करना आवश्यक है, लेकिन केवल उन कर्मचारियों के लिए जिन्हें सालाना कम से कम $ 25,000 का भुगतान किया जाता है। नीचे SQL क्वेरी इस कार्य को पूरा करती है। बोल्ड टेक्स्ट में दिखाए गए WHERE क्लॉज के उपयोग पर ध्यान दें।

SELECT Employee_ID, Last_Name, First_Name, Salary
FROM employees
WHERE Salary >= 25000;  

EMPLOYEE_ID  LAST_NAME        FIRST_NAME       SALARY
----------   ---------------  ---------------  -----------
88303        Jones            Quincey          $30,550.00
88404        Barlow           William          $27,500.00
88505        Smith            Susan            $32,500.00

3 rows selected

ध्यान देने योग्य बात -

  • एक सेलेक्ट क्लॉज में केवल एक ही हो सकता है। हालाँकि, एकाधिक फ़िल्टर स्थितियों को AND और OR ऑपरेटर के उपयोग से जोड़ा जा सकता है।

  • एक विधेय खंड में कॉलम, शाब्दिक या भाव समान या परस्पर भिन्न प्रकार के होने चाहिए।

  • कॉलम उर्फ ​​का उपयोग WHERE क्लॉज में नहीं किया जा सकता है।

  • चरित्र उद्धरणों को एकल उद्धरण चिह्नों के भीतर संलग्न किया जाना चाहिए और मामला संवेदनशील है।

  • दिनांक शाब्दिक को एक उद्धरण चिह्नों के भीतर संलग्न किया जाना चाहिए और प्रारूप संवेदनशील हैं। डिफ़ॉल्ट प्रारूप हैDD-MON-RR

तुलना संचालक

तुलना ऑपरेटरों को एक शब्द या दूसरे शब्द के साथ ऑपरेंड करने के लिए विधेय में उपयोग किया जाता है। एसक्यूएल समानता, असमानता और विविध ऑपरेटरों का व्यापक सेट प्रदान करता है। उन्हें डेटा और फ़िल्टर स्थिति तर्क के आधार पर SELECT क्वेरी में उपयोग किया जा सकता है। जब आप WHERE क्लॉज़ में तुलना संचालकों का उपयोग करते हैं, तो ऑपरेटर के दोनों किनारों पर तर्क (ऑब्जेक्ट या मान जो आप तुलना कर रहे हैं) या तो एक स्तंभ नाम या एक विशिष्ट मान होना चाहिए। यदि एक विशिष्ट मूल्य का उपयोग किया जाता है, तो मूल्य या तो एक संख्यात्मक मूल्य या एक शाब्दिक स्ट्रिंग होना चाहिए। यदि मान एक वर्ण स्ट्रिंग या दिनांक है, तो आपको एकल उद्धरण चिह्नों ('') के भीतर मान दर्ज करना होगा।

ओरेकल के नौ तुलनात्मक ऑपरेटर का इस्तेमाल समानता या असमानता की स्थिति में किया जाना है।

Operator  Meaning
=         equal to 
<         less than
>         greater than
>=        greater than or equal to
<=        less than or equal to
!=        not equal to
<>        not equal to

अन्य ओरेकल ऑपरेटर BETWEEN..AND, IN, LIKE और IS NULL हैं।

बीटा ऑपरेटर

एक निश्चित सीमा के भीतर स्तंभ मान की तुलना करने के लिए BETWEEN ऑपरेटर का उपयोग किया जा सकता है। निर्दिष्ट सीमा में एक निचली और ऊपरी सीमा होनी चाहिए जहां दोनों तुलना के दौरान समावेशी हों। इसका उपयोग समग्र असमानता ऑपरेटर (<= और> =) के समान है। इसका उपयोग संख्यात्मक, चरित्र और दिनांक प्रकार मानों के साथ किया जा सकता है।

उदाहरण के लिए, WHERE की स्थिति SALARY BETWEEN 1500 AND 2500 एक चयन क्वेरी में उन कर्मचारियों को सूचीबद्ध किया जाएगा जिनका वेतन 1500 और 2500 के बीच है।

संचालक

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

उदाहरण के लिए, WHERE की स्थिति SALARY IN (1500, 3000, 2500) एक चयन क्वेरी में उन पंक्तियों को प्रतिबंधित किया जाएगा जहाँ वेतन 1500, 3000 या 2500 में से एक है।

द लाइक ऑपरेटर

LIKE ऑपरेटर का उपयोग पैटर्न मिलान और वाइल्डकार्ड खोजों के लिए एक SELECT क्वेरी में किया जाता है। यदि स्तंभ मान का एक भाग अज्ञात है, तो अज्ञात भाग को प्रतिस्थापित करने के लिए वाइल्डकार्ड का उपयोग किया जा सकता है। यह खोज स्ट्रिंग बनाने के लिए वाइल्डकार्ड ऑपरेटरों का उपयोग करता है, इस प्रकार खोज को वाइल्डकार्ड खोज के रूप में जाना जाता है। ये दो संचालक हैं परसेंटाइल ('%') और अंडरस्कोर ('_')। अंडरस्कोर ('_') एक एकल वर्ण को प्रतिस्थापित करता है जबकि प्रतिशतक ('%') एक से अधिक वर्णों को प्रतिस्थापित करता है। उन्हें संयोजन में भी इस्तेमाल किया जा सकता है।

उदाहरण के लिए, नीचे चयनित क्वेरी उन कर्मचारियों के पहले नामों को सूचीबद्ध करती है, जिनका अंतिम नाम 'SA' से शुरू होता है।

SELECT first_name
FROM employees
WHERE last_name LIKE 'SA%';

आईएस (नहीं) पूर्ण शर्तें

नोट किया जाए, NULL मान का समानता ऑपरेटर के उपयोग से परीक्षण नहीं किया जा सकता है। ऐसा इसलिए है क्योंकि NULL मान अज्ञात और अनसाइन किए गए हैं, जबकि एक निश्चित मान के लिए समानता ऑपरेटर परीक्षण करते हैं। IS NULL ऑपरेटर स्तंभ के NULL मान की जांच करने के लिए समानता ऑपरेटर के रूप में कार्य करता है।

उदाहरण के लिए, WHERE की स्थिति COMMISSION_PCT IS NULL चयन क्वेरी में उन कर्मचारियों को सूचीबद्ध करेंगे जिनके पास कमीशन प्रतिशत नहीं है।

लॉजिकल ऑपरेटर्स

एकाधिक फ़िल्टर शर्तों को WHERE क्लॉज के लिए जोड़ा जा सकता है। तार्किक ऑपरेटरों AND, OR और NOT का उपयोग करके एक से अधिक स्थितियों को एक साथ जोड़ा जा सकता है।

  • और: दो या दो से अधिक स्थितियों में शामिल होता है, और परिणाम तभी मिलते हैं जब सभी स्थितियां सत्य होती हैं।

  • या: दो या अधिक स्थितियों में शामिल होता है, और जब कोई भी स्थिति सत्य होती है, तो यह परिणाम देता है।

  • नहीं: इसका अनुसरण करने वाले व्यंजक को नकारता है।

AND ऑपरेटर WHERE क्लॉज़ में दो या अधिक शर्तों को जोड़ता है और TRUE लौटाता है, यदि सभी स्थितियाँ सत्य हैं। मान लीजिए कि एक प्रबंधक को महिला कर्मचारियों की सूची की आवश्यकता है। इसके अलावा, सूची में केवल अंतिम नाम वाले कर्मचारियों को शामिल होना चाहिए जो "ई" अक्षर से शुरू होते हैं या जो बाद में वर्णमाला में आते हैं। इसके अतिरिक्त, परिणाम तालिका को कर्मचारी द्वारा अंतिम नाम से क्रमबद्ध किया जाना चाहिए। दो साधारण शर्तें पूरी करनी होती हैं। WHERE क्लॉज को इस प्रकार लिखा जा सकता है: WHERE Gender = 'F' और last_name> 'E'।

SELECT last_name "Last Name", first_name "First Name", Gender "Gender"
FROM employees
WHERE Gender = 'F' AND last_name > 'E'
ORDER BY last_name;

OR ऑपरेटर WHERE क्लॉज में एक से अधिक कंडीशन को लिंक करता है और यदि दोनों में से कोई भी एक शर्त सही है, तो TRUE लौटाता है। मान लीजिए कि आपके संगठनात्मक प्रबंधक की आवश्यकताएँ थोड़ी बदल जाती हैं। एक और कर्मचारी सूची की आवश्यकता होती है, लेकिन इस सूची में कर्मचारियों को होना चाहिए: (1) महिला हो या (2) एक अंतिम नाम हो जो "T" अक्षर या अक्षर से शुरू होता है जो बाद में वर्णमाला में आता है। परिणाम तालिका को कर्मचारी द्वारा अंतिम नाम से क्रमबद्ध किया जाना चाहिए। इस स्थिति में क्वेरी को संतुष्ट करने के लिए दोनों स्थितियों में से किसी एक को पूरा किया जा सकता है। महिला कर्मचारियों को उन कर्मचारियों के साथ सूचीबद्ध किया जाना चाहिए, जिनका नाम दूसरी शर्त को पूरा करता है।

NOT संचालक का प्रयोग किसी एक्सप्रेशन या कॉनिशन को नकारने के लिए किया जाता है।

खंड द्वारा आदेश

जब आप डेटा की केवल कुछ पंक्तियों को प्रदर्शित करते हैं, तो आउटपुट को सॉर्ट करना अनावश्यक हो सकता है; हालाँकि, जब आप कई पंक्तियों को प्रदर्शित करते हैं, तो प्रबंधक सूचना को क्रमबद्ध करके निर्णय लेने में सहायता कर सकते हैं। एक SELECT स्टेटमेंट से आउटपुट को ORDER BY वैकल्पिक क्लॉज का उपयोग करके सॉर्ट किया जा सकता है। जब आप ORDER BY क्लॉज का उपयोग करते हैं, तो जिस कॉलम का नाम आप ऑर्डर कर रहे हैं, वह कॉलम नाम भी होना चाहिए जो SELECT क्लॉज में निर्दिष्ट है।

नीचे SQL क्वेरी आरोही क्रम में अंतिम_नाम कॉलम द्वारा परिणाम तालिका को सॉर्ट करने के लिए ORDER BY क्लॉज का उपयोग करती है। आरोही क्रम डिफ़ॉल्ट क्रम है।

SELECT last_name, first_name
FROM employees
WHERE last_name >= 'J'
ORDER BY last_name;

last_name        first_name
---------------  ---------------
Jones            Quincey
Klepper          Robert
Quattromani      Toni
Schultheis       Robert

छंटनी संख्यात्मक और तिथि मानों पर भी आधारित हो सकती है। कई कॉलम के आधार पर छंटनी भी की जा सकती है।

डिफ़ॉल्ट रूप से, ORDER BY खंड आरोही क्रम में परिणाम तालिका में आउटपुट पंक्तियों को सॉर्ट करेगा। अवरोही क्रम को सक्षम करने के लिए हम कीवर्ड DESC (अवरोही के लिए छोटा) का उपयोग कर सकते हैं। वैकल्पिक डिफ़ॉल्ट ASC है जो आरोही क्रम में सॉर्ट करता है, लेकिन ASC कीवर्ड का उपयोग शायद ही कभी किया जाता है क्योंकि यह डिफ़ॉल्ट है। जब ASC या DESC वैकल्पिक कीवर्ड का उपयोग किया जाता है, तो उसे उस कॉलम के नाम का पालन करना चाहिए, जिस पर आप WHERE क्लॉज में छंटनी कर रहे हैं।

Positional Sorting - चयनित कॉलम सूची में कॉलम की संख्यात्मक स्थिति को कॉलम नाम के बजाय ORDER BY क्लॉज में दिया जा सकता है। यह मुख्य रूप से UNION प्रश्नों (बाद में चर्चा की गई) में उपयोग किया जाता है। कॉलम सूची में 2 वें प्रकट होने के बाद क्वेरी वेतन द्वारा निर्धारित परिणाम का आदेश देता है।

SELECT  first_name, salary
FROM employees
ORDER BY 2;

प्रतिस्थापन चर

जब एक SQL क्वेरी को इनपुट के विभिन्न सेट के लिए एक से अधिक बार निष्पादित किया जाना है, तो प्रतिस्थापन चर का उपयोग किया जा सकता है। क्वेरी निष्पादन से पहले उपयोगकर्ता आदानों के लिए संकेत करने के लिए प्रतिस्थापन चर का उपयोग किया जा सकता है। वे व्यापक रूप से क्वेरी आधारित रिपोर्ट पीढ़ी में उपयोग किए जाते हैं जो सशर्त फ़िल्टरिंग और डेटा डिस्प्ले के इनपुट के रूप में उपयोगकर्ताओं से डेटा रेंज लेते हैं। प्रतिस्थापन चर अस्थायी रूप से स्टोर मानों के लिए एकल-एम्परसेंड (&) प्रतीक द्वारा उपसर्ग किए जाते हैं। उदाहरण के लिए,

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM employees
WHERE LAST_NAME = &last_name
OR EMPLOYEE_ID = &EMPNO;

उपरोक्त चयन क्वेरी निष्पादित होने पर, oracle प्रतिस्थापन चर के रूप में '&' की पहचान करता है। यह उपयोगकर्ता को नीचे दिए गए 'last_name' और 'EMPNO' के लिए मान दर्ज करने का संकेत देता है।

Enter value for last_name:
Enter value for empno:

एक बार जब उपयोगकर्ता दोनों चर को इनपुट प्रदान करता है, तो मूल्यों को प्रतिस्थापित किया जाता है, क्वेरी को सत्यापित और निष्पादित किया जाता है।

ध्यान देने योग्य बात -

  • यदि चर का अर्थ किसी वर्ण या तिथि मान को प्रतिस्थापित करना है, तो शाब्दिक को एकल उद्धरणों में संलग्न किया जाना चाहिए। एक उपयोगी तकनीक वर्ण और तिथि मान के साथ काम करते समय एकल उद्धरणों में एम्परसैंड प्रतिस्थापन चर को घेरना है।

  • SQL डेवलपर और SQL * प्लस दोनों प्रतिस्थापन चर और DEFINE / UNDEFINE कमांड का समर्थन करते हैं। हालांकि SQL डेवलपर या SQL * प्लस उपयोगकर्ता इनपुट पर सत्यापन जांच (डेटा प्रकार को छोड़कर) का समर्थन नहीं करता है।

  • आप SQL कथन के WHERE क्लॉज में न केवल प्रतिस्थापन चर का उपयोग कर सकते हैं, बल्कि स्तंभ नाम, भाव या पाठ के प्रतिस्थापन के रूप में भी उपयोग कर सकते हैं।

डबल-एम्परसेंड प्रतिस्थापन पदार्थ का उपयोग करना

जब एक ही प्रतिस्थापन चर का उपयोग एक से अधिक स्थानों पर किया जाता है, तो उसी डेटा को फिर से दर्ज करने से बचने के लिए, हम डबल एम्पर्स प्रतिस्थापन का उपयोग करते हैं। ऐसे मामलों में, एक बार दर्ज किए गए प्रतिस्थापन चर का मूल्य, उपयोग के सभी उदाहरणों पर प्रतिस्थापित किया जाएगा।

SELECT first_name, HIRE_DATE, SEPARATION_DATE
FROM employees
WHERE HIRE_DATE LIKE '%&DT%' AND SEPARATION_DATE '%&&DT%'

ध्यान दें कि उपरोक्त क्वेरी में & DT का समान मान दो बार प्रतिस्थापित किया गया है। इसलिए, उपयोगकर्ता द्वारा दिए गए मूल्य को दो स्थानों पर प्रतिस्थापित किया जाएगा।

DEFINE और VERIFY कमांड

एक सत्र में चर की परिभाषा सेट करना SQL * प्लस की DEFINE सुविधा द्वारा निर्धारित किया गया है। चर को सत्र में परिभाषित किया जा सकता है, ताकि क्वेरी निष्पादन के दौरान ठहराव से बचा जा सके। जब भी SQL क्वेरी में सामना किया जाता है तो Oracle उसी चर को पढ़ता है। यह डिफ़ॉल्ट रूप से चालू स्थिति में है। DEFINE क्लॉज की सहायता से, कोई भी क्वेरी निष्पादन से पहले कमांड लाइन में एक चर घोषित कर सकता हैDEFINE variable=value;

सत्यापित करें कि आदेश उपरोक्त प्रतिस्थापन को OLD और NEW स्टेटमेंट के रूप में दर्शाता है। यह डिफ़ॉल्ट रूप से बंद है और इसे सेट कमांड के उपयोग पर चालू किया जा सकता है।

SQL> SET DEFINE ON
SQL> SET VERIFY ON
SQL> DEFINE NAME = MARTIN'
SQL> SELECT first_name, SALARY 
FROM employees
WHERE first_name = '&NAME';
OLD   1: select first_name, sal from employee where first_name = '&first_name'
new   1: select first_name, sal from employee where first_name = 'MARTIN'

first_name     SALARY
-------        -------
MARTIN         5000