Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में VALUES स्टेटमेंट

MySQL में, VALUES कथन तालिका के रूप में एक या अधिक पंक्तियों का एक सेट देता है। मूल रूप से, यह SQL मानक के अनुसार एक टेबल वैल्यू कंस्ट्रक्टर है, जो एक स्टैंडअलोन SQL स्टेटमेंट के रूप में भी कार्य करता है।

VALUES स्टेटमेंट को MySQL 8.0.19 में पेश किया गया था।

सिंटैक्स

आधिकारिक वाक्य रचना इस प्रकार है:

VALUES row_constructor_list [ORDER BY column_designator] [LIMIT number]

row_constructor_list:
    ROW(value_list)[, ROW(value_list)][, ...]

value_list:
    value[, value][, ...]

column_designator:
    column_index

उदाहरण

यह कैसे काम करता है यह दिखाने के लिए यहां एक सरल उदाहरण दिया गया है:

VALUES ROW(1, 2, 3), ROW(4, 5, 6);

परिणाम:

+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |        2 |        3 |
|        4 |        5 |        6 |
+----------+----------+----------+

परिणामी स्तंभों को परोक्ष रूप से column_0 . नाम दिया गया है , column_1 , column_2 , और इसी तरह, हमेशा 0 . से शुरू होता है ।

हम देख सकते हैं कि प्रत्येक ROW() पंक्ति निर्माता खंड परिणामी तालिका में एक नई पंक्ति में परिणाम देता है।

प्रत्येक ROW() कोष्ठकों में संलग्न एक या अधिक अदिश मानों की एक मान सूची होती है। एक मान किसी भी MySQL डेटा प्रकार या एक अदिश मान का समाधान करने वाले व्यंजक का शाब्दिक अर्थ हो सकता है।

इसलिए हम निम्न कार्य भी कर सकते हैं:

VALUES ROW("Black", "Cat"), ROW("Yellow", "Dog");

परिणाम:

+----------+----------+
| column_0 | column_1 |
+----------+----------+
| Black    | Cat      |
| Yellow   | Dog      |
+----------+----------+

या इस तरह की चीजें:

VALUES 
   ROW(CURDATE(), DATE_ADD(CURDATE(), INTERVAL 10 YEAR)),
   ROW(CURTIME(), DATE_ADD(CURTIME(), INTERVAL 2 HOUR));

परिणाम:

+---------------------+---------------------+
| column_0            | column_1            |
+---------------------+---------------------+
| 2022-02-17 00:00:00 | 2032-02-17 00:00:00 |
| 2022-02-17 09:30:46 | 2022-02-17 11:30:46 |
+---------------------+---------------------+

ORDER BY खंड

सिंटैक्स ORDER BY . के उपयोग की अनुमति देता है परिणाम आदेश देने के लिए खंड। हालांकि, मैंने पाया है कि ORDER BY क्लॉज उस सिस्टम पर अपेक्षित रूप से काम नहीं करता है जिसके खिलाफ मैंने इसे चलाने का प्रयास किया है।

यहां बताया गया है कि यह कैसे चाहिए काम (MySQL प्रलेखन के अनुसार):

VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8) ORDER BY column_1;

परिणाम:

+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |       -2 |        3 |
|        4 |        6 |        8 |
|        5 |        7 |        9 |
+----------+----------+----------+

लेकिन जिन दो प्रणालियों पर मैंने उस कथन को चलाया था (Ubuntu 20.04.3 पर MySQL 8.0.26 और MacOS मोंटेरी पर MySQL 8.0.27 Homebrew), ORDER BY खंड बिल्कुल काम नहीं करता है। शायद यह एक बग है।

LIMIT खंड

हम LIMIT . का उपयोग कर सकते हैं आउटपुट वाली पंक्तियों की संख्या को सीमित करने के लिए क्लॉज:

VALUES 
   ROW('Black', 'Cat'), 
   ROW('Yellow', 'Dog'), 
   ROW('Aqua', 'Fish')
LIMIT 2;

परिणाम:

+----------+----------+
| column_0 | column_1 |
+----------+----------+
| Black    | Cat      |
| Yellow   | Dog      |
+----------+----------+

एक SELECT के साथ कथन

हम VALUES . का भी उपयोग कर सकते हैं SELECT . के अंदर स्टेटमेंट कथन, मानो VALUES टेबल कंस्ट्रक्टर एक वास्तविक टेबल थे:

SELECT
   PetName,
   PetType
FROM
   (VALUES 
      ROW(1, "Fluffy", "Cat"),
      ROW(2, "Bark", "Dog"),
      ROW(3, "Gallop", "Horse")
   ) AS Pets(PetId, PetName, PetType)
WHERE PetId = 2;

परिणाम:

+---------+---------+
| PetName | PetType |
+---------+---------+
| Bark    | Dog     |
+---------+---------+

ROW() खाली नहीं हो सकता

एक पंक्ति कंस्ट्रक्टर खाली नहीं हो सकता, जब तक कि इसे INSERT . में स्रोत के रूप में उपयोग नहीं किया जा रहा हो बयान।

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

VALUES ROW();

परिणाम:

ERROR 3942 (HY000): Each row of a VALUES clause must have at least one column, unless when used as source in an INSERT statement.

ROW() शून्य मान हो सकते हैं

हालांकि पंक्ति निर्माता खाली नहीं हो सकते हैं, लेकिन उनमें शून्य मान हो सकते हैं:

VALUES ROW(null, null);

परिणाम:

+----------+----------+
| column_0 | column_1 |
+----------+----------+
|     NULL |     NULL |
+----------+----------+

प्रत्येक ROW() मानों की संख्या समान होनी चाहिए

प्रत्येक ROW() उसी में VALUES स्टेटमेंट की वैल्यू लिस्ट में मानों की संख्या समान होनी चाहिए।

इसलिए, हम ऐसा नहीं कर सकते:

VALUES ROW(1, 2), ROW(3);

परिणाम:

ERROR 1136 (21S01): Column count doesn't match value count at row 2

VALUES का उपयोग करना डेटा डालने के लिए

हम VALUES . का उपयोग कर सकते हैं INSERT . के संयोजन में कथन और REPLACE तालिका में डेटा सम्मिलित करने के लिए कथन।

उदाहरण:

INSERT INTO Pets VALUES 
   ROW(9, 3, 1, 'Woof', '2020-10-03'), 
   ROW(10, 4, 5, 'Ears', '2022-01-11');

इसने Pets . नामक तालिका में दो पंक्तियाँ सम्मिलित कीं . यह मानता है कि तालिका पहले से मौजूद है।

अब हम SELECT . का उपयोग कर सकते हैं तालिका में नए मान देखने के लिए कथन:

SELECT * FROM Pets
WHERE PetId IN (9, 10);

परिणाम:

+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     9 |         3 |       1 | Woof    | 2020-10-03 |
|    10 |         4 |       5 | Ears    | 2022-01-11 |
+-------+-----------+---------+---------+------------+

उपरोक्त INSERT कथन निम्नलिखित करने के बराबर है:

INSERT INTO Pets VALUES 
   (9, 3, 1, 'Woof', '2020-10-03'), 
   (10, 4, 5, 'Ears', '2022-01-11');

टेबल बनाते समय

VALUES स्टेटमेंट का इस्तेमाल CREATE TABLE … SELECT . में सोर्स टेबल की जगह पर भी किया जा सकता है और CREATE VIEW … SELECT बयान।

यहां एक उदाहरण दिया गया है:

CREATE TABLE t1 VALUES ROW(1,2,3), ROW(4,5,6);
SELECT * FROM t1;

परिणाम:

+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |        2 |        3 |
|        4 |        5 |        6 |
+----------+----------+----------+

हम यह भी कर सकते हैं:

CREATE TABLE t2 SELECT * FROM (VALUES ROW(1,2,3), ROW(4,5,6)) AS v;
SELECT * FROM t2;

परिणाम:

+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |        2 |        3 |
|        4 |        5 |        6 |
+----------+----------+----------+

वे दो CREATE TABLE कथन ऐसा करने के समान हैं:

CREATE TABLE t3 SELECT * FROM t2;
SELECT * FROM t3;

परिणाम:

+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |        2 |        3 |
|        4 |        5 |        6 |
+----------+----------+----------+

इस मामले में, मैंने t2 . का इस्तेमाल किया स्रोत तालिका के रूप में तालिका, VALUES . में मान प्रदान करने के बजाय बयान।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में सरणियों को कैसे स्टोर करें?

  2. MySQL में DATETIME को DATE के रूप में कैसे डाला जाए?

  3. उपयोगकर्ता खाता प्रबंधन, भूमिकाएं, अनुमतियां, प्रमाणीकरण PHP और MySQL

  4. MySQL संग्रहीत कार्यों और प्रक्रियाओं को कैसे बनाएं और निष्पादित करें

  5. MySQL डेटा निर्देशिका को कैसे बदलें?