UNION ALL के साथ बहु-लंबाई सबस्ट्रिंग
एक ही कॉलम से अलग-अलग लंबाई के सबस्ट्रिंग निकालकर UNION ALL से परिणाम संयोजित करें। UNION ALL डुप्लिकेट नहीं हटाता (तेज़)।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable856(Title TEXT); Query OK, 0 rows affected (0.89 sec)
रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable856 VALUES
('Introduction to MySQL'),('Java in depth'),('C++ with Data Structure');
Query OK, 3 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable856;
+-------------------------+ | Title | +-------------------------+ | Introduction to MySQL | | Java in depth | | C++ with Data Structure | +-------------------------+ 3 rows in set (0.00 sec)
दो अलग लंबाई के सबस्ट्रिंग जोड़ने की क्वेरी
mysql> SELECT SUBSTR(Title, 1, 12) FROM DemoTable856
UNION ALL
SELECT SUBSTR(Title, 1, 4) FROM DemoTable856;
परिणाम
+--------------------+ | SUBSTR(Title,1,12) | +--------------------+ | Introduction | | Java in dept | | C++ with Dat | | Intr | | Java | | C++ | +--------------------+ 6 rows in set (0.03 sec)
क्वेरी व्याख्या
- पहला
SELECT: प्रत्येक टाइटल के पहले 12 वर्ण - दूसरा
SELECT: प्रत्येक टाइटल के पहले 4 वर्ण UNION ALL: दोनों परिणाम सेट जोड़ता है (कुल 3 + 3 = 6 पंक्तियां)- कॉलम नाम पहले SELECT से लिया जाता है
SUBSTR() vs SUBSTRING()
दोनों समान हैं। SUBSTR(str, pos, len) या SUBSTRING(str FROM pos FOR len) (मानक SQL)।
लेबल कॉलम जोड़ना (पहचान के लिए)
SELECT 'First 12' AS Type, SUBSTR(Title, 1, 12) AS Substring FROM DemoTable856 UNION ALL SELECT 'First 4' AS Type, SUBSTR(Title, 1, 4) AS Substring FROM DemoTable856;
परिणाम
+-----------+--------------+ | Type | Substring | +-----------+--------------+ | First 12 | Introduction | | First 12 | Java in dept | | First 12 | C++ with Dat | | First 4 | Intr | | First 4 | Java | | First 4 | C++ | +-----------+--------------+
UNION vs UNION ALL
| पहलू | UNION | UNION ALL |
|---|---|---|
| डुप्लिकेट | हटाता है | रखता है |
| गति | धीमी (सॉर्ट/यूनिक) | तेज़ |
| उपयोग | अद्वितीय परिणाम चाहिए | सभी पंक्तियां चाहिए (सामान्य) |
एक क्वेरी में एकाधिक लंबाई (क्रॉस जॉइन ट्रिक)
SELECT SUBSTR(Title, 1, lengths.len) AS Substring FROM DemoTable856 CROSS JOIN (SELECT 12 AS len UNION ALL SELECT 4) AS lengths ORDER BY lengths.len, Title;
डायनामिक लंबाई (नंबर्स टेबल से)
SELECT SUBSTR(Title, 1, n) AS Substring FROM DemoTable856 JOIN (SELECT 4 AS n UNION ALL SELECT 8 UNION ALL SELECT 12) lens ON 1=1 ORDER BY n, Title;
उपयोग के मामले
- सर्च सजेशन/ऑटोकंप्लीट के लिए प्रीफिक्स जनरेट करना
- टेक्स्ट एनालिसिस में N-ग्राम निकालना
- विभिन्न लंबाई के प्रीव्यू/स्निपेट बनाना
- फजी मिलान के लिए वेरिएंट जनरेट करना