SELECT
कथन लगभग संदेह के बिना है, SQL में सबसे अधिक उपयोग किया जाने वाला कथन है।
SELECT
डेटाबेस से डेटा पुनर्प्राप्त करने के लिए कथन का उपयोग किया जाता है। आप निर्दिष्ट कर सकते हैं कि आप किन पंक्तियों को वापस करना चाहते हैं, और कौन से कॉलम।
उदाहरण
SELECT
को प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है बयान।
SELECT *
FROM Pets;
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
इस उदाहरण में हमने तारांकन (*
.) का उपयोग किया है ) सभी कॉलम वापस करने के लिए वाइल्डकार्ड। हमने FROM
. का भी इस्तेमाल किया यह निर्दिष्ट करने के लिए कि किस तालिका से डेटा प्राप्त करना है।
तो यह क्वेरी Pets
. से सभी पंक्तियों और सभी स्तंभों को लौटाती है टेबल।
कॉलम निर्दिष्ट करें
आप वे कॉलम निर्दिष्ट कर सकते हैं जिन्हें आप वापस करना चाहते हैं।
ऐसा करने के लिए, तारक वाइल्डकार्ड को कॉलम नामों से बदलें, प्रत्येक को अल्पविराम से अलग किया जाता है, जिस क्रम में आप उन्हें वापस करना चाहते हैं।
SELECT PetId, PetName, DOB
FROM Pets;
परिणाम:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 4 | Wag | 2020-03-15 | | 5 | Tweet | 2020-11-28 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | | 8 | Meow | NULL | +---------+-----------+------------+
इसे आम तौर पर इस तरह से करना अच्छा अभ्यास माना जाता है, और केवल उन्हीं कॉलम को लौटाएं जिनकी आपको वास्तव में आवश्यकता है। सभी स्तंभों को वापस करने के लिए तारक वाइल्डकार्ड का उपयोग करने से प्रदर्शन पर प्रतिकूल प्रभाव पड़ सकता है, विशेष रूप से बड़े डेटाबेस में।
पंक्तियों को निर्दिष्ट करें
परिणामों को केवल उन पंक्तियों में फ़िल्टर करने के कई तरीके हैं जिनमें आपकी रुचि है। सबसे आम तरीका WHERE
का उपयोग करना है खंड। यह खंड आपको एक शर्त निर्दिष्ट करने की अनुमति देता है कि अर्हता प्राप्त करने के लिए एक पंक्ति को संतुष्ट होना चाहिए।
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy';
परिणाम:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
हमारे मामले में, दो पंक्तियाँ थीं जो हमारी खोज स्थिति को संतुष्ट करती थीं।
हमारी खोज स्थिति बराबर ऑपरेटर का उपयोग करती है (=
) निर्दिष्ट करने के लिए कि PetName
. का मान कॉलम निर्दिष्ट मान से मेल खाना चाहिए (Fluffy
) बिल्कुल।
कई अन्य ऑपरेटर हैं जिनका उपयोग आप अपनी खोज स्थितियों में कर सकते हैं। उदाहरण के लिए, आप LIKE
. का उपयोग कर सकते हैं ऑपरेटर उन पालतू जानवरों को लौटाएगा जिनका नाम F
. से शुरू होता है या Fluff
या जो कुछ भी।
आप WHERE
. में और शर्तें जोड़ सकते हैं AND
. जैसे ऑपरेटरों का उपयोग करके क्लॉज और OR
ऑपरेटरों।
यहाँ एक उदाहरण है।
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';
परिणाम:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
इस उदाहरण में हमने उन सभी पंक्तियों को वापस कर दिया है जहां पालतू जानवर का नाम Fluffy है या जहां पालतू जानवर की जन्म तिथि (DOB
. में निर्दिष्ट है) कॉलम) एक निश्चित तिथि से कम है। हमने ऑपरेटर से कम का उपयोग किया (<
) यह निर्दिष्ट करने के लिए।
नॉन-टेबल डेटा लौटाना
SELECT
स्टेटमेंट का उपयोग उस डेटा को वापस करने के लिए भी किया जा सकता है जो किसी तालिका में संग्रहीत नहीं है। उदाहरण के लिए, ऐसा करना पूरी तरह से कानूनी है:
SELECT 'Hey there!';
परिणाम:
+--------------------+ | (No column name) | |--------------------| | Hey there! | +--------------------+
ध्यान दें कि जब हम ऐसा करते हैं, तो कॉलम का कोई नाम नहीं होता है। परिणामी क्षेत्र को नाम देने के लिए हम उपनाम का उपयोग कर सकते हैं।
गैर-तालिका डेटा का चयन करने और लौटाए गए प्रत्येक फ़ील्ड के लिए उपनाम प्रदान करने के कुछ और उदाहरण यहां दिए गए हैं:
SELECT
2 + 3 AS "2 + 3",
'Fluffy' + ' ' + 'Smith' AS FullName,
SYSDATETIME() AS "Date/time";
परिणाम:
+---------+--------------+-----------------------------+ | 2 + 3 | FullName | Date/time | |---------+--------------+-----------------------------| | 5 | Fluffy Smith | 2020-12-04 23:58:55.8483734 | +---------+--------------+-----------------------------+
यहां एक त्वरित विवरण दिया गया है:
- पहले कॉलम में केवल दो नंबर जोड़े गए।
- दूसरा कॉलम तीन स्ट्रिंग्स (स्पेस कैरेक्टर सहित) को जोड़ता है। यदि आवश्यक हो तो आप संख्याओं के साथ तारों को भी जोड़ सकते हैं।
- तीसरे कॉलम में
SYSDATETIME()
का इस्तेमाल किया गया है वर्तमान दिनांक और समय वापस करने के लिए कार्य। यह फ़ंक्शन SQL सर्वर में उपलब्ध है। अन्य DBMS के अपने दिनांक और समय के कार्य होते हैं। उन DBMS में उपलब्ध दिनांक और समय फ़ंक्शंस की सूची के लिए SQLite दिनांक/समय फ़ंक्शंस, SQL सर्वर दिनांक/समय फ़ंक्शंस, और PostgreSQL दिनांक/समय फ़ंक्शंस देखें।
सबक्वायरी
कई SELECT
होना संभव है एक ही प्रश्न में बयान। हम इसे सबक्वेरी का उपयोग करके कर सकते हैं।
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
परिणाम:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
इस उदाहरण में, हमने IN
. का उपयोग किया है एक सबक्वायरी निर्दिष्ट करने के लिए ऑपरेटर। उस सबक्वेरी ने किसी अन्य तालिका से डेटा का चयन किया, और IN
ऑपरेटर ने इसे वापस बाहरी क्वेरी से जोड़ा।
परिणामों का आदेश देना
आप ORDER BY
का उपयोग कर सकते हैं परिणामों को क्रमबद्ध करने के लिए खंड।
उदाहरण के लिए, हम पिछले परिणामों को PetTypeId
. द्वारा क्रमबद्ध कर सकते हैं अवरोही क्रम में कॉलम:
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
ORDER BY PetTypeId DESC;
परिणाम:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 3 | Dog | | 2 | Cat | | 1 | Bird | +-------------+-----------+
SQL ORDER BY
See देखें अधिक उदाहरणों और विस्तृत स्पष्टीकरण के लिए शुरुआती के लिए खंड।
अधिक उन्नत SELECT
कथन
SELECT
कथन एक बहुत ही सरल कथन है, लेकिन इसका उपयोग बहुत जटिल प्रश्न बनाने के लिए किया जा सकता है।
यहां एक क्वेरी है जो पिछले वाले की तुलना में थोड़ी अधिक जटिल है।
SELECT
PetTypes.PetType,
COUNT(Pets.PetTypeId) AS Count
FROM Pets
LEFT JOIN PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC;
परिणाम:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
SQL क्वेरीज़ की दुनिया में, यह अभी भी बहुत आसान है, हालाँकि, इसमें कई ऐसे तत्व शामिल हैं जिन्हें अक्सर अधिक जटिल प्रश्नों में देखा जाता है।
उदाहरण के लिए, यह क्वेरी एकाधिक तालिकाओं से डेटा पुनर्प्राप्त करने के लिए शामिल होने का उपयोग करती है। यह GROUP BY
. का भी उपयोग करता है पंक्तियों को समूहों में विभाजित करने के लिए खंड।
SQL GROUP BY
देखें GROUP BY
. के अधिक उदाहरणों के लिए शुरुआती के लिए क्लॉज खंड।
एकाधिक तालिकाओं से डेटा पुनर्प्राप्त करने और उन्हें एक परिणाम सेट के रूप में वापस करने का तरीका देखने के लिए SQL जॉइन ट्यूटोरियल देखें।
SELECT INTO
कथन
कुछ DBMS SELECT INTO
. का समर्थन करते हैं बयान। यह पिछले उदाहरणों से थोड़ा अलग है, जिसमें यह डेटाबेस में डेटा को प्रभावित करता है।
SELECT INTO
कथन एक नई तालिका बनाता है और उसमें दूसरी तालिका से डेटा सम्मिलित करता है।
मूल रूप से, यह इस प्रकार है:
SELECT * INTO Table2
FROM Table1;
इस उदाहरण में, हम Table2
. नामक एक नई तालिका बनाते हैं , और Table1
. से सभी डेटा डालें इसे में। Table2
Table1
. जैसी ही परिभाषा होगी ।
SQL देखें SELECT INTO
अधिक उदाहरणों के लिए वक्तव्य।
जैसा कि मैंने बताया, सभी DBMS इस कथन का समर्थन नहीं करते हैं। यदि आपका DBMS SELECT INTO
. का समर्थन नहीं करता है कथन, CREATE TABLE ... AS SELECT
का उपयोग करने का प्रयास करें इसके बजाय बयान।
वे कथन उनके संचालन के भाग के रूप में एक नई तालिका बनाते हैं। पहले से मौजूद तालिका में डेटा सम्मिलित करने के लिए, INSERT INTO ... SELECT
. का उपयोग करके देखें इसके बजाय बयान।