Theory
बदलिए, summarise मत कीजिए
पिछले lesson की aggregates ने कई rows को एक number में कुचल दिया। Scalar functions उलटा करती हैं: वे एक बार में एक value छूती हैं और per row एक नतीजा लौटा देती हैं, हर row को खड़ा रखते हुए।
Meera एक printed list के लिए item names CAPITALS में चाहती है, या prices पूरे रुपयों तक rounded, या हर category के बस पहले तीन अक्षर एक code के रूप में। हर एक हर row को अलग-अलग बदलता है।
Scalar-बनाम-aggregate फ़र्क़ छोटा है पर exam-अहम: क्या function table को summarise करता है, या हर row को transform? यहाँ, transform।
Theory
एक मुहर बनाम एक juicer
पिछले lesson का aggregate एक juicer था: कई संतरे, एक गिलास। एक scalar function एक रबर मुहर है: यह हर page पर एक बार दबती है, हर page अब भी मौजूद है, हर एक बस चिह्नित। 500 item names पर UCASE चलाइए और आपको 500 uppercase names मिलते हैं, एक नहीं। Scalar = per row एक मुहर; aggregate = पूरे ढेर से एक रस। वही input table, उलटा output आकार।
At a glance
आम scalar functions
| Function | करता है | उदाहरण नतीजा |
|---|---|---|
| UCASE / UPPER | Uppercase में | 'Sugar' से 'SUGAR' |
| LCASE / LOWER | Lowercase में | 'Sugar' से 'sugar' |
| ROUND(n, d) | एक number round करना | ROUND(58.7,0) = 59 |
| MID / SUBSTRING | Text का हिस्सा निकालना | MID('Grocery',1,3) = 'Gro' |
| LENGTH / CONCAT | Length / text जोड़ना | LENGTH('Tea') = 3 |
Practical
Transform each row
-- One result PER ROW: all 5 rows still returned
SELECT UCASE(item) AS name,
ROUND(price * 0.9, 0) AS discounted,
MID(category, 1, 3) AS code
FROM sales;
-- SUGAR | 41 | Gro
-- TEA |108 | Bev
-- RICE | 54 | Gro
-- SOAP | 32 | Per
-- MILK | 27 | DaiQuiz
SELECT UCASE(item) FROM sales (5 rows) कितनी rows लौटाता है, और SELECT COUNT(item) FROM sales कितनी लौटाता है?
- UCASE 5 rows लौटाता है (per row एक); COUNT 1 row लौटाता है (एक अकेला कुल)
- दोनों 1 row लौटाते हैं
- दोनों 5 rows लौटाते हैं
- UCASE 1 लौटाता है, COUNT 5
Show the answer
UCASE 5 rows लौटाता है (per row एक); COUNT 1 row लौटाता है (एक अकेला कुल)
UCASE scalar है: per row एक नतीजा, तो सारी 5 rows वापस आती हैं (हर name uppercase)। COUNT aggregate है: यह सारी rows को 1 value में समेटता है (गिनती)। यही मूल बात है, scalar rows बचाता है, aggregate उन्हें कुचलता है। कौन से functions क्या करते हैं यह जानना ठीक वही है जो scalar-बनाम-aggregate exam सवाल जाँचता है।
Think first
एक category code बनाइए
Meera हर category से एक 3-अक्षर uppercase code चाहती है (Grocery से GRO)। वह कौन सी दो scalar functions जोड़ती है, और किस क्रम में?
Show the answer
MID/SUBSTRING (पहले 3 अक्षर लेने को) और UCASE (उन्हें uppercase करने को) जोड़िए: UCASE(MID(category, 1, 3)), 'Gro' निकालिए, फिर uppercase करके 'GRO'। Functions nest होती हैं, अंदरूनी पहले चलती है (निकालना), बाहरी दूसरी (uppercase), ठीक Excel या गणित में nesting की तरह। दोनों scalar हैं, तो हर row को अब भी अपना code मिलता है।
Watch out
Marks कहाँ कटते हैं
मुख्य उलझन: scalar (per row एक नतीजा, table रहती है) बनाम aggregate (कुल एक नतीजा, rows समेटती हैं), फ़र्क़ साफ़ परिभाषित कीजिए। dialect नामों पर ध्यान: UCASE/UPPER और LCASE/LOWER अलग databases में एक ही चीज़ हैं; MID (Access/MySQL) और SUBSTRING भी वैसे ही। और ROUND का दूसरा argument decimal places तय करता है (ROUND(n,0) = पूर्ण संख्या)। scalar-बनाम-aggregate रेखा सही करना इस lessons की जोड़ी का पूरा मक़सद है।
Theory
Excel, एक बार और
UPPER, LOWER, ROUND, MID, ये सचमुच Excel के text और number functions हैं (Unit 1 का ROUND, Unit 2 के helpers), अब SQL में। हस्तांतरण पूरा है: spreadsheets ने आपको functions सिखाए; SQL उन्हें असली databases तक बढ़ाता है। दो lessons ने query कहानी बंद की; दो subject बंद करने को बचते हैं: sequences स्वचालित ID numbers के लिए, फिर views। आगे: एक sequence बनाना।
Summary
Key takeaways
- Scalar functions एक value बदलती हैं और per row एक नतीजा लौटाती हैं (table अपनी सारी rows रखती है)।
- यह aggregates के उलट है, जो कई rows को एक value में समेटती हैं।
- UCASE/UPPER और LCASE/LOWER case बदलते हैं; ROUND(n,d) round करता है; MID/SUBSTRING text निकालता है।
- सिर्फ scalars वाला SELECT हर row लौटाता है; aggregate वाला SELECT एक लौटाता है।
- Functions nest होती हैं: अंदरूनी पहले चलती है (UCASE(MID(category,1,3)))।
- याद रखने का hook: scalar हर page पर एक मुहर है; aggregate पूरे ढेर के लिए एक juicer।