क्या स्तंभ की परिभाषा के प्रारंभ या अंत में एक कॉलम उर्फ ​​लगाने के बीच कोई अंतर है?


12

मैंने हमेशा अपने कॉलम उपनामों को देखा और लिखा है

SELECT 1 as ColumnName

लेकिन आज एक ऐसा प्रश्न आया जिसका उपयोग किया गया था

SELECT ColumnName = 1

क्या इन दोनों प्रश्नों के निष्पादन में कोई अंतर है? या डीबीए के बीच एक मानक है जिसके बारे में कोई उपयोग करना है?

व्यक्तिगत रूप से मुझे लगता है कि 2 आसान हो पढ़ / (अच्छा उदाहरण अब स्तंभ परिभाषा के लिए बनाए रखने के लिए होगा यहाँ से इस लेख ), हालांकि मैं कभी नहीं 2 से पहले आज तो सोच रहा हूँ इस्तेमाल किया वाक्य रचना को देखा है अगर वहाँ किसी कारण मैं नहीं होना चाहिए है उसका इस्तेमाल कर रहे हैं।


2
ध्यान दें कि टिप्पणी एलियासिंग का असाइनमेंट फॉर्म पोर्टेबल नहीं है, इसलिए यद्यपि यह चीजों को काफी पठनीय बनाता है जब आप व्युत्पन्न स्तंभ कार्य का एक बहुत कुछ कर रहे हैं, तो इसे बाद में किसी अन्य DBMS में परिवर्तित करना कष्टप्रद हो सकता है।
केडे रूक्स

@ कैडेल सेल्को हर समय कुछ चीजों के बारे में तर्क देता है। अगर मुझे SQL Server कोडबेस को Oracle या PG या MySQL में बदलना है, तो अलियास कंपोजिशन मेरी चिंताओं में से कम से कम होगा। चूंकि सेलको के विपरीत, मेरे पास सभी स्वामित्व सुविधाओं से बचने में कोई दिलचस्पी नहीं है, जब हम कभी भी अपनी पूरी वास्तुकला को एक अलग आरडीबीएमएस में स्थानांतरित करते हैं। मुझे आश्चर्य है कि कितनी बार है कि वास्तव में एक कक्षा के बाहर होता है ...
हारून बर्ट्रेंड

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

जवाबों:


17

दो प्रकार के अलियासिंग ( asविरोध करने वाले =) की अंतर्निहित कार्यक्षमता में कोई अंतर नहीं है । यह जो आपके लिए उबलता है वह वही है जिसका आपने उल्लेख किया था: पठनीयता और स्थिरता।

मेरी राय में पूर्व ( <Expression> as <Alias>) बहुत अधिक पठनीय है क्योंकि यह स्वयं व्याख्यात्मक है। जब आपको SELECT ColumnName = 1लगता है कि यह गलती करना बहुत आसान होगा, तो उन लंबी थकाऊ रातों पर एक चर स्थापित करना। आप गलती कर सकते हैं कि के रूप में SELECT @ColumnName = 1और यह पूरी तरह से अलग कार्यक्षमता होगी। इसलिए, क्वेरी "डबल लुक" की किसी भी संभावना को दरकिनार करने के लिए, या इससे भी बदतर ... समझने / कोडिंग में त्रुटि, मैं SELECT 1 as ColumnName100% समय के साथ जाता हूं ।

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

तीसरा असम्बद्ध तरीका उपयोग करना है <Expression> <Alias>। दूसरे शब्दों में, asकीवर्ड के बिना आपका दूसरा तरीका । मुझे लगता है कि यह =प्रतीक के समान ही बुरा है । इसके लाभ में पठनीयता का अभाव है? तीन अतिरिक्त वर्ण ( asऔर एक स्थान) टाइपिंग नहीं । इसके लायक नहीं।

अतिशयोक्ति प्रयोजनों के लिए, इस तरह एक प्रश्न पर एक नज़र रखना:

use AdventureWorks2012;
go

select
    [New Name] = Name,
    NewDepId = DepartmentID,
    GroupName as GName,
    ModifiedDate MyModDate
from HumanResources.Department;

ऐसा कोड नहीं जिसकी मैं समीक्षा करना चाहता / चाहती हूं।


5
यह हमेशा मुझे पिछले एक को देखने के लिए परेशान करता है, जहां वे "के रूप में" कीवर्ड को बाहर करते हैं। आवश्यकता नहीं है लेकिन कोड का एक गुच्छा देखते समय पढ़ने के लिए एक दर्द।

10

व्यक्तिगत रूप से मुझे alias = expressionपढ़ना और समझना आसान लगता है। इसका कारण यह है कि जब मैं एक ऐसे SELECTकथन का निवारण कर रहा हूं जिसमें लंबे-चौड़े भाव हैं, तो मैं शायद स्तंभ नाम के माध्यम से अभिव्यक्ति ढूंढना चाहता हूं, न कि दूसरे तरीके से। त्वरित, उस अभिव्यक्ति को ढूंढें जिसे एप्लिकेशन देखता है alias2:

SELECT
  alias1 = (long expression with aggregates and multiple column references),
  (long expression with aggregates and multiple column references AS alias2
FROM ...

यही मेरी प्राथमिकता है। आपका अलग हो सकता है। व्यक्तिपरक / स्वाद कारणों को छोड़कर एक या दूसरे का उपयोग करने का कोई सच्चा लाभ नहीं है। महत्वपूर्ण बात यह है कि आप इसे करने का एक तरीका चुनते हैं, और इसे लगातार करते हैं (और जब तक आप एक सिक्का नहीं फ्लिप करते हैं, तब आप अपनी पसंद का बचाव करने में सक्षम हो सकते हैं जब आप किसी ऐसे व्यक्ति के खिलाफ आते हैं जो दूसरे तरीके को पसंद करता है)। लेकिन अगर आप मेरे रूप में एक डीबीए के लिए उधम मचाते हुए कोड लिखते हैं, तो इसे फिर से लिखने के लिए तैयार रहें। :-)

मैंने इस बारे में ब्लॉग किया है

एक बात जो मुझे और भी मज़बूत लगती है, वह है उर्फ ​​नामों के इर्द-गिर्द एकल उद्धरणों का उपयोग, जैसे

column AS 'alias'
'alias' = column

एक रूप को हटा दिया गया है, लेकिन दोनों को पढ़ना बहुत मुश्किल है - और कई newbies एक स्ट्रिंग शाब्दिक के रूप में उर्फ ​​की गलती करते हैं, क्योंकि यह ऐसा दिखता है। उन्हीं कारणों से, मैं दोहरे उद्धरण चिह्नों ( "alias") का उपयोग पूरी तरह से करता हूं । यदि आपको अपने उपनाम से बचने की आवश्यकता है क्योंकि यह एक आरक्षित शब्द है या अन्यथा खराब रूप से चुना या स्वरूपित है, उपयोग करें [square brackets]


2
उद्धरण पहलू पर पूरी तरह सहमत हैं। लंबी अभिव्यक्ति के लिए, मैं व्यक्तिगत रूप से गाड़ी का रिटर्न और न्यूलाइन टैबिंग का उपयोग कर रहा हूं और फिर as <Alias>कॉलम परिभाषा की अंतिम पंक्ति पर रखूंगा । लेकिन निश्चित रूप से सहमत, यह उतना ही व्यक्तिगत है जितना आप अपनी कॉफी पसंद करते हैं।
थॉमस स्ट्रिंगर

@ThomasStringer देखें कि मैं गाड़ी की अभिव्यक्ति वापस करूँगा। एक लाइन से शुरू होता है के साथ AS Aliasकि ASजब मैं एक विशेष तालिका नाम के लिए खड़ी स्कैनिंग कर रहा हूँ बहुत उपयोगी नहीं है। मुझे यकीन है कि हम अल्पविराम लगाने के लिए भी असहमत होंगे। :-)
हारून बर्ट्रेंड

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

2
@AaronBertrand अल्पविराम लगाने के लिए मेरा तर्क यह है कि यह बताना आसान हो जाता है कि एक स्तंभ परिभाषा कहाँ शुरू होती है, विशेष रूप से बहु-पंक्ति स्तंभ परिभाषाओं के साथ।
राहेल

1
@AaronBertrand मैं आमतौर पर समझदारी से प्रेरित कोड के साथ काम नहीं करता। <
राहेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.