SQL कीवर्ड "AS" का उद्देश्य क्या है?


137

आप तालिका नाम के ठीक बाद पहचानकर्ता टाइपिंग में टेबल उपनाम सेट कर सकते हैं।

SELECT * FROM table t1;

तुम भी ASउपनाम का संकेत करने के लिए कीवर्ड का उपयोग कर सकते हैं ।

SELECT * FROM table AS t1;

यदि कोई है तो उनके बीच क्या अंतर है?

मैं देख रहा हूं कि पुराने DBA लोग बिना बयान दिए लिखते हैं AS, लेकिन अधिकांश नए ट्यूटोरियल इसका उपयोग करते हैं।

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


12
Msdn.microsoft.com/en-us/library/ms179300.aspx से AS क्लॉज आईएसओ मानक में परिणाम सेट कॉलम के लिए एक नाम निर्दिष्ट करने के लिए परिभाषित किया गया है। यह SQL Server 2005 में उपयोग करने के लिए पसंदीदा वाक्यविन्यास है।
Adriaan Stander

3
इसकी स्क्रिप्ट के साथ एक प्रक्रिया की घोषणा को अलग करने के लिए भी इसका उपयोग किया जाता है। CREATE PROC Test @Param1 INT AS SELECT @Param1
टॉम 'ब्लू' पिडॉक

जवाबों:


134

उपरोक्त दोनों कथनों में कोई अंतर नहीं है। एएस उपनाम का उल्लेख करने का एक अधिक स्पष्ट तरीका है


10
दरअसल, एसक्यूएल में कोई अंतर नहीं है, लेकिन कुछ आश्रित टूल / लाइब्रेरी को इस छोटे कीवर्ड पर निर्भर किया जा सकता है। उदाहरण के लिए: JDBC 4.0। उपनाम w / 'AS कारण' और w / o का उपयोग करने के आधार पर आपको अलग-अलग व्यवहार प्राप्त होंगे - इस उत्तर को देखें stackoverflow.com/a/4271250/814304 । मैं इस तरह के मुद्दों से बचने के लिए हमेशा की तरह पूर्ण अर्थ का उपयोग करने की सिफारिश करना चाहूंगा।
iMysak

क्या मेरे पास एक से अधिक कॉलम के लिए उपनाम हो सकते हैं? जैसे, एकल उपनाम वाले दो कॉलम?
दीपक कीन्स

@Keynes हाँ। बस कॉलम (||) कॉलम को समेटें और फिर इसे एक उपनाम दें जैसे SELECT foo || बार के रूप में।
रूपर्ट मैडेन-एबट

हां @ RupertMadden-Abbott, धन्यवाद! लेकिन मैंने थोड़ा इंतजार किया, मैं संदर्भ के संदर्भ में था।
दीपक कीन्स

38

मेरे सामने जवाब देने वाले सभी लोग सही हैं। जब आप लंबी क्वेरी या जुड़ने वाले प्रश्नों को जोड़ते हैं, तो आप इसका उपयोग किसी तालिका के लिए अन्य नाम शॉर्टकट के रूप में करते हैं। यहाँ एक दो उदाहरण हैं।

उदाहरण 1

SELECT P.ProductName,
       P.ProductGroup,
       P.ProductRetailPrice
FROM   Products AS P

उदाहरण 2

SELECT P.ProductName,
       P.ProductRetailPrice,
       O.Quantity
FROM   Products AS P
LEFT OUTER JOIN Orders AS O ON O.ProductID = P.ProductID
WHERE  O.OrderID = 123456

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

SELECT P.ProductName,
       P.ProductRetailPrice,
       O.Quantity
FROM   Products P
LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID
WHERE  O.OrderID = 123456

जैसा कि आप बता सकते हैं, मैंने पिछले उदाहरण में एएस कीवर्ड को छोड़ दिया। और इसे एक उपनाम के रूप में इस्तेमाल किया जा सकता है।

उदाहरण 4

SELECT P.ProductName AS "Product",
       P.ProductRetailPrice AS "Retail Price",
       O.Quantity AS "Quantity Ordered"
FROM   Products P
LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID
WHERE  O.OrderID = 123456

उदाहरण 4 का आउटपुट

Product             Retail Price     Quantity Ordered
Blue Raspberry Gum  $10 pk/$50 Case  2 Cases
Twizzler            $5 pk/$25 Case   10 Cases

21

जब आप सुनिश्चित नहीं कर रहे हैं कि कौन सा वाक्यविन्यास चुनना है, खासकर जब विकल्पों को अलग करने के लिए बहुत कुछ नहीं लगता है, तो पुस्तक पर एक सलाह लें। जहाँ तक मुझे पता है, एसक्यूएल के लिए एकमात्र एकमात्र पुस्तक 'जो सेल्को एसक्यूएल प्रोग्रामिंग स्टाइल' है:

एक सहसंबंध नाम को अक्सर एक उपनाम कहा जाता है, लेकिन मैं औपचारिक होगा। SQL-92 में, उनके पास एक वैकल्पिक ASऑपरेटर हो सकता है, और इसका उपयोग यह स्पष्ट करने के लिए किया जाना चाहिए कि कुछ को एक नया नाम दिया जा रहा है। [p16]

इस तरह, यदि आपकी टीम सम्मेलन को पसंद नहीं करती है, तो आप सेलको को दोष दे सकते हैं - मुझे पता है कि मैं करता हूं;)


अद्यतन 1: IIRC लंबे समय तक, ओरेकल ने AS(पूर्ववर्ती सहसंबंध नाम) कीवर्ड का समर्थन नहीं किया , जो समझा सकता है कि कुछ पुराने टाइमर आदतन इसका उपयोग क्यों नहीं करते हैं।


अद्यतन 2: शब्द 'सहसंबंध नाम', हालांकि SQL मानक द्वारा उपयोग किया जाता है, अनुचित है। अंतर्निहित अवधारणा एक ' रेंज चर ' की है।


अद्यतन 3: मैंने अभी-अभी वही पढ़ा जो सेलको ने लिखा था और वह गलत है: तालिका का नाम नहीं बदला जा रहा है! मुझे अब लगता है:

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


12

ASकीवर्ड एक दे रहा है ALIAS अपने डेटाबेस तालिका करने के लिए या तालिका स्तंभ पर नाम। आपके उदाहरण में, दोनों कथन सही हैं, लेकिन ऐसी परिस्थितियां हैं जहां एएस क्लॉज की आवश्यकता है (हालांकि ASऑपरेटर स्वयं वैकल्पिक है), उदाहरण के लिए

SELECT salary * 2 AS "Double salary" FROM employee;

इस स्थिति में, Employeeतालिका में एक salaryकॉलम होता है और हम सिर्फ एक नए नाम के साथ वेतन का दोगुना चाहते हैं Double Salary

क्षमा करें यदि मेरी व्याख्या प्रभावी नहीं है।


आपकी टिप्पणी के आधार पर अपडेट करें, आप सही हैं, मेरा पिछला बयान अमान्य था। एकमात्र कारण जो मैं सोच सकता हूं, वह यह है कि यह ASखंड लंबे समय से SQL दुनिया में अस्तित्व में है कि इसे आजकल RDMS में पिछड़ी संगतता के लिए शामिल किया गया है।


3
नहीं, ASइस मामले में भी आवश्यक या आवश्यक नहीं है। कोशिश करो SELECT 1 + 1 "result"
viam0Zah

6

यदि आप 'SELECT *' (जो एक बुरी आदत है जिसे आपको बाहर निकलना चाहिए) का उपयोग न करें तो उपयोग अधिक स्पष्ट है:

SELECT t1.colA, t2.colB, t3.colC FROM alongtablename AS t1, anotherlongtablename AS t2, yetanotherlongtablename AS t3 WHERE t1.colD = t2.colE...

1
मुझे पता है कि टेबल अलायस का उद्देश्य क्या है। मैं उत्सुक हूं, कि उपनाम सेट करने के लिए एक अलग कीवर्ड होने का क्या कारण है, जबकि यह इसके बिना भी काम करता है।
viam0Zah

4

यह एक इकाई के लिए सहसंबंध नाम निर्दिष्ट करने का एक औपचारिक तरीका है ताकि आप इसे क्वेरी के दूसरे भाग में आसानी से संबोधित कर सकें।


3

ASइस मामले में एक वैकल्पिक कीवर्ड में परिभाषित किया गया है ANSI SQL 92 एक परिभाषित करने के लिए <<correlation name>, जिसे आम तौर उर्फ एक मेज के लिए।

<table reference> ::=
            <table name> [ [ AS ] <correlation name>
                [ <left paren> <derived column list> <right paren> ] ]
          | <derived table> [ AS ] <correlation name>
                [ <left paren> <derived column list> <right paren> ]
          | <joined table>

     <derived table> ::= <table subquery>

     <derived column list> ::= <column name list>

     <column name list> ::=
          <column name> [ { <comma> <column name> }... ]


     Syntax Rules

     1) A <correlation name> immediately contained in a <table refer-
        ence> TR is exposed by TR. A <table name> immediately contained
        in a <table reference> TR is exposed by TR if and only if TR
        does not specify a <correlation name>.

ऐसा लगता है कि ASतालिका उपनाम के लिए कीवर्ड का उपयोग नहीं करना एक सर्वोत्तम अभ्यास है क्योंकि यह आमतौर पर उपयोग किए जाने वाले डेटाबेस की एक संख्या द्वारा समर्थित नहीं है।


क्या आपके पास dbs का कोई उदाहरण है जो 'as' कीवर्ड का उपयोग नहीं करता है?
D-जोन्स

3
मेरा मानना ​​है कि ओरेकल उनमें से एक है जो asटेबल उपनामों के लिए कीवर्ड का समर्थन नहीं करता है ।
गीर्ट बेलेकेंस

1
"जैसा कि कीवर्ड वैकल्पिक है। उपनाम अन्य रूप से क्वेरी की अवधि के लिए चयनित सूची आइटम को प्रभावी रूप से नामांकित करता है। उपनाम का उपयोग ऑर्डर_बाइ_क्लॉज में किया जा सकता है, लेकिन क्वेरी में अन्य खंडों में नहीं।" docs.oracle.com/cd/B28359_01/server.111/b28286/… । इसके अलावा संबंधित stackoverflow.com/a/8451257/1359796
HEDMON

2

एसक्यूएल के शुरुआती दिनों में, इसे इस समस्या के समाधान के रूप में चुना गया था कि डुप्लिकेट कॉलम नामों (नोट नीचे देखें) से कैसे निपटें।

किसी अन्य उत्तर से क्वेरी उधार लेने के लिए:

SELECT P.ProductName,
       P.ProductRetailPrice,
       O.Quantity
  FROM Products AS P
       INNER JOIN Orders AS O ON O.ProductID = P.ProductID
 WHERE O.OrderID = 123456

स्तंभ ProductID(और संभवतः अन्य) दोनों तालिकाओं के लिए सामान्य है और चूंकि सम्मिलित स्थिति सिंटैक्स में दोनों के संदर्भ की आवश्यकता होती है, इसलिए 'डॉट योग्यता' असंतोष प्रदान करती है।

बेशक, बेहतर समाधान यह था कि पहली बार में डुप्लिकेट कॉलम नामों की अनुमति न दी जाए! खुशी से, यदि आप नए NATURAL JOINसिंटैक्स का उपयोग करते हैं, तो रेंज चर की आवश्यकता Pऔर Oचली जाती है:

SELECT ProductName, ProductRetailPrice, Quantity
  FROM Products NATURAL JOIN Orders
 WHERE OrderID = 123456

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


संबंधपरक मॉडल के शुरुआती दिनों में, संबंधों के क्रॉस उत्पाद (या थीटा-ज्वाइन या इक्वि-जॉइन) जिनके शीर्षकों को असम्बद्ध नहीं किया जाता है, एक ही नाम के दो गुणों के साथ संबंध बनाने के लिए प्रकट होते हैं; अपने संबंधपरक पथरी में इस समस्या के लिए कोडड का समाधान डॉट योग्यता का उपयोग था, जिसे बाद में एसक्यूएल में अनुकरण किया गया था (यह बाद में एहसास हुआ कि तथाकथित प्राकृतिक जुड़ाव बिना नुकसान के आदिम था; अर्थात्, प्राकृतिक जुड़ाव सभी थीटा-जॉइन को प्रतिस्थापित कर सकता है; यहां तक ​​कि पार उत्पाद।)

स्रोत: बिजनेस सिस्टम 12, नोट्स टीटीएम इंप्लीमेंटर्स वर्कशॉप, नॉर्थम्ब्रिआ विश्वविद्यालय, ह्यूग डारवेन द्वारा 2-3 जून 2011 को दी गई प्रस्तुति की स्लाइड्स के लिए दिए गए हैं।


"निश्चित रूप से, बेहतर समाधान यह था कि पहली बार में डुप्लिकेट कॉलम नामों की अनुमति कभी न दी जाए!" - इसलिए company.name और country.name को अनुमति नहीं दी जानी चाहिए? और क्या होगा अगर मैं अपने आप को एक तालिका में शामिल कर रहा हूं? "एसक्यूएल के शुरुआती दिनों में, इसे चुना गया था ..." क्या आपके पास इसके लिए एक संदर्भ है / क्या यह तर्क कहीं दस्तावेज है?
बॉब

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

"क्या उसका स्मरण वजन बढ़ाएगा?"; श्री सेल्को को परेशान करने की आवश्यकता नहीं है; बीएस 12 डॉक में डॉट क्वालिफिकेशन की खामियों पर डार्वेन के अपने शब्द हैं - '70 के दशक की मेमोरी में बाधाएं और बार-बार जुड़ना मेरे लिए नहीं था। मैं मानता हूँ कि यह एक ही कारण के लिए SQL में बनाया बहुत संभव aliasing लगता है।
बॉब

0

यदि आप SQL सर्वर 2012 में क्वेरी संपादक का उपयोग करके क्वेरी डिज़ाइन करते हैं उदाहरण के लिए आपको यह मिलेगा:

  SELECT        e.EmployeeID, s.CompanyName, o.ShipName
FROM            Employees AS e INNER JOIN
                         Orders AS o ON e.EmployeeID = o.EmployeeID INNER JOIN
                         Shippers AS s ON o.ShipVia = s.ShipperID
WHERE        (s.CompanyName = 'Federal Shipping')

हालाँकि AS को हटाने से निम्नलिखित में कोई फर्क नहीं पड़ता है:

 SELECT        e.EmployeeID, s.CompanyName, o.ShipName
FROM            Employees e INNER JOIN
                         Orders o ON e.EmployeeID = o.EmployeeID INNER JOIN
                         Shippers s ON o.ShipVia = s.ShipperID
WHERE        (s.CompanyName = 'Federal Shipping')

इस मामले में एएस का उपयोग बहुत ही कम है लेकिन कई अन्य जगहों पर इसकी जरूरत है।

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