कड़ाई से, हाँ, FROM
एक SELECT
बयान का खंड वैकल्पिक नहीं है। SQL-99 के सिंटैक्स में मूल SELECT
स्टेटमेंट का विवरण होता है , और FROM
क्लॉज के चारों ओर कोई वर्ग ब्रैकेट नहीं होता है। यह इंगित करता है कि मानक इसे गैर-वैकल्पिक मानता है:
SELECT [ DISTINCT | ALL ]
{Column expression [ AS name ]} [ ,... ] | *
FROM <Table reference> [ {,<Table reference>} ... ]
[ WHERE search condition ]
[ GROUP BY Columns [ HAVING condition ] ]
[ORDER BY {col_name | expr | position} [ASC | DESC],...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options |
INTO DUMPFILE 'file_name' |
INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]
वास्तविक उपयोग में, प्रोग्रामर और डीबीए अक्सर तालिकाओं में डेटा हेरफेर या टेबल और डेटा संरचनाओं में हेरफेर करने के अलावा अन्य चीजें करना उपयोगी पाते हैं। इस प्रकार की बात काफी हद तक SQL मानक के दायरे से परे है, जो विशिष्ट कार्यान्वयन के नट और बोल्ट से अधिक डेटा सुविधाओं से संबंधित है। हम चलाने के लिए चाहते हैं या नहीं SELECT getdate()
या SELECT 1
या SELECT DB_NAME()
(या जो भी आपके बोली पसंद), हम नहीं वास्तव में एक मेज से डेटा चाहते हैं।
ओरेकल निम्नलिखित प्रभावी परिभाषा के साथ डमी टेबल का उपयोग करके मानक और कार्यान्वयन विसंगति को हल करने का विकल्प चुनता है:
CREATE TABLE DUAL (
DUMMY CHAR(1)
)
INSERT INTO DUAL (DUMMY) VALUES ('X')
अन्य RDBMSes अनिवार्य रूप से मान लेते हैं कि डमी टेबल का उपयोग किया जाता है यदि कोई FROM
निर्दिष्ट नहीं है।
दोहरी तालिका के इतिहास विकिपीडिया पर है:
DUAL तालिका Oracle Corporation के चार्ल्स वीस द्वारा आंतरिक विचारों में शामिल होने के लिए एक तालिका प्रदान करने के लिए बनाई गई थी:
मैंने Oracle डेटा शब्दकोश में एक अंतर्निहित वस्तु के रूप में DUAL तालिका बनाई। यह कभी भी खुद को देखने के लिए नहीं था, बल्कि एक ऐसे दृश्य के अंदर इस्तेमाल किया गया था, जिसके क्वेर होने की उम्मीद थी। विचार यह था कि आप DUAL तालिका में एक JOIN कर सकते हैं और अपनी तालिका में हर एक पंक्ति के परिणाम में दो पंक्तियाँ बना सकते हैं। फिर, ग्रुप बीवाई का उपयोग करके, परिणामी जोड़ को डीएटीए सीमा के लिए और इंडेक्स सीमा (एस) के लिए भंडारण की मात्रा दिखाने के लिए संक्षेप में प्रस्तुत किया जा सकता है। DUAL नाम, केवल एक से पंक्तियों की एक जोड़ी बनाने की प्रक्रिया के लिए उपयुक्त प्रतीत होता है।
मूल DUAL तालिका में दो पंक्तियाँ थीं (इसलिए इसका नाम), लेकिन बाद में इसमें केवल एक पंक्ति थी।
select
बिना नहीं कर सकताfrom
। DB2 में एक समान डमी तालिका है जिसे SYSIBM.SYSDUMMY1 कहा जाता है । इसके अलावा आप शायद यह पहले से ही जानते हैं, लेकिन जब आपselect 'A' from dual
,dual
तालिका वास्तव में एक्सेस नहीं की जाती है , जो आपके संपादन में प्रश्न का उत्तर देता है (जो एक नए प्रश्न btw का विलय करता है)।