MySQL में UPPER() और IN() का उपयोग करके केस-असंवेदनशील SELECT करना
MySQL में केस-असंवेदनशील IN() क्वेरी
डिफ़ॉल्ट रूप से, MySQL स्ट्रिंग तुलना कॉलेशन पर निर्भर करती है। IN() के साथ स्पष्ट केस-असंवेदनशील मिलान के लिए, तुलना से पहले दोनों पक्षों पर UPPER() या LOWER() लागू करें।
उदाहरण: नाम फ़िल्टरिंग
mysql> CREATE TABLE DemoTable1460 (
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.91 sec)
mysql> INSERT INTO DemoTable1460 VALUES ('Chris'), ('David'), ('Bob'), ('Robert');
Query OK, 4 rows affected (0.15 sec)
mysql> SELECT * FROM DemoTable1460;
+--------+
| Name |
+--------+
| Chris |
| David |
| Bob |
| Robert |
+--------+
4 rows in set (0.00 sec)
केस-असंवेदनशील IN() क्वेरी
mysql> SELECT * FROM DemoTable1460
-> WHERE UPPER(Name) IN ('CHRIS', 'BOB');
परिणाम
+-------+
| Name |
+-------+
| Chris |
| Bob |
+-------+
2 rows in set (0.00 sec)
तरीकों की तुलना
विधि
क्वेरी
केस-असंवेदनशील?
इंडेक्स उपयोग
UPPER/LOWER
WHERE UPPER(col) IN (...)
हां
नहीं (कॉलम पर फ़ंक्शन)
केस-असंवेदनशील कॉलेशन
WHERE col IN (...) COLLATE utf8mb4_general_ci
हां
हां (यदि कॉलम कॉलेशन मेल खाता है)
बाइनरी तुलना
WHERE BINARY col IN (...)
नहीं (केस-संवेदनशील)
हां
सर्वोत्तम अभ्यास
स्कीमा स्तर: केस-असंवेदनशील कॉलेशन का उपयोग करें (utf8mb4_general_ci, utf8mb4_unicode_ci)
क्वेरी स्तर: तदर्थ केस-असंवेदनशीलता के लिए UPPER()/LOWER()
प्रदर्शन: बड़े टेबल पर UPPER() पूर्ण स्कैन का कारण बनता है; कॉलेशन या फंक्शनल इंडेक्स (MySQL 8.0+) पसंद करें
फंक्शनल इंडेक्स (MySQL 8.0+)
ALTER TABLE DemoTable1460
ADD INDEX idx_upper_name ((UPPER(Name)));
फिर WHERE UPPER(Name) IN (...) इंडेक्स का उपयोग कर सकता है।
MySQL में CASE WHEN का उपयोग करके सशर्त तर्क
MySQL में CASE WHEN अभिव्यक्ति आपको SQL क्वेरीज़ के अंदर सशर्त तर्क (if-else तर्क) लागू करने की अनुमति देती है। यह SELECT, WHERE, ORDER BY, GROUP BY आदि में उपयोग किया जा सकता है।
टेबल बनाना
);
Query OK, 0 rows affected (0.63 sec)
डेटा डालना
INSERT IN
MySQL का INSERT INTO ... SELECT स्टेटमेंट एक क्वेरी में एक टेबल से डेटा चुनकर दूसरी टेबल में डालता है।
सिंटैक्स
INSERT INTO लक्ष्य_टेबल (कॉलम1, कॉलम2, ...)
SELECT कॉलम1, कॉलम2, ...
FROM स्रोत_टेबल
WHERE शर्त;
उदाहरण: NULL रहित रिकॉर्ड कॉपी करना
1. स्रोत टेबल बनाएं
);
2. डेटा डालें (कुछ NULL के
MySQL में शर्ती गिनती (कंडीशनल काउंट) करने के लिए SUM(CASE WHEN ... THEN 1 ELSE 0 END) पैटर्न का उपयोग करें। यह एक ही क्वेरी में एकाधिक शर्तों की गिनती करने का कुशल तरीका है।
उदाहरण: विशिष्ट मार्क्स की गिनती प्रति छात्र
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1910 (
FirstName VARCHAR