Database
 sql >> डेटाबेस >  >> RDS >> Database

तालिका भाव के मूल तत्व, भाग 1

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

मुझे यह श्रंखला लिखने के लिए मेरे अच्छे मित्र ग्रांट फ्रिचे ने प्रेरित किया, जिन्हें मैं कई वर्षों से जानता हूँ। जैसा कि ग्रांट बार-बार बताते हैं, टी-एसक्यूएल में सामान्य तालिका अभिव्यक्तियों का उपयोग करने वाले कई लोग सोचते हैं कि SQL सर्वर आंतरिक क्वेरी परिणाम सेट को बनाए रखता है, और इस विश्वास का कारण तालिका शब्द का उपयोग है। निर्माण के नाम पर। जब यह विषय सामुदायिक चर्चाओं में आता है, तो अक्सर लोग तर्क देते हैं कि निर्माण के नाम में तालिका शब्द का उपयोग अनुचित है क्योंकि यह वास्तव में एक तालिका नहीं है। कम से कम टी-एसक्यूएल में इस निर्माण के लिए भविष्य में नाम परिवर्तन देखने की उम्मीद में नामकरण अभियान शुरू करने के सुझाव भी हैं। कुछ सुझावों में क्वेरी एक्सप्रेशन . शामिल हैं , इनलाइन दृश्य , कथन-स्तरीय दृश्य , और दूसरे।

शायद यह कुछ लोगों के लिए आश्चर्य की बात होगी, लेकिन मैं वास्तव में तालिका . शब्द का उपयोग करता हूं सामान्य तालिका अभिव्यक्ति में बहुत उपयुक्त है। वास्तव में, मुझे टेबल एक्सप्रेशन . शब्द का उपयोग मिलता है के रूप में उपयुक्त। मेरे लिए, टी-एसक्यूएल में सीटीई क्या है, इसका वर्णन करने का सबसे अच्छा तरीका है, यह एक नामांकित तालिका अभिव्यक्ति है . वही टी-एसक्यूएल कॉल व्युत्पन्न टेबल (सामान्य विचार के विपरीत विशिष्ट भाषा निर्माण), विचारों और इनलाइन टीवीएफ पर लागू होता है। वे सभी नामित टेबल एक्सप्रेशन हैं।

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

आरंभिक बिंदु के रूप में, आप निम्नलिखित प्रश्नों के उत्तर देने में सक्षम होना चाहते हैं:

  • भौतिक डेटा स्वतंत्रता क्या करता है? संबंधपरक मॉडल में सिद्धांत का मतलब है?
  • SQL में टेबल क्या है और रिलेशनल मॉडल में समकक्ष क्या है?
  • संबंधपरक बीजगणित की क्लोजर प्रॉपर्टी क्या है?
  • टेबल एक्सप्रेशन क्या है और रिलेशनल मॉडल में समकक्ष क्या है?

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

मैं यह नहीं कहना चाहता कि मुझे रिलेशनल थ्योरी की बहुत गहरी समझ है। मेरी विशेषज्ञता टी-एसक्यूएल है। मैं स्वीकार करता हूं कि संबंधपरक सिद्धांत के बारे में जितना मैं जानता हूं उससे कहीं अधिक है, और यह कि कुछ चीजें जो मुझे लगता है कि मैं जानता हूं, ऐसा नहीं है। जब मैं इस विषय पर सी.जे. डेट्स के लेखन को पढ़ता हूं, तो मुझे लगता है कि जो कुछ जानना है उसकी सतह को मुश्किल से खरोंच रहा हूं, और मैं इसे बेहतर ढंग से समझने का प्रयास कर सकता हूं और करना चाहिए। मैं मानता हूं और दृढ़ता से मानता हूं कि रिलेशनल थ्योरी की एक अच्छी समझ सीधे एसक्यूएल और टी-एसक्यूएल की बेहतर समझ और बेहतर, अधिक सटीक और अधिक मजबूत टी-एसक्यूएल कोड लिखने के लिए अनुवाद करती है। डेटा को अपने करियर के रूप में चुनने वाले किसी भी व्यक्ति के लिए, मैं एसक्यूएल और रिलेशनल थ्योरी पढ़ने की सलाह देता हूं:सीजे तिथि (ओ रेली 2015) द्वारा सटीक एसक्यूएल कोड तीसरा संस्करण कैसे लिखें।

इस श्रृंखला के पहले भाग में मैं टेबल एक्सप्रेशन . शब्दों के अपने उपयोग की समझ स्थापित करना चाहता हूं और नामांकित तालिका व्यंजक , जो इस शब्द के दिनांक के उपयोग के अनुरूप है, और दुर्भाग्य से इस शब्द के SQL मानक के उपयोग के अनुरूप नहीं है। इसे प्राप्त करने के लिए, मैं संबंधपरक सिद्धांत और SQL मानक से कुछ पृष्ठभूमि प्रदान करूंगा। लेकिन जैसा मैंने कहा, मैं इस विषय के वास्तव में विस्तृत कवरेज के लिए तिथि की पुस्तक पढ़ने की सलाह देता हूं।

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

एक बार जब आप कार्यान्वयन विवरण में तल्लीन हो जाते हैं तो मुझे यह विषय आकर्षक और बहुत व्यावहारिक लगता है। वास्तव में, मुझे इसके बारे में इतना कुछ कहना है कि मुझे यकीन नहीं है कि यह श्रृंखला अंततः कितने भागों में आएगी। मैं आपको बड़े विश्वास के साथ बता सकता हूं कि इसके कई हिस्से होंगे। संभवत:एक से अधिक और 100 से कम। भविष्य के भागों में मैं अलग-अलग प्रकार के नामित टेबल एक्सप्रेशन, संशोधन विचार, इनलाइनिंग पहलुओं, ऑर्डरिंग पहलुओं, सहसंबंधों और बहुत कुछ में तल्लीन करूंगा।

अपने उदाहरणों में मैं TSQLV5 नामक एक नमूना डेटाबेस का उपयोग करूँगा। आप इस डेटाबेस को बनाने और भरने वाली स्क्रिप्ट यहां और इसके ईआर आरेख यहां पा सकते हैं।

भौतिक डेटा स्वतंत्रता

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

टेबल क्या है?

यदि आप कुछ समय के लिए T-SQL या SQL की किसी अन्य बोली के साथ काम कर रहे हैं, तो आप एक सहज समझ विकसित करते हैं कि तालिका क्या है। समस्या यह है कि संबंधपरक सिद्धांत की कुछ पृष्ठभूमि के बिना, अक्सर सहज ज्ञान युक्त समझ बहुत सटीक नहीं होती है। एक सामान्य गलती यह है कि हम सहज रूप से भौतिक कार्यान्वयन विवरणों पर ध्यान केंद्रित करते हैं। उदाहरण के लिए, जब आप इस बारे में सोच रहे हैं कि तालिका क्या है, तो क्या आप किसी तालिका को तार्किक संरचना (पंक्तियों का एक सेट) के रूप में सोच रहे हैं या आप उस प्लेटफ़ॉर्म में भौतिक कार्यान्वयन विवरण के बारे में सोच रहे हैं जिसका आप उपयोग कर रहे हैं (SQL सर्वर में) , पृष्ठ, विस्तार, ढेर बनाम संकुल सूचकांक, गैर-संकुल सूचकांक, और इसी तरह)? तालिका को क्वेरी करने के लिए SQL कोड लिखने वाले उपयोगकर्ता के रूप में, भौतिक डेटा स्वतंत्रता सिद्धांत का पालन करते हुए, आपको तालिका को एक तार्किक संरचना के रूप में सोचना चाहिए, और RDBMS को भौतिक कार्यान्वयन विवरण के बारे में चिंता करने दें। तो, आइए एक कदम पीछे हटें और यह पता लगाने की कोशिश करें कि टेबल क्या है।

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

एक संबंध का एक शीर्षक और एक मुख्य भाग होता है।

संबंध का शीर्षक एक सेट है विशेषताओं . के . गणितीय समुच्चय सिद्धांत में, समुच्चय का कोई क्रम नहीं होता और न ही कोई डुप्लीकेट होता है। आपको नाम से एक विशेषता की पहचान करनी चाहिए, न कि किसी स्थिति से। नतीजतन, विशेषता नाम अद्वितीय होना चाहिए।

क्या आप पहचान सकते हैं कि SQL में किसी विशेषता का समकक्ष क्या है? आपने शायद अनुमान लगाया होगा कि यह एक कॉलम है . हालाँकि, SQL में वास्तव में CREATE TABLE स्टेटमेंट में दिखने के क्रम के आधार पर इसके कॉलम के क्रम की धारणा होती है। उदाहरण के लिए, TSQLV5 डेटाबेस में Sales.Shippers तालिका के लिए तालिका बनाएँ विवरण:

CREATE TABLE Sales.Shippers
(
  shipperid   INT          NOT NULL IDENTITY,
  companyname NVARCHAR(40) NOT NULL,
  phone       NVARCHAR(24) NOT NULL,
  CONSTRAINT  PK_Shippers  PRIMARY KEY(shipperid)
);

कुख्यात SELECT * . का उपयोग करके तालिका को क्वेरी करें , इस तरह:

SELECT * FROM Sales.Shippers;

जब मैंने इस क्वेरी को अपने सिस्टम में चलाया, तो मुझे निम्न आउटपुट मिला:

shipperid  companyname    phone
---------- -------------- ---------------
1          Shipper GVSUA  (503) 555-0137
2          Shipper ETYNR  (425) 555-0136
3          Shipper ZHISN  (415) 555-0138

एसक्यूएल गारंटी देता है कि परिभाषा क्रम के आधार पर कॉलम बाएं से दाएं लौटाए जाएंगे। मैं समझाता हूँ कि शीघ्र ही पंक्तियों के साथ क्या होता है। SQL आपको ORDER BY क्लॉज में SELECT सूची से कॉलम की क्रमिक स्थिति को संदर्भित करने की भी अनुमति देता है, जैसे (ऐसा नहीं है कि मैं इस अभ्यास की सिफारिश कर रहा हूं, न ही हारून बर्ट्रेंड):

SELECT shipperid, companyname, phone
FROM Sales.Shippers
ORDER BY 2;

यह क्वेरी निम्न आउटपुट उत्पन्न करती है:

shipperid  companyname    phone
---------- -------------- ---------------
2          Shipper ETYNR  (425) 555-0136
1          Shipper GVSUA  (503) 555-0137
3          Shipper ZHISN  (415) 555-0138

एक रिश्ते का शरीर टुपल्स . का एक सेट है . दोबारा, याद रखें कि एक सेट में कोई ऑर्डर नहीं है और कोई डुप्लीकेट नहीं है। इसलिए, एक संबंध में कम से कम एक उम्मीदवार कुंजी होनी चाहिए जो आपको विशिष्ट रूप से एक टपल की पहचान करने की अनुमति देती है। टपल के लिए SQL का समकक्ष एक पंक्ति है . हालाँकि, SQL में आपको किसी तालिका में एक कुंजी को परिभाषित करने के लिए बाध्य नहीं किया जाता है, और यदि आप नहीं करते हैं, तो आप डुप्लिकेट पंक्तियों के साथ समाप्त हो सकते हैं। यहां तक ​​​​कि अगर आपकी तालिका में एक कुंजी परिभाषित है, तो आप तालिका के खिलाफ एक क्वेरी से डुप्लिकेट पंक्तियों को वापस प्राप्त कर सकते हैं। यहां एक उदाहरण दिया गया है:

SELECT country FROM HR.Employees;

यह क्वेरी निम्न आउटपुट उत्पन्न करती है:

country
--------
USA
USA
USA
USA
UK
UK
UK
USA
UK

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

SELECT DISTINCT country FROM HR.Employees;

यह क्वेरी निम्न आउटपुट उत्पन्न करती है:

country
--------
UK
USA

तालिका के शरीर के संदर्भ में संबंधपरक सिद्धांत से SQL जो बनाए रखता है वह नो-ऑर्डर संपत्ति है। जब तक आप क्वेरी में ORDER BY क्लॉज नहीं जोड़ते हैं, तब तक आपके पास कोई आश्वासन नहीं है कि परिणाम में पंक्तियों के बीच कोई विशिष्ट क्रम होगा। तो, उपरोक्त क्वेरी परिणाम का मुख्य भाग संबंधपरक है, कम से कम इस अर्थ में कि इसमें डुप्लिकेट नहीं है और इसमें गारंटीकृत आदेश नहीं है।

मान लीजिए कि आप SQL सर्वर में किसी तालिका को क्वेरी करते हैं, और आप क्वेरी में ORDER BY क्लॉज शामिल नहीं करते हैं। क्या आप उम्मीद करते हैं कि SQL सर्वर हमेशा कुछ विशिष्ट क्रम में पंक्तियों को गारंटीकृत व्यवहार के रूप में लौटाएगा? बहुत से लोग करते हैं। बहुत से लोग सोचते हैं कि क्लस्टर इंडेक्स ऑर्डर के आधार पर आपको हमेशा पंक्तियां वापस मिल जाएंगी। भौतिक डेटा स्वतंत्रता सिद्धांत को अनदेखा करने और अंतर्ज्ञान के आधार पर धारणा बनाने और शायद पिछले देखे गए व्यवहार के आधार पर यह एक अच्छा उदाहरण है। Microsoft जानता है कि ORDER BY क्लॉज के बिना SQL क्वेरी परिणाम पंक्तियों के बीच किसी भी क्रम की गारंटी नहीं देती है, और इसलिए भले ही भौतिक स्तर पर डेटा एक इंडेक्स संरचना में रहता हो, SQL सर्वर को डेटा को इंडेक्स में संसाधित करने की आवश्यकता नहीं होती है गण। यह कुछ भौतिक परिस्थितियों में, ऐसा करने के लिए चुन सकता है, लेकिन यह अन्य भौतिक परिस्थितियों में नहीं चुन सकता है। यह भी याद रखें कि भौतिक कार्यान्वयन विवरण विभिन्न संस्करणों और उत्पाद के निर्माण के बीच बदल सकते हैं। यदि आप यह गारंटी देना चाहते हैं कि क्वेरी किसी विशिष्ट क्रम में परिणाम पंक्तियों को वापस कर देगी, तो इसकी गारंटी देने का आपका एकमात्र तरीका बाहरी क्वेरी में ORDER BY क्लॉज पेश करना है।

जैसा कि आप शायद एकत्र हुए हैं, SQL के डिजाइनरों ने वास्तव में इसे संबंधपरक सिद्धांत का पालन करने के लिए प्राथमिकता के रूप में नहीं देखा। और जो मैंने यहाँ वर्णित किया है वह केवल कुछ उदाहरण हैं। और भी बहुत से हैं। जैसा कि पहले उल्लेख किया गया है, इस लेख में मेरा लक्ष्य केवल पर्याप्त महत्वपूर्ण सैद्धांतिक पृष्ठभूमि प्रदान करना है, ताकि भविष्य के लेखों में टी-एसक्यूएल की बारीकियों पर ध्यान देना शुरू करने से पहले, तालिका अभिव्यक्तियों के आसपास के भ्रम को दूर किया जा सके।

टेबल एक्सप्रेशन क्या है?

संबंधपरक बीजगणित (बीजगणित जो संबंधपरक सिद्धांत में संबंधों पर संचालन को परिभाषित करता है) में एक क्लोजर . है संपत्ति। इसका मतलब यह है कि संबंधों पर एक ऑपरेशन एक संबंध उत्पन्न करता है। एक रिलेशनल ऑपरेटर इनपुट के रूप में एक या अधिक संबंधों पर काम करता है और आउटपुट के रूप में एकल संबंध उत्पन्न करता है। क्लोजर प्रॉपर्टी आपको नेस्ट ऑपरेशंस की अनुमति देती है। एक संबंधपरक अभिव्यक्ति एक अभिव्यक्ति है जो संबंधों पर काम करती है और एक संबंध लौटाती है। इसलिए एक संबंधपरक व्यंजक का उपयोग किया जा सकता है जहां संबंधपरक बीजगणित एक संबंध की अपेक्षा करता है।

यदि आप इसके बारे में सोचते हैं, तो यह उन पूर्णांकों पर संचालन से अलग नहीं है जो एक पूर्णांक परिणाम देते हैं। मान लीजिए कि चर @i एक पूर्णांक चर है। व्यंजक @i + 42 एक पूर्णांक उत्पन्न करता है और इसलिए इसका उपयोग किया जा सकता है जहां एक पूर्णांक अपेक्षित है, जैसा कि (@i + 42) * 2 में है।

यह देखते हुए कि एसक्यूएल में एक टेबल रिलेशनल थ्योरी में एक रिलेशन का समकक्ष है, हालांकि उस पर बहुत सफल नहीं है, एसक्यूएल में एक टेबल एक्सप्रेशन एक रिलेशनल एक्सप्रेशन का समकक्ष है। जैसा कि पहले उल्लेख किया गया है, मैं इस शब्द के सी जे डेट्स के उपयोग के बाद टेबल एक्सप्रेशन शब्द का उपयोग करता हूं। SQL मानक में कई भ्रमित करने वाले शब्द हैं, जिनमें से कुछ मुझे डर है कि बहुत उपयुक्त नहीं हैं। उदाहरण के लिए, SQL मानक शब्द तालिका अभिव्यक्ति का उपयोग विशेष रूप से एक अनिवार्य FROM क्लॉज से शुरू होने वाले क्वेरी क्लॉज के आधार पर एक एक्सप्रेशन का वर्णन करने के लिए करता है, और वैकल्पिक रूप से क्लॉज WHERE, GROUP BY, HAVING और WINDOW सहित (अंतिम T में समर्थित नहीं है) -एसक्यूएल), और सेलेक्ट क्लॉज को छोड़कर। यहां मानक का विवरण दिया गया है:

7.4 <तालिका अभिव्यक्ति>

फ़ंक्शन
तालिका या समूहीकृत तालिका निर्दिष्ट करें।

प्रारूप
<तालिका अभिव्यक्ति> ::=
<से खंड>
[ <जहां खंड> ]
[ <समूह द्वारा खंड> ]
[ <उपबंध> ]
[ <विंडो क्लॉज> ]

यह सच है कि मानक जिसे तालिका व्यंजक कहते हैं, उसके परिणाम को तालिका माना जाता है, लेकिन आप इस तरह के व्यंजक का उपयोग स्टैंड-अलोन क्वेरी के रूप में नहीं कर सकते। शब्द तालिका अभिव्यक्ति का दिनांक संस्करण वास्तव में SQL मानक क्वेरी एक्सप्रेशन calls के करीब है . क्वेरी एक्सप्रेशन को क्या कहते हैं, इसके लिए मानक का विवरण यहां दिया गया है:

7.17 <क्वेरी एक्सप्रेशन>

फ़ंक्शन
तालिका निर्दिष्ट करें।

प्रारूप
<क्वेरी एक्सप्रेशन> ::=
[ <क्लॉज के साथ> ] <क्वेरी एक्सप्रेशन बॉडी>
[ <क्लॉज द्वारा ऑर्डर करें> ] [ <रिजल्ट ऑफसेट क्लॉज> ] [ <पहला क्लॉज प्राप्त करें> ]
<खंड के साथ> ::=
[रिकर्सिव के साथ] <सूची के साथ>
<सूची के साथ> ::=
<सूची तत्व के साथ> [ { <अल्पविराम> <सूची तत्व के साथ> }… ]
<सूची तत्व के साथ> ::=
<क्वेरी नाम> [ <बाएं माता-पिता> <स्तंभ सूची के साथ> <दाएं माता-पिता> ]
AS <तालिका उपश्रेणी> [ <खोज या चक्र खंड> ]
<स्तंभ सूची के साथ> ::=
<स्तंभ नाम सूची>
<क्वेरी अभिव्यक्ति शरीर> ::=
<क्वेरी शब्द>
| <क्वेरी एक्सप्रेशन बॉडी> यूनियन [ ALL | DISTINCT ]
[ <संबंधित कल्पना> ] <क्वेरी टर्म>
| <क्वेरी एक्सप्रेशन बॉडी> सिवाय [सभी | DISTINCT ]
[ <संबंधित कल्पना> ] <क्वेरी टर्म>
<क्वेरी टर्म> ::=
<क्वेरी प्राइमरी>
| <क्वेरी टर्म> इंटरसेक्ट [ ALL | DISTINCT ]
[ <संबंधित कल्पना> ] <क्वेरी प्राथमिक>
<क्वेरी प्राथमिक> ::=
<सरल तालिका>
| <लेफ्ट पैरेन> <क्वेरी एक्सप्रेशन बॉडी>
[ <ऑर्डर बाय क्लॉज> ] [ <रिजल्ट ऑफ़सेट क्लॉज़> ] [<फ़ैच फर्स्ट क्लॉज़> ]
<राइट पैरेन>
<सिंपल टेबल> ::=
<क्वेरी विनिर्देश>
| <टेबल वैल्यू कंस्ट्रक्टर>
| <स्पष्ट तालिका>
<स्पष्ट तालिका> ::=
तालिका <तालिका या क्वेरी नाम>
<संबंधित युक्ति> ::=
संगत [ द्वारा <बाएं माता-पिता> <संबंधित स्तंभ सूची> <दाएं माता-पिता> ]
<संबंधित स्तंभ सूची> ::=
<स्तंभ नाम सूची>
<खंड द्वारा आदेश> ::=
<क्रमबद्ध विनिर्देश द्वारा आदेश सूची>
<परिणाम ऑफ़सेट क्लॉज़> ::=
ऑफ़सेट <ऑफ़सेट पंक्ति गणना> { ROW | पंक्तियाँ }
<पहला खंड प्राप्त करें> ::=
प्राप्त करें { प्रथम | अगला} [<पहली मात्रा प्राप्त करें>] {पंक्ति | पंक्तियाँ } { केवल | टाई के साथ }
<पहली मात्रा प्राप्त करें> ::=
<पहली पंक्ति गणना प्राप्त करें>
| <पहला प्रतिशत प्राप्त करें>
<ऑफ़सेट पंक्ति गणना> ::=
<सरल मान विनिर्देश>
<पहली पंक्ति गणना प्राप्त करें> ::=
<सरल मान विनिर्देश>
<पहला प्रतिशत प्राप्त करें> ::=
<सरल मूल्य विनिर्देश> PERCENT

7.3 <टेबल वैल्यू कंस्ट्रक्टर>

फ़ंक्शन
तालिका में निर्मित होने के लिए <पंक्ति मान अभिव्यक्ति> का एक सेट निर्दिष्ट करें।

प्रारूप
<तालिका मान निर्माता> ::=
मान <पंक्ति मान अभिव्यक्ति सूची>
<पंक्ति मान अभिव्यक्ति सूची> ::=
<तालिका पंक्ति मान अभिव्यक्ति> [ { <अल्पविराम> <तालिका पंक्ति मान अभिव्यक्ति> }… ]
<प्रासंगिक रूप से टाइप की गई तालिका मान निर्माता> ::=
मान <प्रासंगिक रूप से टाइप की गई पंक्ति मान अभिव्यक्ति सूची>
<प्रासंगिक रूप से टाइप की गई पंक्ति मान अभिव्यक्ति सूची>::=
<प्रासंगिक रूप से टाइप की गई पंक्ति मान अभिव्यक्ति>
[ { <अल्पविराम> <प्रासंगिक रूप से टाइप की गई पंक्ति मान अभिव्यक्ति> }… ]

ध्यान दें कि इस विनिर्देश में वह शामिल है जिसे टी-एसक्यूएल सामान्य तालिका अभिव्यक्ति कहता है, भले ही मानक वास्तव में इस शब्द का उपयोग नहीं करता है, बल्कि इसे सूची तत्व के साथ कहते हैं। . यह भी देखें कि तथाकथित क्वेरी एक्सप्रेशन को किसी क्वेरी पर आधारित नहीं होना चाहिए, बल्कि उस पर आधारित हो सकता है जिसे टेबल वैल्यू कंस्ट्रक्टर कहा जाता है। (पंक्तियों का एक सेट बनाने के लिए VALUES क्लॉज का उपयोग)। अंत में, भले ही मानक की क्वेरी अभिव्यक्ति एक अभिव्यक्ति पर आधारित है, यह एक तालिका देता है, और इसका उपयोग किया जा सकता है जहां एक तालिका सामान्य रूप से अपेक्षित होती है। इन कारणों से, मुझे तालिका अभिव्यक्ति शब्द का दिनांक का उपयोग अधिक उपयुक्त लगता है।

निष्कर्ष

मैं देख सकता हूं कि क्यों कुछ लोगों को नामकरण और शब्दावली पर निवास करना थोड़ा पांडित्यपूर्ण और शायद समय की बर्बादी के रूप में भी मिल सकता है। हालाँकि, मैं बहुत अलग महसूस करता हूँ। मेरा मानना ​​है कि किसी भी क्षेत्र में, उचित नाम और शब्दावली का उपयोग करने की आकांक्षा आपको नींव का अच्छी तरह से अध्ययन करने के लिए मजबूर करती है, और आपके ज्ञान को दर्शाती है। इस उम्मीद में कि इस लेख में मैंने आपको इतना विमुख करने का प्रबंधन नहीं किया है कि मैं श्रृंखला के आगामी भागों में आगे नहीं बढ़ना चाहता, अगले महीने के लेख से शुरू होकर, मैं अपना ध्यान विभिन्न प्रकार के नामों की ओर मोड़ने जा रहा हूँ टेबल एक्सप्रेशन को SQL सर्वर और Azure SQL डेटाबेस में T-SQL का उपयोग करके नियंत्रित किया जाता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल टेबल

  2. उपयोगकर्ताओं, थ्रेड्स और पोस्ट को प्रबंधित करने के लिए बुनियादी डेटा संरचना की मॉडलिंग

  3. अपने डेटाबेस की एक प्रति पुनर्स्थापित करें

  4. जावा लॉगिंग की मूल बातें जानें

  5. लॉकिंग और प्रदर्शन