SQL में सिंगल और डबल कोट्स में क्या अंतर है?


जवाबों:


153

SQL में स्ट्रिंग की शुरुआत और अंत को इंगित करने के लिए सिंगल कोट्स का उपयोग किया जाता है। डबल कोट्स आमतौर पर SQL में उपयोग नहीं किए जाते हैं, लेकिन यह डेटाबेस से डेटाबेस में भिन्न हो सकते हैं।

एकल उद्धरण का उपयोग करने के लिए छड़ी।

यह वैसे भी प्राथमिक उपयोग है। आप स्तंभ उपनाम के लिए एकल उद्धरण का उपयोग कर सकते हैं - जहां आप चाहते हैं कि स्तंभ का नाम जिसे आप अपने एप्लिकेशन कोड में संदर्भित करते हैं, वह स्तंभ डेटाबेस में वास्तव में क्या कहा जाता है, के अलावा कुछ और हो। उदाहरण के लिए: के PRODUCT.idरूप में अधिक पठनीय होगा product_id, इसलिए आप निम्न में से किसी एक का उपयोग करते हैं:

  • SELECT PRODUCT.id AS product_id
  • SELECT PRODUCT.id 'product_id'

या तो Oracle, SQL Server, MySQL में काम करता है ... लेकिन मुझे पता है कि कुछ ने कहा है कि TOAD IDE एकल उद्धरण दृष्टिकोण का उपयोग करते समय कुछ दुःख देता है।

आपको एक उद्धरण का उपयोग करना होगा, जब स्तंभ उपनाम में एक स्थान वर्ण शामिल होता है, उदाहरण के लिए product id, लेकिन यह स्तंभ उपनाम के लिए एक से अधिक शब्द होने के लिए अनुशंसित अभ्यास नहीं है।


31
डबल कोट्स आमतौर पर नाम के ऑब्जेक्ट के लिए उपयोग किया जाता है (उदाहरण के लिए "पहला नाम" कॉलम)। यह SQL-92 मानक का हिस्सा है।
लुकलेड

19
नहीं, मेरा मतलब स्तंभ नामों से है, लेकिन यह उपनामों की भी चिंता करता है। मैं SQL-92 मानक के कारण, असामान्य चरित्र वाले उपनामों और नामों के लिए दोहरे उद्धरण चिह्नों का उपयोग करने की सलाह दूंगा। SELECT * FROM USERS 'Users'SQL सर्वर में काम नहीं करता है, लेकिन SELECT * FROM USERS "Users"करता है।
लुकलेड

122
मुझे हमेशा यह गलत लगता है जब तक मुझे एक साधारण नियम का एहसास नहीं हुआ: [एस] ट्रिंग [एस] के लिए सरल उद्धरण, [डी] एटीबीएस में चीजों के लिए दोगुना उद्धरण
Spacedman

4
आपको पहचानकर्ताओं के लिए दोहरे उद्धरण चिह्नों का उपयोग करना चाहिए। सिंगल कोट्स मानक के विपरीत जाते हैं।
इरविन ब्रान्डेसटेटर

6
SELECT PRODUCT.id 'product_id'Oracle में काम नहीं करेगा एकल उद्धरण केवल वर्ण शाब्दिकों के लिए हैं। (मानक) SQL में पहचानकर्ताओं के लिए इनका उपयोग नहीं किया जा सकता है (हालाँकि कुछ DBMS SQL मानक की उपेक्षा करते हैं जब इसे पहचानने वालों को उद्धृत किया जाता है)
a_horse_with_no_name

80

हमारे लिए एक सरल नियम याद है कि किस मामले में क्या उपयोग करना है:

  • [ एस ] इंगलिंग उद्धरण [ एस ] ट्रिंग्स के लिए हैं; [ डी ] दोहरे उद्धरण चिह्नों [ डी ] के लिए हैं

MySQL और MariaDB में, ` (बैकटिक) प्रतीक के रूप में एक ही है " प्रतीक। आप उपयोग कर सकते हैं " जब आपके SQL_MODEगया है ANSI_QUOTESसक्षम होना चाहिए।


4
स्पष्ट करने के लिए, ANSI_QUOTES सक्षम होने पर, पहचानकर्ताओं का परिसीमन करने के लिए backtick (`) का उपयोग किया जा सकता है, लेकिन यदि ANSI_QUOTES सक्षम है, तो" आप शाब्दिक तार उद्धृत करने के लिए दोहरे उद्धरण चिह्नों का उपयोग नहीं कर सकते, क्योंकि इसे एक पहचानकर्ता के रूप में व्याख्या किया गया है। " ( स्रोत )। (यह सब मानते हैं कि आप MySQL, मन की बात कर रहे हैं।)
सैम

वाह! बहुत बढ़िया मेमो!
एलेक्स यू

लेकिन [ एस ] इंगल उद्धरण भी [ डी ] के लिए शाब्दिक हैं। : - /
बिल कार्विन

दिनांक शाब्दिक रूप से अधिकांश DBMS में स्ट्रिंग्स के रूप में गिना जाता है
कृपया_डॉट_बुल्ली_मे_हो_____________________प्रयार’

64

एकल उद्धरण एक स्ट्रिंग स्थिरांक या एक तारीख / समय निरंतर परिसीमन करते हैं।

तालिका उद्धरण या स्तंभ नामों के लिए दोहरे उद्धरणों को पहचानने वालों को परिसीमित करें। यह आमतौर पर केवल तभी आवश्यक होता है जब आपका पहचानकर्ता सरल पहचानकर्ताओं के लिए नियम फिट नहीं करता है।

यह सभी देखें:

आप ANSI मानक के अनुसार MySQL के दोहरे-उद्धरण का उपयोग कर सकते हैं:

SET GLOBAL SQL_MODE=ANSI_QUOTES

आप Microsoft SQL सर्वर ANSI मानक के अनुसार दोहरे उद्धरण चिह्नों का उपयोग कर सकते हैं:

SET QUOTED_IDENTIFIER ON

36

ANSI SQL में, डबल कोट्स ऑब्जेक्ट नाम (जैसे टेबल) उद्धृत करते हैं, जो उन्हें वर्णों को शामिल करने की अनुमति देता है अन्यथा अनुमति नहीं है, या आरक्षित शब्दों के समान हो (इससे बचें, वास्तव में)।

एकल उद्धरण तार के लिए हैं।

हालांकि, MySQL मानक से बेखबर है (जब तक कि इसका SQL_MODE नहीं बदला जाता है) और उन्हें स्ट्रिंग्स के लिए परस्पर उपयोग करने की अनुमति देता है।

इसके अलावा, Sybase और Microsoft भी पहचानकर्ता उद्धरण के लिए वर्ग कोष्ठक का उपयोग करते हैं।

तो यह थोड़ा विक्रेता विशिष्ट है।

अन्य डेटाबेस जैसे पोस्टग्रैज और आईबीएम वास्तव में एएनआई मानक का पालन करते हैं :)


4
MySql पहचानकर्ता को उद्धृत करने के लिए backtick का उपयोग करता है। (सिर्फ पूरा करने के लिए)
dar7yl

1
उदाहरण: यदि आप पोस्टग्रेज कॉलम "तिथि" (जो आरक्षित है) को नाम देना चाहते हैं, तो आपको इसे दोगुना करना होगा।
fny

9

मैं इस महामारी का उपयोग करता हूं:

  • एकल उद्धरण तार के लिए हैं (एक बात)
  • दोहरे उद्धरण तालिका नामों और स्तंभ नामों (दो चीजों) के लिए हैं

यह चश्मा के अनुसार 100% सही नहीं है, लेकिन यह महामारी मेरी (मानव) की मदद करती है।


1

अंतर उनके उपयोग में निहित है। सिंगल कोट्स का इस्तेमाल ज्यादातर WHERE, HAVING और कुछ बिल्ट-इन SQL फंक्शन्स जैसे CONCAT, STRPOS, POSITION आदि में किया जाता है।

जब आप किसी ऐसे उपनाम का उपयोग करना चाहते हैं जिसके बीच में जगह है तो आप उस उपनाम को संदर्भित करने के लिए दोहरे उद्धरण चिह्नों का उपयोग कर सकते हैं।

उदाहरण के लिए

(select account_id,count(*) "count of" from orders group by 1)sub 

यहां विदेशी मुद्रा के रूप में account_id वाले आदेश तालिका से एक उपश्रेणी है जिसे मैं यह जानने के लिए एकत्रित कर रहा हूं कि प्रत्येक खाते में कितने आदेश हैं। यहाँ मैंने एक कॉलम किसी भी यादृच्छिक नाम को उद्देश्य के लिए "गिनती" के रूप में दिया है।

अब उन पंक्तियों को प्रदर्शित करने के लिए एक बाहरी क्वेरी लिखते हैं जहाँ "गिनती" 20 से अधिक है।

select "count of" from 
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;

आप उसी मामले को कॉमन टेबल एक्सप्रेशन पर भी लागू कर सकते हैं।

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