एसक्यूएल - उप क्वेरी

एक सबक्वेरी या इनर क्वेरी या नेस्टेड क्वेरी एक अन्य SQL क्वेरी के भीतर एक क्वेरी है और जिसे WHERE क्लॉज के भीतर एम्बेड किया गया है।

एक सबक्वेरी का उपयोग डेटा को वापस करने के लिए किया जाता है जिसका उपयोग मुख्य क्वेरी में डेटा को पुनः प्राप्त करने के लिए प्रतिबंधित करने के लिए एक शर्त के रूप में किया जाएगा।

उप-प्रकार का उपयोग SELECT, INSERT, UPDATE, और DELETE कथनों के साथ किया जा सकता है जैसे =, <,>,> = =, <=, IN, BETWEEN, इत्यादि।

कुछ नियम हैं जिनका पालन करना होगा -

  • कोष्ठक के भीतर उप-विषयों को संलग्न किया जाना चाहिए।

  • सबक्लेरी में सेलेक्ट क्लॉज में केवल एक कॉलम हो सकता है, जब तक कि सबक्लेरी के मुख्य कॉलम में कई कॉलम अपने चुने हुए कॉलम की तुलना करने के लिए न हों।

  • एक आदेश द्वारा आदेश का उपयोग एक उपश्रेणी में नहीं किया जा सकता है, हालांकि मुख्य क्वेरी ORDER BY का उपयोग कर सकती है। ग्रुप BY कमांड का उपयोग एक उप-समारोह में ORDER BY के समान कार्य करने के लिए किया जा सकता है।

  • एक से अधिक पंक्ति में लौटने वाली उप-प्रक्रिया का उपयोग केवल कई मूल्य ऑपरेटरों जैसे IN ऑपरेटर में किया जा सकता है।

  • चयन सूची में उन मूल्यों का कोई संदर्भ शामिल नहीं हो सकता है जो एक BLOB, ARRAY, CLOB या NCLOB का मूल्यांकन करते हैं।

  • एक सेटक्वेरी को एक सेट फ़ंक्शन में तुरंत संलग्न नहीं किया जा सकता है।

  • BETWEEN ऑपरेटर का उपयोग एक उपश्रेणी के साथ नहीं किया जा सकता है। हालाँकि, BETWEEN ऑपरेटर का उपयोग उपकुंजी के भीतर किया जा सकता है।

चयन कथन के साथ उपश्रेणियाँ

सबक्वेरी का उपयोग अक्सर सेलेक्ट स्टेटमेंट के साथ किया जाता है। मूल वाक्य रचना इस प्रकार है -

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
   (SELECT column_name [, column_name ]
   FROM table1 [, table2 ]
   [WHERE])

उदाहरण

निम्नलिखित रिकॉर्ड वाले ग्राहक तालिका पर विचार करें -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

अब, हम एक चयन विवरण के साथ निम्न उपवर्ग की जाँच करते हैं।

SQL> SELECT * 
   FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
         FROM CUSTOMERS 
         WHERE SALARY > 4500) ;

यह निम्नलिखित परिणाम का उत्पादन करेगा।

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  5 | Hardik   |  27 | Bhopal  |  8500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

INSERT वक्तव्य के साथ उपश्रेणियाँ

उपकेंद्रों का उपयोग INSERT के बयानों के साथ भी किया जा सकता है। INSERT विवरण उपकुंजी से लौटाए गए डेटा का उपयोग किसी अन्य तालिका में सम्मिलित करने के लिए करता है। उपकुंजी में चयनित डेटा को किसी भी चरित्र, दिनांक या संख्या कार्यों के साथ संशोधित किया जा सकता है।

मूल सिंटैक्स इस प्रकार है।

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

उदाहरण

एक तालिका CUSTOMERS_BKP पर विचार करें जैसे CUSTOMERS तालिका के समान संरचना। अब CUSTOMERS_BKP तालिका में पूर्ण ग्राहक तालिका की प्रतिलिपि बनाने के लिए, आप निम्न सिंटैक्स का उपयोग कर सकते हैं।

SQL> INSERT INTO CUSTOMERS_BKP
   SELECT * FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
   FROM CUSTOMERS) ;

अद्यतन विवरण के साथ उपश्रेणियाँ

उपखंड का उपयोग अद्यतन कथन के साथ किया जा सकता है। अद्यतन के साथ एक तालिका में एकल या एकाधिक स्तंभ अद्यतन किया जा सकता है जब अद्यतन कथन के साथ।

मूल सिंटैक्स इस प्रकार है।

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

उदाहरण

मान लें, हमारे पास CUSTOMERS_BKP तालिका उपलब्ध है जो CUSTOMERS तालिका का बैकअप है। निम्न उदाहरण उन ग्राहकों के लिए ग्राहक तालिका में 0.25 गुना से सैलेरी को अद्यतन करता है, जिनका AGE 27 से अधिक या उसके बराबर है।

SQL> UPDATE CUSTOMERS
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

यह दो पंक्तियों को प्रभावित करेगा और अंत में ग्राहक तालिका में निम्नलिखित रिकॉर्ड होंगे।

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |   125.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  2125.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

DELETE कथन के साथ उपश्रेणियाँ

उपशम का उपयोग DELETE कथन के साथ संयोजन के रूप में किया जा सकता है, जैसा कि ऊपर उल्लिखित किसी भी अन्य कथन के साथ किया जा सकता है।

मूल सिंटैक्स इस प्रकार है।

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

उदाहरण

मान लें, हमारे पास CUSTOMERS_BKP तालिका उपलब्ध है जो CUSTOMERS तालिका का एक बैकअप है। निम्न उदाहरण उन सभी ग्राहकों के लिए ग्राहक तालिका से रिकॉर्ड हटा देता है, जिनका AGE 27 से अधिक या उसके बराबर है।

SQL> DELETE FROM CUSTOMERS
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

यह दो पंक्तियों को प्रभावित करेगा और अंत में ग्राहक तालिका में निम्नलिखित रिकॉर्ड होंगे।

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  2 | Khilan   |  25 | Delhi   |  1500.00 |
|  3 | kaushik  |  23 | Kota    |  2000.00 |
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  6 | Komal    |  22 | MP      |  4500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+