Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में UNION ALL का उपयोग करके कस्टम कॉलम्स के लिए एकाधिक मान सेट करें

MySQL में UNION ALL का उपयोग करके व्युत्पन्न कॉलम मान उत्पन्न करना

UNION ALL का उपयोग करके आप एक ही टेबल पर अलग-अलग गणनाएँ कर सकते हैं और परिणामों को लंबवत रूप से संयोजित कर सकते हैं, जिससे प्रभावी रूप से प्रत्येक मूल पंक्ति के लिए कई व्युत्पन्न पंक्तियाँ बनती हैं।

टेबल बनाना

mysql> CREATE TABLE DemoTable1987 (
    -> UserValue INT
    -> );
Query OK, 0 rows affected (2.90 sec)

डेटा डालना

mysql> INSERT INTO DemoTable1987 VALUES (4);
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO DemoTable1987 VALUES (5);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable1987 VALUES (6);
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable1987 VALUES (7);
Query OK, 1 row affected (0.09 sec)

मूल डेटा

mysql> SELECT * FROM DemoTable1987;
+-----------+
| UserValue |
+-----------+
|         4 |
|         5 |
|         6 |
|         7 |
+-----------+
4 rows in set (0.00 sec)

UNION ALL के साथ दो व्युत्पन्न कॉलम मान उत्पन्न करना

mysql> SELECT UserValue, (UserValue * 100) AS NewValue FROM DemoTable1987
    -> UNION ALL
    -> SELECT UserValue, (UserValue * 50) AS NewValue FROM DemoTable1987
    -> ORDER BY UserValue;

परिणाम

+-----------+----------+
| UserValue | NewValue |
+-----------+----------+
|         4 |      400 |  -- 4 * 100
|         4 |      200 |  -- 4 * 50
|         5 |      500 |  -- 5 * 100
|         5 |      250 |  -- 5 * 50
|         6 |      300 |  -- 6 * 50
|         6 |      600 |  -- 6 * 100
|         7 |      350 |  -- 7 * 50
|         7 |      700 |  -- 7 * 100
+-----------+----------+
8 rows in set (0.14 sec)

व्याख्या

  • पहला SELECT: प्रत्येक UserValue को 100 से गुणा करता है
  • दूसरा SELECT: प्रत्येक UserValue को 50 से गुणा करता है
  • UNION ALL: दोनों परिणाम सेट्स को संयोजित करता है (डुप्लिकेट रखता है)
  • ORDER BY UserValue: स्रोत मान द्वारा क्रमबद्ध करता है

UNION vs UNION ALL

-- UNION: डुप्लिकेट हटाता (यदि 4*100 = 5*80 होता, तो एक पंक्ति हट जाती)
-- UNION ALL: सभी पंक्तियाँ रखता (तेज़, आमतौर पर वांछित)

स्रोत पहचान कॉलम जोड़ना

SELECT UserValue, (UserValue * 100) AS NewValue, 'x100' AS Multiplier FROM DemoTable1987
UNION ALL
SELECT UserValue, (UserValue * 50) AS NewValue, 'x50' AS Multiplier FROM DemoTable1987
ORDER BY UserValue, Multiplier;

परिणाम

+-----------+----------+------------+
| UserValue | NewValue | Multiplier |
+-----------+----------+------------+
|         4 |      400 | x100       |
|         4 |      200 | x50        |
|         5 |      500 | x100       |
|         5 |      250 | x50        |
|         6 |      600 | x100       |
|         6 |      300 | x50        |
|         7 |      700 | x100       |
|         7 |      350 | x50        |
+-----------+----------+------------+

वैकल्पिक दृष्टिकोण: CROSS JOIN (अधिक घोषणात्मक)

SELECT 
    d.UserValue,
    d.UserValue * m.Multiplier AS NewValue,
    CONCAT('x', m.Multiplier) AS Multiplier
FROM DemoTable1987 d
CROSS JOIN (
    SELECT 100 AS Multiplier UNION ALL SELECT 50
) m
ORDER BY d.UserValue, m.Multiplier DESC;

लाभ CROSS JOIN के

  • गणना तर्क केंद्रीकृत है
  • गुणक जोड़ना/बदलना आसान
  • टेबल को एक बार स्कैन करता है (बड़े टेबल्स के लिए बेहतर)
  • अधिक पठनीय और रखरखाव योग्य

व्यावहारिक उपयोग मामले

  1. मूल्य निर्धारण परिदृश्य: विभिन्न मार्जिन/छूट पर मूल्य गणना
  2. पूर्वानुमान: विभिन्न वृद्धि दरों के साथ अनुमान
  3. सिमुलेशन: विभिन्न मान्यताओं के तहत परिणाम उत्पन्न करना
  4. परीक्षण डेटा: विभिन्न पैरामीटर्स के साथ परीक्षण मामले बनाना

प्रदर्शन नोट

  • UNION ALL: टेबल को N बार स्कैन करता है (N = SELECT की संख्या)
  • CROSS JOIN: टेबल को एक बार स्कैन करता है, व्युत्पन्न टेबल के साथ जुड़ता है
  • बड़े टेबल्स के लिए, CROSS JOIN या व्युत्पन्न टेबल दृष्टिकोण पसंद करें
  1. - MySQL में 0 या 1 मान वाले कॉलम के लिए शर्तें सेट करें

    शर्तें सेट करने के लिए MySQL में CASE WHEN स्टेटमेंट का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Value1 int, -> Value2 int, -> Value3 int, -> Value4 int -> ); Query OK, 0 rows affected (0.98 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉ

  1. - MySQL में IF स्टेटमेंट से ENUM मानों के लिए कस्टम संदेश सेट करें

    IF() फ़ंक्शन से ENUM Y/N को पठनीय संदेश में बदलें ENUM कॉलम के Y/N मानों को Active Member/Not Active Member जैसे कस्टम संदेश में बदलने के लिए IF() का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable1992 ( ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ClientName varchar(20),

  1. - MySQL में कॉलम मानों के लिए ENUM कैसे सेट करें?

    ENUM कॉलम के साथ टेबल बनाना टेबल बनाते समय ENUM प्रकार निर्दिष्ट करें: ); रिकॉर्ड डालना INSERT INTO DemoTable2019 VALUES (45, Second); सभी रिकॉर्ड देखना SELECT * FROM DemoTable2019; +--------------+---------------+ | StudentMarks | StudentStatus | +--------------+---------------+ | 96