क्या ऐसा बयान देना संभव है
SELECT "Hello world"
WHERE 1 = 1
SQL में?
मुख्य बात जो मैं जानना चाहता हूं, क्या मैं कुछ भी नहीं से चयन कर सकता हूं, अर्थात FROM क्लॉज नहीं है।
क्या ऐसा बयान देना संभव है
SELECT "Hello world"
WHERE 1 = 1
SQL में?
मुख्य बात जो मैं जानना चाहता हूं, क्या मैं कुछ भी नहीं से चयन कर सकता हूं, अर्थात FROM क्लॉज नहीं है।
FROM NULLके बीच SELECTऔर WHERE। अस्पष्ट रूप से अधिकांशतः अस्पष्ट क्योंकि यह होमवर्क है और मैं नहीं चाहता था कि कोई आये और मुझे उत्तर बताये कि अगर मेरी आंत की भावना गलत थी।
जवाबों:
यह विक्रेताओं के बीच सुसंगत नहीं है - ओरेकल, MySQL और DB2 समर्थन दोहरी:
SELECT 'Hello world'
FROM DUAL
... जबकि SQL सर्वर, PostgreSQL और SQLite की आवश्यकता नहीं है FROM DUAL:
SELECT 'Hello world'
MySQL दोनों तरीकों का समर्थन करता है।
DUALजो एक प्रेत जैसी तालिका से प्रश्न करता है।
इसे इस्तेमाल करे।
एक:
SELECT * FROM (VALUES ('Hello world')) t1 (col1) WHERE 1 = 1
मल्टी:
SELECT * FROM (VALUES ('Hello world'),('Hello world'),('Hello world')) t1 (col1) WHERE 1 = 1
यहाँ और अधिक विवरण: http://modern-sql.com/use-case/select-without-from
WHERE 1 = 1? PostgreSQL पर इसके बिना काम करता है। या यह एक और DMBS की चिंता है?
SELECT * FROM (VALUES ("Hello world")) t1 (col1)अभी भी ठीक। Whereबस इस सवाल का जवाब है।
SELECT * FROM (VALUES ('Hello world'),('Hello world'),('Hello world')) t1 (col1) WHERE 1 = 1
यहां https://blog.jooq.org/tag/dual-table// से दोहरे के डेटाबेस समर्थन की सबसे पूरी सूची है :
कई अन्य RDBMS में, डमी टेबल की कोई आवश्यकता नहीं है, क्योंकि आप इन जैसे बयान जारी कर सकते हैं:
SELECT 1; SELECT 1 + 1; SELECT SQRT(2);ये आरडीबीएमएस हैं, जहां ऊपर आम तौर पर संभव है:
- एच 2
- माई एसक्यूएल
- Ingres
- postgres
- SQLite
- एस क्यू एल सर्वर
- Sybase ASE
अन्य RDBMS में, Oracle की तरह डमी टेबल की आवश्यकता होती है। इसलिए, आपको इन चीजों को लिखना होगा:
SELECT 1 FROM DUAL; SELECT 1 + 1 FROM DUAL; SELECT SQRT(2) FROM DUAL;ये RDBMS और उनके संबंधित डमी टेबल हैं:
- DB2: SYSIBM.DUAL
- डर्बी: SYSIBM.SYSDUMMY1
- H2: वैकल्पिक रूप से DUAL का समर्थन करता है
- HSQLDB: INFORMATION_SCHEMA.SYSTEM_USERS
- MySQL: वैकल्पिक रूप से DUAL का समर्थन करता है
- ओरेकल: दोहरी
- Sybase SQL कहीं भी: SYS.DUMMY
Ingres का कोई DUAL नहीं है, लेकिन वास्तव में इसकी आवश्यकता होगी, क्योंकि Ingres में आपके पास WHERE, GROUP BY या HROMING क्लाज बिना FROM क्लॉज के नहीं हो सकते।
आप ऐसा कर सकते हैं। मैं StackExchange Data Explorer क्वेरी में निम्न पंक्तियों का उपयोग कर रहा हूँ :
SELECT
(SELECT COUNT(*) FROM VotesOnPosts WHERE VoteTypeName = 'UpMod' AND UserId = @UserID AND PostTypeId = 2) AS TotalUpVotes,
(SELECT COUNT(*) FROM Answers WHERE UserId = @UserID) AS TotalAnswers
डेटा एक्सचेंज Transact-SQL (SQL सर्वर मालिकाना एक्सटेंशन SQL के लिए) का उपयोग करता है।
आप एक क्वेरी चलाकर इसे स्वयं आज़मा सकते हैं:
SELECT 'Hello world'
मुझे लगता है कि यह संभव नहीं है। सैद्धांतिक रूप से: चयन दो तरह की चीजें करता है:
संकीर्ण / विस्तृत (सेट-थ्योरी);
परिणाम मानचित्रण।
पहले वाले को क्षैतिज-ह्रास के रूप में देखा जा सकता है, जहां विराम के विपरीत एक ऊर्ध्वाधर ह्रास के रूप में देखा जा सकता है। दूसरी ओर, एक जुड़ाव क्षैतिज रूप से सेट को बढ़ा सकता है जहां एक संघ सेट को लंबवत रूप से बढ़ा सकता है।
augmentation diminishing
horizontal join/select select
vertical union where/inner-join
दूसरा एक मैपिंग है। एक मैपिंग, एक कनवर्टर अधिक है। SQL में यह कुछ फ़ील्ड लेता है और शून्य या अधिक फ़ील्ड लौटाता है। चयन में, आप कुछ कुल कार्यों जैसे, सम, एवीजी आदि का उपयोग कर सकते हैं या सभी स्तंभों को एक स्ट्रिंग में परिवर्तित कर सकते हैं। C # linq में, हम कहते हैं कि एक सेलेक्ट T के ऑब्जेक्ट को स्वीकार करता है और टाइप U का ऑब्जेक्ट देता है।
मुझे लगता है कि भ्रम इस तथ्य से आता है कि आप क्या कर सकते हैं select 'howdy' from <table_name>:। यह सुविधा मानचित्रण, चयन का कनवर्टर भाग है। आप कुछ नहीं छाप रहे हैं, लेकिन परिवर्तित! आपके उदाहरण में:
SELECT "
WHERE 1 = 1
आप कुछ भी नहीं / शून्य में परिवर्तित कर रहे हैं "Hello world" और आप कुछ भी नहीं / कोई तालिका के सेट को एक पंक्ति में संकीर्ण करते हैं, जो, बिल्कुल भी कोई मतलब नहीं है।
आप देख सकते हैं कि, यदि आप स्तंभों की संख्या में कमी नहीं करते हैं, तो "Hello world"तालिका में प्रत्येक उपलब्ध पंक्ति के लिए मुद्रित किया जाता है। मुझे उम्मीद है, आप समझ गए होंगे कि अब तक क्यों। आपका चयन उपलब्ध कॉलम से कुछ नहीं लेता है और पाठ के साथ एक कॉलम बनाता है:"Hello world" :।
तो, मेरा जवाब नहीं है। आप केवल खंड से बाहर नहीं छोड़ सकते क्योंकि चयन को हमेशा प्रदर्शन करने के लिए टेबल-कॉलम की आवश्यकता होती है।
मानक SQL में, नहीं। एक WHEREखंड का तात्पर्य एक टेबल एक्सप्रेशन से है।
SQL-92 कल्पना से:
7.6 "जहां खंड"
समारोह
"खंड से" पूर्ववर्ती के परिणाम के लिए "खोज स्थिति" के आवेदन द्वारा प्राप्त तालिका निर्दिष्ट करें।
के बदले में:
7.4 "खंड से"
समारोह
एक या अधिक नामित तालिकाओं से प्राप्त तालिका निर्दिष्ट करें।
इसे करने का एक मानक तरीका (अर्थात किसी भी SQL उत्पाद पर काम करना चाहिए):
SELECT DISTINCT 'Hello world' AS new_value
FROM AnyTableWithOneOrMoreRows
WHERE 1 = 1;
... यह मानते हुए कि आप WHEREक्लॉज़ को कुछ और सार्थक करना चाहते हैं, अन्यथा इसे छोड़ दिया जा सकता है।
SELECTक्लॉज को शामिल करता है, जिसमें केवल स्थिरांक होता है और AnyTableWithOneOrMoreRowsयह एक संग्रहित तालिका होती है, इसलिए तालिका को सत्यापित करने के लिए केवल आंकड़ों का उपयोग करता है शून्य पंक्तियाँ।
एक और संभावना है - स्टैंडअलोन VALUES():
VALUES ('Hello World');
आउटपुट:
column1
Hello World
यह उपयोगी है जब आपको कॉम्पैक्ट तरीके से कई मान निर्दिष्ट करने की आवश्यकता होती है:
VALUES (1, 'a'), (2, 'b'), (3, 'c');
आउटपुट:
column1 column2
1 a
2 b
3 c
यह सिंटैक्स SQLite / PostgreSQL / DB LUW / MariaDB 10.3 द्वारा समर्थित है।
मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन आपके प्रश्न के लिए सबसे अच्छा समाधान एक डमी सबक्वेरी का उपयोग करना है:
SELECT 'Hello World'
FROM (SELECT name='Nothing') n
WHERE 1=1
इस तरह से आप WHERE और कोई भी क्लॉज (जैसे जॉइन या अप्लाई इत्यादि) चुन सकते हैं, क्योंकि स्टेटमेंट के बाद डमी सबक्वेरी परिणाम बदलने के बिना FROM क्लॉज का उपयोग करने के लिए बाध्य करता है।
SELECTबिना है FROM, इसलिए यह अभी भी ओरेकल में विफल रहेगा, आदि
SELECT 'Hello' FROM dual WHERE 1=1उपकुंजी को सिर्फ और सिर्फ छोड़ सकते हैं ।
SELECTएक FROMखंड के बिना एक बयान (अर्थात्, ए ) होना संभव था । क्या आपने प्रश्न नहीं पढ़ा है?
WHEREबिना नहीं हो सकता FROM। यह देखते हुए, मैंने ओपी प्रश्न के पहले कथन का उत्तर दिया।
WHEREमानक SQL था। मैंने अन्य उत्तर भी पढ़े। वैसे: उचित बात यह है कि आपके पास एक SELECTबिना नहीं हो सकता हैFROM , " WHEREबिना FROM" (?) के नहीं। आपकी क्वेरी कहां काम करती है, @DomingoR? यह अभी भी एक है SELECTएक के बिना FROMइस प्रकार उन डीबीएमएस है कि एक के बिना प्रश्नों होने की अनुमति नहीं है पर असफल रहने (सबक्वेरी में), FROMऔर केवल उन जो मानक SQL से भटक और एक नहीं होने की अनुमति देते हैं पर काम कर FROMमें SELECT। तो आपका जवाब कुछ नहीं के लिए कार्य करता है।
मैं फायरबर्ड का उपयोग कर रहा हूं सबसे पहले, "NoTable" नामक एक स्तंभ तालिका बनाएं
CREATE TABLE NOTABLE
(
NOCOLUMN INTEGER
);
INSERT INTO NOTABLE VALUES (0); -- You can put any value
अब आप यह लिख सकते हैं
select 'hello world' as name
उल्लेखनीय है
आप जो भी कॉलम दिखाना चाहते हैं उसे जोड़ सकते हैं