अध्याय 01 क्वेरी और SQL फ़ंक्शन

“कोई भी अनोखी छवि जिसकी आप कल्पना करते हैं, शायद पहले से ही इंटरनेट पर या किसी डेटाबेस में मौजूद है… आज की समस्या यह नहीं रही कि सही छवि कैसे बनाई जाए, बल्कि यह है कि पहले से मौजूद छवि को कैसे खोजा जाए”

— लेव मैनोविच

1.1 परिचय

कक्षा ग्यारह में हमने डेटाबेस की अवधारणाओं को समझा और MySQL का उपयोग करके डेटाबेस बनाना सीखा। हमने यह भी सीखा कि SQL क्वेरीज़ का उपयोग करके डेटाबेस में डेटा को कैसे भरा, हेरफेर किया और प्राप्त किया जाए।

इस अध्याय में हम कुछ और SQL कमांड सीखने जा रहे हैं जो डेटाबेस में विभिन्न प्रश्नों को करने के लिए आवश्यक हैं। हम समझेंगे कि सिंगल रो फंक्शन, मल्टीपल रो फंक्शन, रिकॉर्�्ड्स को आरोही या अवरोही क्रम में व्यवस्थित करना, किसी मानदंड के आधार पर रिकॉर्ड्स को समूहित करना और SQL का उपयोग करके कई टेबलों पर कार्य करना कैसे किया जाता है।

आइए एक CARSHOWROOM नामक डेटाबेस बनाएं, जिसकी स्कीमा चित्र 1.1 में दिखाई गई है। इसमें निम्नलिखित चार संबंध हैं:

  • INVENTORY: शोरूम के इन्वेंटरी में मौजूद प्रत्येक कार का नाम, मूल्य, मॉडल, निर्माण वर्ष और ईंधन प्रकार संग्रहीत करता है,
  • CUSTOMER: प्रत्येक ग्राहक की ग्राहक आईडी, नाम, पता, फोन नंबर और ईमेल संग्रहीत करता है,
  • SALE: बिक्री की चालान संख्या, कार आईडी, ग्राहक आईडी, बिक्री तिथि, भुगतान का तरीका, बिक्री कर्मचारी की आईडी और बेची गई कार की बिक्री मूल्य संग्रहीत करता है,
  • EMPLOYEE: शोरूम में प्रत्येक कर्मचारी की कर्मचारी आईडी, नाम, जन्म तिथि, शामिल होने की तिथि, पद और वेतन संग्रहीत करता है।

चित्र 1.1: डेटाबेस CARSHOWROOM का स्कीमा आरेख

चार संबंधों के रिकॉर्ड क्रमशः तालिकाओं $1.1,1.2,1.3$ और 1.4 में दिखाए गए हैं।

तालिका 1.1 Inventory

mysql>SELECT * FROM INVENTORY;

CarldCarNamePriceModelYearManufactureFueltype
D001कार 1582613.00LXI2017पेट्रोल
D002कार 1673112.00VXI2018पेट्रोल
B001कार 2567031.00सिग्मा 1.22019पेट्रोल
B002कार 2647858.00डेल्टा 1.22018पेट्रोल
E001कार 3355205.005 STR STD2017CNG
E002कार 3654914.00CARE2018CNG
S001कार 4514000.00LXI2017पेट्रोल
S002कार 4614000.00VXI2018पेट्रोल

8 पंक्तियाँ सेट में (0.00 सेकंड)

तालिका 1.2 CUSTOMER

mysql>SELECT * FROM CUSTOMER;

CustIdCustNameCustAddPhoneEmail
C0001अमित साहाL-10, पीतमपुरा4564587857$\text{amitsaha2@mail.com}$
C0002रेहनुमाJ-12, साकेत5527688761$\text{rehnuma@hotmail.com}$
C0003चार्वी नायर10/9, FF, रोहिणी6811635425$\text{charvi123@yahoo.com}$
C0004गुरप्रीतA-10/2, SF, मयूर विहार3511056125$\text{gursingh@yahoo.com}$

4 rows in set $(0.00 \mathrm{sec})$

mysql>SELECT * FROM SALE;

तालिका 1.3 SALE

InvoiceNoCarIdCustIdSaleDatePaymentModeEmpIDSalePrice
I00001D001c00012019-01-24credit cardE004613247.00
I00002s001c00022018-12-12onlineE001590321.00
I00003s002c00042019-01-25I ChequeE010604000.00
I00004D002c00012018-10-15Bank FinanceE007659982.00
I00005E001c00032018-12-20Credit cardE002369310.00
I00006s002c00022019-01-30Bank FinanceE007620214.00

6 rows in set $(0.00 \mathrm{sec})$

mysql>SELECT * FROM EMPLOYEE;

तालिका 1.4 EMPLOYEE

EmpIdEmp NameDOBDOJDesignationSalary
E001Rushi1994-07-102017-12-12Sal esman25550
E0O2Sanjay1990-03-122016-06-05Sal esman33100
E0O3Zohar1975-08-301999-01-08Peon20000
E004Arpit1989-06-062010-12-02Sal esman39100
E006Sanjucta1985-11-032012-07-01Receptionist27350
E007Mayank1993-04-032017-01-01Sal es man27352
E010Raj kumar1987-02-262013-10-23Sal es man31111

1.2 SQL में फंक्शन

हम जानते हैं कि एक फंक्शन किसी विशेष कार्य को करने के लिए उपयोग किया जाता है और यह परिणामस्वरूप शून्य या अधिक मान लौटाता है। SQL क्वेरी लिखते समय भी फंक्शन उपयोगी होते हैं। फंक्शन किसी टेबल के एक या अनेक रिकॉर्ड (पंक्तियों) पर काम करने के लिए लगाए जा सकते हैं। एक या अनेक पंक्तियों में उनके उपयोग के आधार पर, SQL फंक्शनों को सिंगल रो फंक्शन और एग्रीगेट फंक्शन के रूप में वर्गीकृत किया गया है।

1.2.1 सिंगल रो फंक्शन

इन्हें स्केलर फंक्शन भी कहा जाता है। सिंगल रो फंक्शन एक एकल मान पर लागू होते हैं और एक एकल मान लौटाते हैं। चित्र 1.2 तीन श्रेणियों—संख्यात्मक (गणित), स्ट्रिंग, दिनांक और समय—के अंतर्गत विभिन्न सिंगल रो फंक्शनों की सूची देता है।

गणित फंक्शन इनपुट के रूप में संख्यात्मक मान लेते हैं और परिणामस्वरूप संख्यात्मक मान लौटाते हैं। स्ट्रिंग फंक्शन इनपुट के रूप में वर्ण मान लेते हैं और आउटपुट के रूप में वर्ण या संख्यात्मक मान लौटाते हैं। दिनांक और समय फंक्शन इनपुट के रूप में दिनांक और समय मान लेते हैं और आउटपुट के रूप में संख्यात्मक या स्ट्रिंग, या दिनांक और समय मान लौटाते हैं।

चित्र 1.2: SQL में सिंगल रो फंक्शनों की तीन श्रेणियाँ

(A) संख्यात्मक फंक्शन

तीन सामान्यतः प्रयुक्त संख्यात्मक फंक्शन POWER(), ROUND() और MOD() हैं। इनका उपयोग और सिंटैक्स तालिका 1.5 में दिया गया है।

तालिका 1.5 गणित फंक्शन

फलनविवरणउदाहरण सहित आउटपुट
POWER(X,Y) इसे POW(X,Y) भी लिखा जा सकता है$\mathrm{X}$ को घात Y पर गणना करता है।mysql>SELECT POWER $(2,3)$;
आउटपुट: 8
ROUND(N,D)संख्या $N$ को $D$ दशमलव स्थानों तक राउंड करता है।
नोट: यदि $D=0$ है, तो यह संख्या को निकटतम पूर्णांक तक राउंड करता है।
mysql>SELECT ROUND(2912.564, 1);
आउटपुट: 2912.6
mysql> SELECT ROUND(283.2);
आउटपुट: 283
$\operatorname{MOD}(\mathrm{A}, \mathrm{B})$संख्या A को संख्या B से विभाजित करने के बाद शेषफल लौटाता है।mysql>SELECT $\operatorname{MOD}(21,2)$;
आउटपुट: 1

उदाहरण 1.1

बिक्री बढ़ाने के लिए, मान लीजिए कार डीलर अपने ग्राहकों को कुल राशि को 10 आसान ईएमआई (समान मासिक किस्तों) में चुकाने की पेशकश करने का निर्णय लेता है। मान लीजिए कि ईएमआई 10,000 के गुणकों में होनी चाहिए। इसके लिए, डीलर इन्वेंटरी तालिका से निम्नलिखित डेटा के साथ CarID और Price सूचीबद्ध करना चाहता है:

a) GST की गणना Price का $12 %$ के रूप में करें और परिणाम को एक दशमलव स्थान तक राउंड करके प्रदर्शित करें। mysql> SELECT ROUND(12/100*Price,1) “GST” FROM INVENTORY;

GST
69913.6
80773.4
68043.7
77743.0
42624.6
78589.7
61680.0
73680.0

b) इन्वेंटरी तालिका में एक नया कॉलम FinalPrice जोड़ें, जिसका मान Price और $12 %$ GST के योग के रूप में होगा।

mysq|>SELECT * FROM I NVENTORY;ADD FinalPrice Numeric(10,1);

Query OK, 8 rows affected (0.03 sec)

रिकॉर्ड्स: 8 डुप्लिकेट्स: 0 चेतावनियाँ: 0

mysql> UPDATE INVENTORY SET

FinalPrice=Price+Round(Price*12/100,1);

Query OK, 8 पंक्तियाँ प्रभावित (0.01 sec)

पंक्तियाँ मिलीं: 8 बदली गईं: 8 चेतावनियाँ: 0

mysql> SELECT * FROM INVENTORY;

CarIdCarNamePriceModelYearManufactureFuel TypeFinal Pric
D001कार 1582613.00LXI2017पेट्रोल652526.6
D002कार 1673112.00VXI2018पेट्रोल753885.4
B001कार 2567031.00सिग्मा 1.22019पेट्रोल635074.7
B002कार 2647858.00डेल्टा 1.22018पेट्रोल725601.0
E001आई कार 3355205.005STR STD2017CNG397829.6
E002आई कार 3654914.00CARE2018CNG733503.7
S001कार 4514000.00LXI2017पेट्रोल575680.0
5002कार 4614000.00VXI2018पेट्रोल687680.0

8 पंक्तियाँ सेट में $(0.00 \mathrm{sec})$

c) प्रत्येक महीने देय राशि की गणना करें और प्रदर्शित करें (1000 के गुणकों में), जिसकी गणना कार की FinalPrice को 10 किस्तों में विभाजित करने के बाद की जानी है।

d) राशि को EMIs में विभाजित करने के बाद, मॉड्यूलर डिवीज़न करके तुरंत देय शेष राशि ज्ञात करें।

उपरोक्त समस्याओं को हल करने के लिए निम्न SQL क्वेरी का उपयोग किया जा सकता है:

mysql> select Carld, Finalprice, ROUND( (Finalprice-

MOD(FinalPrice, 10000)/(10,0) “EMI “, MOD(FinalPrice, 10000) “Remaining Amount " FROM I NVENTORY:

कारआईडीअंतिम मूल्यईएमआईशेष राशि
D001652526.6650002526.6
D002753885.4750003885.4
B001635074.7630005074.7
B002725601.0720005601.0
E001397829.6390007829.6
E002733503.7730003503.7
S001575680.0570005680.0
S002687680.0680007680.0

उदाहरण 1.2

a) आइए अब SALE टेबल में एक नया कॉलम Commission जोड़ें। कॉलम Commission की कुल लंबाई 7 होनी चाहिए जिसमें 2 दशमलव स्थान हों।

mysql> ALTER TABLE SALE ADD(Commission Numeric $(7,2))$;

Query OK, 6 rows affected $(0.34 \mathrm{sec})$

Records: 6 Duplicates: O Warnings: 0

b) आइए अब बिक्री एजेंटों के लिए कमीशन की गणना SalePrice का 12 प्रतिशत के रूप में करें, नव जोड़े गए कॉलम Commission में मान डालें और फिर SALE टेबल के उन रिकॉर्ड्स को प्रदर्शित करें जहाँ commission $>73000$ है।

mysql> UPDATE SALE SET

Commission $=12 / 100 *$ SalePrice;

Query OK, 6 rows affected $(0.06 \mathrm{sec})$

Rows matched: 6 Changed: 6 Warnings: 0

mysql> SELECT * FROM SALE WHERE Commission > 73000;

invoicenocaridcustidsaledatepaymentmodeempidsalepriceCommission
I00001D001C00012019-01-24Credit CardE004613247.0073589.64
I0000D002C00012018-10-15Bank FinanceE007659982.0079197.84
I00006S002C00022019-01-30Bank FinanceE007620214.0074425.68

c) InvoiceNo, SalePrice और Commission प्रदर्शित करें जिससे कि कमीशन मान 0 तक राउंड हो।

mysql > SELECT InvoiceNo, SalePrice, Round(Commission, 0) FROM SALE;

I00001613247.0073590
I00002590321.0070839
I00003604000.0072480
I00004659982.0079198
I00005369310.0044317
I00006620214.0074426

गतिविधि 1.1

CARSHOWROOM डेटाबेस की SALE तालिका का उपयोग करते हुए, निम्नलिखित के लिए SQL क्वेरीज़ लिखें:

a) InvoiceNo और शून्य दशमलव स्थानों तक राउंड किया गया कमीशन मान प्रदर्शित करें।

b) उन SALE के विवरण प्रदर्शित करें जहाँ भुगतान मोड क्रेडिट कार्ड है।

(B) स्ट्रिंग फंक्शन्स

स्ट्रिंग फंक्शन्स अल्फान्यूमेरिक डेटा पर विभिन्न संचालन कर सकते हैं जो एक तालिका में संग्रहीत हैं। इनका उपयोग केस बदलने (अपरकेस से लोअरकेस या इसके विपरीत), सबस्ट्रिंग निकालने, स्ट्रिंग की लंबाई गणना करने आदि के लिए किया जा सकता है। स्ट्रिंग फंक्शन्स और उनके उपयोग को तालिका 1.6 में दिखाया गया है।

तालिका 1.6 स्ट्रिंग फंक्शन्स

फंक्शनविवरणउदाहरण सह आउटपुट
UCASE(string)
OR
UPPER(string)
स्ट्रिंग को अपरकेस में बदलता है।mysqI > SELECT
UCASE( “Informatics Practices”):
Output: I NFORMATICS PRACTICES
LOWER(string)
OR
LCASE(string)
स्ट्रिंग को लोअरकेस में बदलता है।mysql > SELECT
LOWER( “Informatics Practices”):
Output: informatics practices
MID(string, pos, n)
OR
SUBSTRING(string, pos, n)
OR
SUBSTR(string, pos, n)
स्ट्रिंग के निर्दिष्ट स्थान (pos) से शुरू होकर आकार $n$ का उप-स्ट्रिंग लौटाता है। यदि $n$ निर्दिष्ट नहीं है, तो यह स्थान pos से स्ट्रिंग के अंत तक का उप-स्ट्रिंग लौटाता है।mysql> SELECT
MID(“Informatics”, 3, 4);
Output:form
mysql>SELECT
MID(‘Informatics’,7);
Output: atics
LENGTH(string)निर्दिष्ट स्ट्रिंग में वर्णों की संख्या लौटाता है।mysqI > SELECT
LENGTH( “Informatics”);
Output: 11
LEFT(string, N)स्ट्रिंग के बाईं ओर से $N$ संख्या के वर्ण लौटाता है।mysql > SELECT
LEFT( “Computer”, 4$) ;$
Output: Comp
RIGHT(string, N)स्ट्रिंग के दाईं ओर से $N$ संख्या के वर्ण लौटाता है।mysqI> SELECT
RIGHT(“SCIENCE”, 3 );
Output: NCE
INSTR(string, substring)दी गई स्ट्रिंग में उप-स्ट्रिंग की पहली उपस्थिति का स्थान लौटाता है। यदि उप-स्ट्रिंग स्ट्रिंग में मौजूद नहीं है तो 0 लौटाता है।mysql > SELECT
INSTR( “Informatics”, “ma”):
Output: 6
LTRIM(string)अग्रस्थ (leading) सफेद स्थान वर्णों को हटाने के बाद दी गई स्ट्रिंग लौटाता है।mysql>SELECT LENGTH(“DELHI”), LENGTH(LTRIM(“ DELHI”));
Output: alt text
RTRIM(string)अनुस्थ (trailing) सफेद स्थान वर्णों को हटाने के बाद दी गई स्ट्रिंग लौटाता हैmysql>SELECT LENGTH(“PEN “) LENGTH(RTRIM(“PEN “));
Output: alt text
TRIM(string)अग्रस्थ और अनुस्थ दोनों सफेद स्थान वर्णों को हटाने के बाद दी गई स्ट्रिंग लौटाता हैmysql> SELECT LENGTH(“ MADAM “),LENGTH(TRIM(“ MADAM “));
Output: alt text

उदाहरण 1.3

आइए CUSTOMER संबंध का उपयोग करें जो तालिका 1.2 में दिखाया गया है ताकि स्ट्रिंग फ़ंक्शनों के काम को समझा जा सके।

a) तालिका CUSTOMER से ग्राहक नाम को लोअर केस और ग्राहक ईमेल को अपर केस में प्रदर्शित करें।
mysql > SELECT LOWER(CustName), UPPER(Email) FROM CUSTOMER;

LOWER(CustName)UPPER(Email)
amitsaha$\text{AMITSAHA2@GMAIL.COM}$
rehnuma$\text{REHNUMA@HOTMAIL.COM}$
charvinayyar$\text{CHARVI123@YAHOO.COM}$
gurpreet$\text{GURSINGH@YAHOO.COM}$

गतिविधि 1.2

CARSHOWROOM डेटाबेस की तालिका INVENTORY का उपयोग करते हुए, निम्नलिखित के लिए SQL क्वेरीज़ लिखें:

a) यदि CarMake का मान अक्षर ’ $\mathrm{B}$ ’ से शुरू होता है तो उसे अपरकेस में बदलें।

b) यदि कार के मॉडल की लंबाई 4 से अधिक है तो Model विशेषता से स्थिति 3 से अंत तक सबस्ट्रिंग प्राप्त करें।

b) ईमेल की लंबाई और ईमेल आईडी से ’ $a$ ’ वाले वर्ण से पहले वाला भाग प्रदर्शित करें। ध्यान दें - ’ $a$ ’ को प्रिंट न करें।
mysql > SELECT LENGTH(Email), LEFT(Email, INSTR(Email,”@”)-1) FROM CUSTOMER;

LENGTH(Email)LEFT(Email, INSTR(Email,”@")-1)
19amitsaha2
19rehnuma
19charvi123
19gur_singh

4 पंक्तियाँ सेट में $(0.03 \mathrm{sec})$

INSTR फ़ंक्शन ईमेल पते में " $a$ " की स्थिति लौटाएगा। इसलिए “@” के बिना ईमेल आईडी प्रिंट करने के लिए हमें स्थिति - 1 का उपयोग करना होगा।

गतिविधि 1.3

CARSHOWROOM डेटाबेस की EMPLOYEE टेबल का उपयोग करते हुए, निम्नलिखित के लिए SQL क्वेरीज़ लिखें:

a) कर्मचारी का नाम और उसके EmpId के अंतिम 2 अक्षर प्रदर्शित करें।

b) कर्मचारी का पदनाम और पदनाम में ’ $\mathrm{e}$ ’ अक्षर की स्थिति प्रदर्शित करें, यदि मौजूद हो।

c) मान लें कि चार अंकों का क्षेत्र कोड मोबाइल नंबर में स्थिति संख्या 3 से शुरू होकर दिखाई देता है। उदाहरण के लिए, 4726309212 मोबाइल नंबर का क्षेत्र कोड 2630 है। अब, Rohini में रहने वाले ग्राहक का क्षेत्र कोड प्रदर्शित करने के लिए SQL क्वेरी लिखें।

mysql> SELECT MID(Phone, 3,4) FROM CUSTOMER WHERE Custadd like ‘%Rohini %’ ;

MID(Phone,3,4)
1163

1 row in set (0.00 sec)

d) ग्राहकों के ईमेल से डोमेन नाम एक्सटेंशन “.com” हटाकर ईमेल प्रदर्शित करें। mysql> SELECT TRIM( “. com” from Email) FROM CUSTOMER;

TRIM(".com" FROM Email)
amitsaha2@gmail
rehnuma@hotmail
charvi123@yahoo
gur_singh@yahoo

4 rows in set (0.00 sec)

e) केवल yahoo ईमेल वाले सभी ग्राहकों के विवरण प्रदर्शित करें।

mysql> SELECT * FROM CUSTOMER WHERE Email LIKE

“%yahoo%” ;

Cust I DCust NameCustAddPhoneE ma i I
C0OO3Charvi Nayyar$10 / 9$, FF, Rohini6811635425$\text{charvi123@yahoo.com}$
COOO4GurpreetA- $10 / 2, S F$, MayurVihar3511056125$\text{gursingh@yahoo.com}$

2 rows in set (0.00 sec)t

(C) दिनांक और समय फंक्शन

विभिन्न फंक्शन होते हैं जो दिनांक और समय डेटा पर संचालन करने के लिए उपयोग किए जाते हैं। कुछ संचालनों में वर्तमान दिनांक दिखाना, दिनांक के प्रत्येक तत्व (दिन, माह और वर्ष) को निकालना, सप्ताह का दिन दिखाना आदि शामिल हैं। तालिका 1.7 विभिन्न दिनांक और समय फंक्शनों को समझाती है।

तालिका 1.7 दिनांक फंक्शन

फंक्शनविवरणउदाहरण सहित आउटपुट
NOW()यह वर्तमान सिस्टम दिनांक और समय लौटाता है।mysql > SELECT NOW();
आउटपुट: 2019-07-11 19:41:17
DATE()यह दी गई दिनांक/समय अभिव्यक्ति से दिनांक भाग लौटाता है।mysql> SELECT DATE(NOW());
आउटपुट: 2019-07-11
MONTH(date)यह दिनांक से माह को संख्यात्मक रूप में लौटाता है।mysql > SELECT MONTH(NOW());
आउटपुट: 7
MONTHNAME(date)यह निर्दिष्ट दिनांक से माह का नाम लौटाता है।mysqI > SELECT
MONTHNAME(“2003-11-28”)
आउटपुट: November
YEAR(date)यह दिनांक से वर्ष लौटाता है।mysql> SELECT YEAR( “2003-10-03”);
आउटपुट: 2003
DAY(date)यह दिनांक से दिन भाग लौटाता है।mysql> SELECT DAY(“2003-03-24”);
आउटपुट: 24
DAYNAME(date)यह दिनांक से दिन का नाम लौटाता है।mysqI > SELECT
DAYNAME(“2019-07-11”)
आउटपुट: Thursday

उदाहरण 1.4

आइए CARSHOWROOM डेटाबेस की EMPLOYEE तालिका का उपयोग करके कुछ दिनांक और समय फंक्शनों के कार्य को दिखाते हैं।

a) सभी कर्मचारियों के जुड़ने का दिन, माह संख्या और वर्ष चुनें।

mysql > SELECT DAY(DOJ), MONTH(DOJ), YEAR(DOJ) FROM EMPLOYEE;

DAY(DOJ)MONTH(DOJ)YEAR(DOJ)
12122017
562016
811999
2122010
172012
112017
23102013

7 rows in set (0.03 sec)

गतिविधि 1.4

CARSHOWROOM डेटाबेस की EMPLOYEE टेबल का उपयोग करते हुए, उन सभी कर्मचारियों की जन्म का दिन सूचीबद्ध करें जिनका वेतन 25000 से अधिक है।

b) यदि जॉइनिंग की तारीख रविवार नहीं है, तो इसे निम्नलिखित प्रारूप में प्रदर्शित करें “Wednesday, 26, November, 1979.”

सोचिए और विचार कीजिए

क्या हम अंकगणितीय संचालकों $\left(+,-.{ }^{*}\right.$, or /) का उपयोग डेटा फंक्शनों पर कर सकते हैं?

mysql> SELECT DAYNAME(DOJ), DAY(DOJ),

MONTHNAME(DOJ), YEAR(DOJ) FROM EMPLOYEE WHERE

DAYNAME(DOJ)!=‘Sunday’;

DAYNAME(DOJ)DAY(DOJ)MONTHNAME(DOJ)YEAR(DOJ)
Tuesday12December2017
Friday8January1999
Thursday2December2010
Wednesday23October2013

4 rows in set (0.00 sec)

1.2.2 समष्टि फंक्शन

समष्टि फंक्शनों को बहु-पंक्ति फंक्शन भी कहा जाता है। ये फंक्शन रिकॉर्ड्स के एक समूह पर समग्र रूप से कार्य करते हैं और जिस स्तंभ पर फंक्शन लागू किया जाता है, उसके प्रत्येक स्तंभ के लिए एकल मान लौटाते हैं। तालिका 1.8 एकल पंक्ति फंक्शन और बहु-पंक्ति फंक्शन के बीच अंतर दिखाती है। तालिका 1.9 कुछ समष्टि फंक्शनों और उनके उपयोग का वर्णन करती है। ध्यान दें कि स्तंभ संख्यात्मक प्रकार का होना चाहिए।

तालिका 1.8 एकल पंक्ति और बहु-पंक्ति फ़ंक्शनों के बीच अंतर

एकल_पंक्ति फ़ंक्शनबहु-पंक्ति फ़ंक्शन
1. यह एक समय में एकल पंक्ति पर संचालित होता है।1. यह पंक्तियों के समूहों पर संचालित होता है।
2. यह प्रति पंक्ति एक परिणाम देता है।2. यह पंक्तियों के एक समूह के लिए एक परिणाम देता है।
3. इसे Select, Where और Order by क्लॉज़ में उपयोग किया जा सकता है।3. इसे केवल select क्लॉज़ में उपयोग किया जा सकता है।
4. गणित, स्ट्रिंग और दिनांक फ़ंक्शन एकल पंक्ति फ़ंक्शन के उदाहरण हैं।4. Max(), Min(), Avg(), Sum(), Count() और Count(*) बहु-पंक्ति फ़ंक्शन के उदाहरण हैं।

तालिका 1.9 SQL में एग्रीगेट फ़ंक्शन

फंक्शनविवरणउदाहरण सहित आउटपुट
MAX(column)निर्दिष्ट कॉलम से सबसे बड़ा मान लौटाता है।mysqI > SELECT MAX(Price) FROM I NVENTORY;
आउटपुट: 673112.00
MIN(column)निर्दिष्ट कॉलम से सबसे छोटा मान लौटाता है।mysqI > SELECT MIN(Price) FROM I NVENTORY;
आउटपुट: 355205.00
AVG(column)निर्दिष्ट कॉलम में मौजूद मानों का औसत लौटाता है।mysqI > SELECT AVG(Price) FROM I NVENTORY;
आउटपुट: 576091.625000
SUM(column)निर्दिष्ट कॉलम के मानों का योग लौटाता है।mysqI > SELECT SUM(Price) FROM I NVENTORY;
आउटपुट: 4608733.00
COUNT(column)निर्दिष्ट कॉलम में मौजूद मानों की संख्या NULL मानों को छोड़कर लौटाता है।
नोट: इस उदाहरण में मान लीजिए कि MANAGER टेबल में दो ऐट्रिब्यूट और चार रिकॉर्ड हैं।
alt text
mysql> SELECT COUNT(MEMNAME)
FROM MANAGER;
alt text
COUNT $(*)$टेबल में मौजूद रिकॉर्ड्स की संख्या लौटाता है।
नोट: टेबल में किसी विशेष मानदंड से मेल खाने वाले रिकॉर्ड्स की संख्या दिखाने के लिए हमें COUNT(*) के साथ WHERE क्लॉज़ का उपयोग करना होगा।
mysql> SELECT COUNT(*) from MANAGER
आउटपुट: alt text

उदाहरण 1.5

a) तालिका INVENTORY से उन रिकॉर्ड्स की कुल संख्या प्रदर्शित करें जिनमें मॉडल VXI है।

mysql>SELECT COUNT(*) FROM INVENTORY WHERE

Model = “VXI”;

COUNT(*)
2

1 row in set (0.00 sec)

b) तालिका INVENTORY से उपलब्ध विभिन्न प्रकार के मॉडल्स की कुल संख्या प्रदर्शित करें।

mysql> SELECT COUNT(DISTINCT Model) FROM INVENTORY;

COUNT(DISTINCT MODEL)
6

1 row in set (0.09 sec)

गतिविधि 1.5

a) तालिका SALE से उस ग्राहक द्वारा खरीदी गई कारों के विक्रय मूल्य का योग निकालें जिसकी आईडी C0001 है।

b) तालिका SALE से अधिकतम और न्यूनतम कमीशन ज्ञात करें।

c) तालिका INVENTORY से सभी LXI मॉडल की कारों की औसत कीमत प्रदर्शित करें।

mysql>SELECT AVG(Price) FROM INVENTORY WHERE

Model = “LXI”;

AVG(Price)
548306.500000

1 row in set (0.03 sec)

1.3 SQL में GROUP BY

कभी-कभी हमें किसी कॉलम में सामान्य मानों के आधार पर पंक्तियों के समूह को प्राप्त करने की आवश्यकता होती है। यह GROUP BY क्लॉज़ का उपयोग करके किया जा सकता है। यह उन पंक्तियों को एक साथ समूहित करता है जिनमें निर्दिष्ट कॉलम में समान मान होते हैं। हम समूहित मानों पर कार्य करने के लिए एग्रीगेट फंक्शन्स (COUNT, MAX, MIN, AVG और SUM) का उपयोग कर सकते हैं। SQL में HAVING क्लॉज़ का उपयोग GROUP BY क्लॉज़ के साथ पंक्तियों पर शर्तें निर्दिष्ट करने के लिए किया जाता है।

CARSHOWROOM डेटाबेस से SALE तालिका पर विचार करें:

mysql> SELECT * FROM SALE;

InvoiceNoCarIdCustIdSaleDatePaymentModeEmpIDSalePriceCommission
I00001D001C00012019-01-24क्रेडिट कार्डE004613247.0073589.64
I00002S001C00022018-12-12ऑनलाइनE001590321.0070838.52
I00003S002C00042019-01-25चेकE010604000.0072480.00
I00004D002C00012018-10-15बैंक फाइनेंसE007659982.0079197.84
I00005E001C00032018-12-20क्रेडिट कार्डE002369310.0044317.20
I00006S002C00022019-01-30बैंक फाइनेंसE007620214.0074425.68

6 rows in set (0.11 sec)

CarID, CustID, SaleDate, PaymentMode, EmpID, SalePrice वे कॉलम हैं जिनमें समान मान वाली पंक्तियाँ हो सकती हैं। इसलिए इन कॉलमों पर GROUP BY क्लॉज़ का उपयोग किया जा सकता है ताकि किसी विशेष प्रकार (कॉलम) के रिकॉर्ड्स की संख्या ज्ञात की जा सके, या प्रत्येक कार प्रकार की कीमत का योग निकाला जा सके।

उदाहरण 1.6

a) SALE टेबल से प्रत्येक ग्राहक द्वारा खरीदी गई कारों की संख्या प्रदर्शित करें।

mysql > SELECT CustID, COUNT(*) “Number of Cars”

FROM SALE GROUP BY CustID;

CustIDNumber of Cars
C00012
C00022
C00031
C00041

4 rows in set (0.00 sec)

b) ग्राहक आईडी और खरीदी गई कारों की संख्या प्रदर्शित करें यदि ग्राहक ने SALE टेबल से 1 से अधिक कार खरीदी हैं।

mysql> SELECT CustID, COUNT(*) FROM SALE GROUP BY

CustID HAVING COUNT(*) >1;

CustIDCOUNT(*)
C00012
C00022

2 rows in set (0.30 sec)

गतिविधि 1.6

a) प्रत्येक कर्मचारी द्वारा बेची गई कुल कारों की सूची बनाएं।

b) प्रत्येक कर्मचारी द्वारा की गई अधिकतम बिक्री की सूची बनाएं।

c) SALE तालिका से प्रत्येक भुगतान विधि की श्रेणी में लोगों की संख्या प्रदर्शित करें।

mysql > SELECT PaymentMode, COUNT (Payment Mode) FROM SALE GROUP BY Paymentmode ORDER BY Paymentmode;

PaymentModeCount(PaymentMode)
Bank Finance2
Cheque1
Credit Card2
Online1

4 rows in set (0.00 sec)

d) वह PaymentMode और उस विधि से एक से अधिक बार किए गए भुगतानों की संख्या प्रदर्शित करें जिनमें एक से अधिक बार भुगतान हुए हों।

mysql > SELECT PaymentMode, Count (PaymentMode) FROM SALE GROUP BY Paymentmode HAVI NG COUNT(*) >1 ORDER

PaymentModeCount(PaymentMode)
Bank Finance2
Credit Card2

2 rows in set (0.00 sec)

1.4 संबंधों पर संचालन

हम संबंधों पर कुछ संचालन जैसे यूनियन, इंटरसेक्शन और सेट डिफरेंस कर सकते हैं ताकि दो तालिकाओं के टपल्स को मिलाया जा सके। ये तीनों संचालन द्विआधारी संचालन हैं क्योंकि ये दो तालिकाओं पर कार्य करते हैं। यहाँ ध्यान दें कि ये संचालन तभी लागू किए जा सकते हैं जब दोनों संबंधों में गुणों की समान संख्या हो और दोनों तालिकाओं में संगत गुणों का डोमेन समान हो।

1.4.1 यूनियन (U)

यह संचालन दो तालिकाओं की चयनित पंक्तियों को एक साथ जोड़ने के लिए उपयोग किया जाता है। यदि कुछ पंक्तियाँ दोनों तालिकाओं में समान हैं, तो यूनियन संचालन का परिणाम उन पंक्तियों को केवल एक बार दिखाएगा। चित्र 1.3 दो सेटों का यूनियन दिखाता है।

चित्र 1.3: दो समुच्चयों का यूनियन

आइए दो संबंधों DANCE और MUSIC पर विचार करें जो क्रमशः तालिकाओं 1.10 और 1.11 में दिखाए गए हैं।

तालिका 1.10 DANCE

SNoNameClass
1Aastha7A
2Mahira6A
3Mohit7B
4Sanjay7A

तालिका 1.11 MUSIC

SNoNameClass
1Mehak8A
2Mahira6A
3Lavanya7A
4Sanjay7A
5Abhay8A

यदि हमें किसी भी एक कार्यक्रम में भाग लेने वाले विद्यार्थियों की सूची चाहिए, तो हमें संबंधों DANCE और MUSIC पर यूनियन संक्रिया (प्रतीक U द्वारा दर्शाई गई) लगानी होगी। यूनियन संक्रिया का आउटपुट तालिका 1.12 में दिखाया गया है।

तालिका 1.12 DANCE $\cup$ MUSIC

SNoNameClass
1Aastha7A
2Mahira6A
3Mohit7B
4Sanjay7A
1Mehak8A
3Lavanya7A
5Abhay8A

1.4.2 INTERSECT ( )

इंटरसेक्ट संक्रिया दो तालिकाओं से सामान टपल प्राप्त करने के लिए प्रयोग की जाती है और इसे प्रतीक $\cap$ द्वारा दर्शाया जाता है। चित्र 1.4 दो समुच्चयों का इंटरसेक्शन दिखाता है।

चित्र 1.4: दो समुच्चयों का सर्वनिष्ठ (Intersection)

मान लीजिए हमें उन विद्यार्थियों की सूची प्रदर्शित करनी है जो दोनों आयोजनों (DANCE और MUSIC) में भाग ले रहे हैं, तो इन दो तालिकाओं पर सर्वनिष्ठ संक्रिया लागू की जाएगी। INTERSECT संक्रिया का आउटपुट तालिका 1.13 में दिखाया गया है।

तालिका 1.13 DANCE MUSIC

SNoNameClass
2Mahira6A
4Sanjay7A

1.4.3 MINUS (-)

यह संक्रिया उन टपल/पंक्तियों को प्राप्त करने के लिए प्रयोग की जाती है जो पहली तालिका में हैं परंतु दूसरी तालिका में नहीं हैं, और इस संक्रिया को चिह्न - (माइनस) द्वारा दर्शाया जाता है। चित्र 1.5 दो समुच्चयों के बीच माइनस संक्रिया (जिसे सेट अंतर भी कहा जाता है) को दर्शाता है।

चित्र 1.5: दो समुच्चयों का अंतर

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

तालिका 1.14 DANCE - MUSIC

SNoNameClass
1Mehak8A
3Lavanya7A
5Abhay8A

1.4.4 कार्तीय गुणन

कार्तीय गुणन संचालन दो संबंधों से टपलों को संयोजित करता है। यह दो इनपुट संबंधों से सभी पंक्ति युग्मों को परिणामस्वरूप देता है, चाहे उनके पास सामान्य गुणों पर समान मान हों या न हों। इसे ’ $\mathrm{X}$ ’ द्वारा दर्शाया जाता है।

परिणामी संबंध की घाता उन दोनों संबंधों की घाताओं के योग के रूप में गणना की जाती है जिन पर विचार किया जा रहा है। परिणामी संबंध की कार्डिनैलिटी उन संबंधों की कार्डिनैलिटी के गुणनफल के रूप में गणना की जाती है जिन पर कार्तीय गुणन लागू किया गया है। आइए संबंधों DANCE और MUSIC का उपयोग कर कार्तीय गुणन के आउटपुट को दिखाएँ। ध्यान दें कि दोनों संबंध घाता 3 के हैं। संबंधों DANCE और MUSIC की कार्डिनैलिटी क्रमशः 4 और 5 है। इन दो संबंधों पर कार्तीय गुणन लागू करने से घाता 6 और कार्डिनैलिटी 20 वाला एक संबंध परिणामस्वरूप मिलेगा, जैसा कि तालिका 1.15 में दिखाया गया है।

तालिका 1.15 DANCE X MUSIC

क्रम संनामकक्षाक्रम संनामकक्षा
1आस्था7A1मेहक8A
2महिरा6A1मेहक8A
3मोहित7B1मेहक8A
4संजय7A1मेहक8A
1आस्था7A2महिरा6A
2महिरा6A2महिरा6A
3मोहित7B2महिरा6A
4संजय7A2महिरा6A
1आस्था7A3लावण्या7A
2महिरा6A3लावण्या7A
3मोहित7B3लावण्या7A
4संजय7A3लावण्या7A
1आस्था7A4संजय7A
2महिरा6A4संजय7A
3मोहित7B4संजय7A
4संजय7A4संजय7A
1आस्था7A5अभय8A
2महिरा6A5अभय8A
3मोहित7B5अभय8A
4संजय7A5अभय8A

20 पंक्तियाँ सेट में (0.03 sec)

1.5 क्वेरी में दो संबंधों का उपयोग

अब तक हमने SQL में केवल एक ही संबंध का उपयोग कर क्वेरी लिखी हैं। इस खंड में हम दो संबंधों का उपयोग कर क्वेरी लिखना सीखेंगे।

1.5.1 दो तालिकाओं पर कार्टेशियन गुणा

पिछले खंड से हमने सीखा कि ऑपरेटर कार्टेशियन प्रोडक्ट को दो तालिकाओं पर लागू करने पर एक ऐसी तालिका प्राप्त होती है जिसमें अंतर्निहित तालिकाओं के सभी संभावित टपलों के संयोजन होते हैं। जब एक से अधिक तालिकाओं का उपयोग किसी क्वेरी में करना हो, तो हमें FROM क्लॉज़ में अल्पविराम से अलग करके तालिकाओं के नाम निर्दिष्ट करने होते हैं, जैसा कि उदाहरण 1.7 में दिखाया गया है। ऐसी क्वेरी चलाने पर DBMS (MySql) पहले निर्दिष्ट तालिकाओं पर कार्टेशियन प्रोडक्ट लागू करके एक एकल तालिका बनाता है। उदाहरण 1.7 की निम्नलिखित क्वेरी दो तालिकाओं DANCE और MUSIC पर कार्टेशियन प्रोडक्ट लागू करती है:

उदाहरण 1.7

a) संबंधों DANCE और MUSIC के टपलों के सभी संभावित संयोजन प्रदर्शित करें

mysql>SELECT * FROM DANCE, MUSIC;

चूँकि हम क्वेरी में SELECT * का उपयोग कर रहे हैं, इसलिए आउटपुट तालिका 1.15 होगी जिसकी डिग्री 6 और कार्डिनैलिटी 20 है।

b) संबंधों DANCE और MUSIC के टपलों के सभी संभावित संयोजनों में से केवल वे पंक्तियाँ प्रदर्शित करें जिनमें दोनों में विशेषता name का समान मान हो।

mys $q l$ > SELECT * FROM DANCE $D$, MUSIC M WHERE D. Name $=$ M. Name;

तालिका 1.16 समान नाम वाले टपल

SnoNameClassSnoNameclass
2Mahira6A2Mahira6A
4Sanjay7A4Sanjay7A

2 rows in set (0.00 sec)

ध्यान दें कि इस क्वेरी में हमने टेबल उपनामों (DANCE के लिए D और MUSIC के लिए M) का उपयोग किया है, बिल्कुल कॉलम उपनामों की तरह, ताकि टेबल्स को छोटे नामों से संदर्भित किया जा सके। यह ध्यान देना महत्वपूर्ण है कि टेबल उपनाम केवल वर्तमान क्वेरी के लिए ही वैध होता है और यदि FROM क्लॉज़ में किसी टेबल को उपनाम दिया गया है तो क्वेरी में मूल टेबल नाम का उपयोग नहीं किया जा सकता।

1.5.2 दो टेबल्स पर JOIN

JOIN ऑपरेशन निर्दिष्ट शर्तों पर दो टेबल्स से टपल्स को संयुक्त करता है। यह कार्टेशियन प्रोडक्ट से अलग है, जो टपल्स के सभी संभावित संयोजन बनाता है। SQL के JOIN क्लॉज़ का उपयोग करते समय, हम FROM क्लॉज़ के भीतर दो टेबल्स के संबंधित गुणों पर शर्तें निर्दिष्ट करते हैं। आमतौर पर, ऐसा गुण एक टेबल में प्राइमरी की होता है और दूसरी टेबल में फॉरेन की। आइए SchoolUniform डेटाबेस में दो टेबल्स UNIFORM (UCode, UName, UColor) और COST (UCode, Size, Price) बनाते हैं। UCode टेबल UNIFORM में प्राइमरी की है। UCode और Size टेबल COST में कंपोज़िट की हैं। इसलिए, Ucode दोनों टेबल्स के बीच एक सामान्य गुण है जिसका उपयोग दोनों टेबल्स से सामान्य डेटा प्राप्त करने के लिए किया जा सकता है। इसलिए, हमें इस टेबल को बनाते समय Price टेबल में Ucode को फॉरेन की के रूप में परिभाषित करना होगा।

टेबल 1.17 Uniform टेबल

UcodeUnameUcolor
1ShirtWhite
2PantGrey
3TieBlue

टेबल 1.18 Cost टेबल

UcodeSizePrice
1L580
1M500
2L890
2M810

उदाहरण 1.7

UNIFORM और COST तालिकाओं के संबंधित टपल्स के UCode, UName, UColor, Size और Price सूचीबद्ध करें।

दी गई क्वेरी को नीचे दिए गए तीन अलग-अलग तरीकों से लिखा जा सकता है:

a) where clause में शर्त का उपयोग करते हुए

mysqI > SELECT * FROM UNIFORM U, COST C WHERE

U. UCode = C. UCode;

Table 1.19 क्वेरी का आउटपुट

UCodeUNameUColorUcodeSizePrice
1ShirtWhite1L580
1ShirtWhite1M500
2PantGrey2L890
2PantGrey2M810

4 rows in set $(0.08 \mathrm{sec})$

चूँकि दोनों तालिकाओं में attribute Ucode है, इसलिए अस्पष्टता दूर करने के लिए हमें table alias का उपयोग करना पड़ता है। इसलिए, हमने SELECT और FROM clauses में qualifier का उपयोग किया है ताकि UCode attribute की सीमा दिखाई जा सके।

b) JOIN clause का स्पष्ट उपयोग

mysqI>SELECT * FROM UNIFORM U JOIN COST C ON U. Ucode $=$ C. Ucode;

क्वेरी का आउटपुट Table 1.19 में दिखाए गए समान है। इस क्वेरी में, हमने FROM clause में शर्त के साथ स्पष्ट रूप से JOIN clause का उपयोग किया है। इसलिए, WHERE clause में कोई शर्त देने की आवश्यकता नहीं है।

c) NATURAL JOIN clause का स्पष्ट उपयोग

क्वेरी (a) और (b) का आउटपुट जो टेबल 1.19 में दिखाया गया है, में Ucode नामक एक दोहराया गया कॉलम है जिसमें बिल्कुल समान मान हैं। यह अतिरिक्त कॉलम कोई अतिरिक्त जानकारी प्रदान नहीं करता। JOIN ऑपरेशन का एक एक्सटेंशन NATURAL JOIN है जो SQL में JOIN क्लॉज़ की तरह काम करता है, लेकिन अतिरिक्त ऐट्रिब्यूट को हटा देता है। यह ऑपरेटर तभी दो टेबल्स की सामग्री को जोड़ने के लिए प्रयोग किया जा सकता है जब दोनों टेबल्स में एक सामान्य ऐट्रिब्यूट हो। ऊपर दी गई SQL क्वेरी NATURAL JOIN का उपयोग करके नीचे दिखाई गई है:

mysql>SELECT * FROM UNIFORM NATURAL JOIN COST;

UCodeUNameUColorSizePrice
1ShirtWhiteL580
1ShirtWhiteM500
2PantGreyL890
2PantGreyM810

आउटपुट से स्पष्ट है कि इस क्वेरी का परिणाम (a) और (b) में लिखी गई क्वेरीज़ के समान है, सिवाय इसके कि ऐट्रिब्यूट Ucode केवल एक बार दिखाई देता है।

निम्नलिखित कुछ बिंदु हैं जिन्हें ध्यान में रखना चाहिए जब दो या अधिक रिलेशन्स पर JOIN ऑपरेशन्स लगाए जाते हैं:

  • यदि दो टेबल्स को सामान्य ऐट्रिब्यूट पर समानता की शर्त के आधार पर जोड़ना है, तो कोई ON क्लॉज़ के साथ JOIN या FROM क्लॉज़ में NATURAL JOIN का उपयोग कर सकता है। यदि तीन टेबल्स को समानता की शर्त पर जोड़ना है, तो दो JOIN या NATURAL JOIN की आवश्यकता होती है।
  • सामान्य तौर पर, $\mathrm{N}$ टेबल्स को समानता की शर्त पर मिलाने के लिए $\mathrm{N}-1$ joins की आवश्यकता होती है।
  • JOIN क्लॉज़ के साथ, हम दो टेबल्स के टपल्स को मिलाने के लिए कोई भी रिलेशनल ऑपरेटर्स उपयोग कर सकते हैं।

सारांश

  • एक फंक्शन किसी विशेष कार्य को करने और परिणामस्वरूप एक मान लौटाने के लिए प्रयुक्त होता है।
  • सिंगल-रो फंक्शन एक ही पंक्ति पर कार्य करके एक एकल मान लौटाते हैं।
  • मल्टीपल-रो फंक्शन रिकॉर्ड्स के एक समूह पर समग्र रूप से कार्य करते हैं और एक एकल मान लौटाते हैं।
  • न्यूमेरिक फंक्शन संख्यात्मक मानों पर संचालन करते हैं और संख्यात्मक मान लौटाते हैं।
  • स्ट्रिंग फंक्शन कैरेक्टर प्रकार के मानों पर संचालन करते हैं और या तो कैरेक्टर या संख्यात्मक मान लौटाते हैं।
  • डेट और टाइम फंक्शन हमें डेट प्रकार के डेटा मानों से निपटने की अनुमति देते हैं।
  • GROUP BY फंक्शन उन पंक्तियों को एक साथ समूहित करने के लिए प्रयुक्त होता है जो किसी निर्दिष्ट कॉलम में समान मान रखती हैं। कुछ समूह फंक्शन COUNT, MAX, MIN, AVG और SUM हैं।
  • जॉन एक ऐसा संचालन है जो दो या अधिक टेबलों को उनके बीच एक या अधिक सामान फील्ड्स के आधार पर मिलाने के लिए प्रयुक्त होता है।

अभ्यास

1. निम्नलिखित प्रश्नों के उत्तर दें:

a) RDBMS को परिभाषित करें। कोई दो RDBMS सॉफ्टवेयरों के नाम बताएं।

b) SELECT स्टेटमेंट में निम्नलिखित क्लॉज़ का उद्देश्य क्या है?

i) ORDER BY

ii) HAVING

c) Single_row functions और Aggregate functions के बीच कोई दो अंतर बताएं।

d) Cartesian Product से आप क्या समझते हैं?

e) निम्नलिखित संचालनों को करने के लिए फंक्शनों के नाम लिखें:

i) उस दिन को “Monday”, “Tuesday” आदि के रूप में दिखाने के लिए, जिस दिन भारत को आज़ादी मिली।

ii) दिए गए स्ट्रिंग की किसी विशेष स्थिति से निर्दिष्ट संख्या में कैरेक्टर दिखाने के लिए।

iii) उस महीने का नाम दिखाने के लिए जिसमें आपका जन्म हुआ था।

iv) अपने नाम को बड़े अक्षरों में प्रदर्शित करने के लिए।

2. निम्नलिखित SQL कमांड्स द्वारा उत्पन्न आउटपुट लिखें:

a) SELECT POW $(2,3)$;

b) SELECT ROUND(123.2345, 2), $\operatorname{ROUND}(342.9234,-1)$;

c) SELECT LENGTH(“Informatics Practices”);

d) SELECT YEAR(“1979/11/26”), MONTH(“1979/11/26”), DAY(“1979/11/26”), MONTHNAME(“1979/11/26”);

e) SELECT LEFT(“INDIA”,3), RIGHT(“Computer Science”,4);

f) SELECT MID(“Informatics”,3,4), SUBSTR(“Practices”,3);

3. निम्नलिखित “Product” नामक तालिका पर विचार करें, जो एक किराना दुकान में बेचे जा रहे उत्पादों का विवरण दिखाती है।

PCodePNameUPriceManufacturer
P01Washing Powder120Surf
P02Tooth Paste54Colgate
P03Soap25Lux
P04Tooth Paste65Pepsodant
P05Soap38Dove
P06Shampoo245Dove

a) निम्नलिखित के लिए SQL क्वेरीज़ लिखें:

i. उपयुक्त डेटा प्रकारों और कंस्ट्रेंट्स के साथ Product तालिका बनाएं।

ii. Product में प्राइमरी कुंजी की पहचान करें।

iii. उत्पाद नाम के अनुसार अवरोही क्रम में उत्पाद कोड, उत्पाद नाम और मूल्य सूचीबद्ध करें। यदि PName समान है तो मूल्य के आरोही क्रम में डेटा प्रदर्शित करें।

iv. Product तालिका में एक नया कॉलम Discount जोड़ें।

v. उन सभी उत्पादों के लिए जहां UPrice 100 से अधिक है, Product तालिका में डिस्काउंट का मान UPrice का 10 प्रतिशत के रूप में गणना करें, अन्यथा डिस्काउंट 0 होगा।

vi. Dove द्वारा निर्मित सभी उत्पादों की कीमत 12 प्रतिशत बढ़ाएं।

vii.प्रत्येक निर्माता द्वारा निर्मित उत्पादों की कुल संख्या प्रदर्शित करें।

b) ऊपर दी गई Product तालिका में दी गई जानकारी के आधार पर निम्नलिखित क्वेरीज़ को चलाने पर उत्पन्न होने वाला आउटपुट लिखें:

i. SELECT PName, Average(UPrice) FROM Product GROUP BY Pname;

ii. SELECT DISTINCT Manufacturer FROM Product;

iii. SELECT COUNT(DISTINCT PName) FROM Product;

iv. SELECT PName, MAX(UPrice), MIN(UPrice) FROM Product GROUP BY PName;

4. अध्याय में दी गई CARSHOWROOM डेटाबेस का उपयोग करते हुए, निम्नलिखित के लिए SQL क्वेरीज़ लिखें:

a) INVENTORY तालिका में एक नया कॉलम Discount जोड़ें।

b) सभी कारों के लिए उपयुक्त डिस्काउंट मान सेट करें, निम्नलिखित बातों को ध्यान में रखते हुए:

(i) LXI मॉडल पर कोई डिस्काउंट उपलब्ध नहीं है।

(ii) VXI मॉडल पर 10% डिस्काउंट दिया जाता है।

(iii) LXI मॉडल और VXI मॉडल के अलावा अन्य कारों पर 12% डिस्काउंट दिया जाता है।

c) उस सबसे महंगी कार का नाम प्रदर्शित करें जिसका फ्यूल टाइप “Petrol” है।

d) Car4 पर उपलब्ध औसत डिस्काउंट और कुल डिस्काउंट की गणना करें।

e) उन कारों की कुल संख्या सूचीबद्ध करें जिन पर कोई डिस्काउंट नहीं है।

5. निम्नलिखित तालिकाओं Student और Stream को Streams_of_Students डेटाबेस में मान लें। Stream तालिका की प्राइमरी कुंजी StCode (स्ट्रीम कोड) है जो Student तालिका में फॉरेन कुंजी है। Student तालिका की प्राइमरी कुंजी AdmNo (एडमिशन नंबर) है।

AdmNoNameStCode
211JayNULL
241AdityaS03
290DikshaS01
333JasqueenS02
356VedikaS01
380AshpreetS03

StCodeStream
S01Science
$\mathrm{SO}_{2}$Commerce
$\mathrm{SO}_{3}$Humanities

निम्नलिखित के लिए SQL क्वेरीज़ लिखें:

a) डेटाबेस Streams_Of_Students बनाएं।

b) टेबल Student बनाएं, दी गई टेबल में दिए गए डेटा के आधार पर उपयुक्त डेटा प्रकार चुनकर।

c) टेबल्स Student और Stream से प्राइमरी कुंजियों की पहचान करें। साथ ही, टेबल Stream से फॉरेन कुंजी की पहचान करें।

d) Jay ने अब अपना स्ट्रीम Humanities कर लिया है। इस परिवर्तन को दर्शाने के लिए उपयुक्त SQL क्वेरी लिखें।

e) उन छात्रों के नाम प्रदर्शित करें जिनके नाम ’ $a$ ’ अक्षर से समाप्त होते हैं। साथ ही, छात्रों को वर्णानुक्रम में व्यवस्थित करें।

f) Science और Humanities स्ट्रीम में नामांकित छात्रों के नाम प्रदर्शित करें, छात्र नाम के वर्णानुक्रम में क्रमबद्ध करें, फिर प्रवेश संख्या के आरोही क्रम में (डुप्लिकेट नामों के लिए)।

g) प्रत्येक स्ट्रीम में उन छात्रों की संख्या सूचीबद्ध करें जिनमें 1 से अधिक छात्र हैं।

h) विभिन्न स्ट्रीम्स में नामांकित छात्रों के नाम प्रदर्शित करें, जहां छात्रों को प्रवेश संख्या के अवरोही क्रम में व्यवस्थित किया गया है।

i) Student और Stream टेबल पर कार्टेशियन गुणनफल दिखाएं। साथ ही कार्टेशियन गुणनफल लागू करने के बाद उत्पन्न डिग्री और कार्डिनैलिटी का उल्लेख करें।

j) स्ट्रीम तालिका में एक नया कॉलम “TeacherIncharge” जोड़ें। प्रत्येक पंक्ति में उपयुक्त डेटा डालें।

k) शिक्षकों और छात्रों के नामों की सूची बनाएं।

l) यदि स्टूडेंट और स्ट्रीम तालिकाओं पर फिर से कार्टेशियन गुणा लागू किया जाता है, तो इस संशोधित तालिका की डिग्री और कार्डिनैलिटी क्या होगी?