MySQL में IF() फ़ंक्शन और CASE WHEN का उपयोग करके सशर्त तर्क
MySQL SELECT स्टेटमेंट में सशर्त तर्क के लिए दो मुख्य तरीके प्रदान करता है: सरल IF() फ़ंक्शन और अधिक शक्तिशाली CASE WHEN अभिव्यक्ति।
टेबल बनाना
mysql> CREATE TABLE DemoTable1966 (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName VARCHAR(20),
-> PhotoLiked INT
-> );
Query OK, 0 rows affected (0.00 sec)
डेटा डालना
mysql> INSERT INTO DemoTable1966(UserName, PhotoLiked) VALUES ('Chris', 57);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1966(UserName, PhotoLiked) VALUES ('David', 100);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1966(UserName, PhotoLiked) VALUES ('Mike', 68);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1966(UserName, PhotoLiked) VALUES ('Sam', 78);
Query OK, 1 row affected (0.00 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable1966;
+--------+----------+------------+
| UserId | UserName | PhotoLiked |
+--------+----------+------------+
| 1 | Chris | 57 |
| 2 | David | 100 |
| 3 | Mike | 68 |
| 4 | Sam | 78 |
+--------+----------+------------+
4 rows in set (0.00 sec)
IF() फ़ंक्शन का उपयोग (सरल शर्तें)
mysql> SELECT IF(PhotoLiked > 75, UserName, 'Likes are less') AS Result
-> FROM DemoTable1966;
परिणाम
+------------------------------------------------+
| Result |
+------------------------------------------------+
| Likes are less |
| David |
| Likes are less |
| Sam |
+------------------------------------------------+
4 rows in set (0.00 sec)
IF() सिंटैक्स
IF(condition, value_if_true, value_if_false)
- condition: कोई भी अभिव्यक्ति जो TRUE/FALSE/NULL मूल्यांकन करती है
- value_if_true: condition TRUE होने पर लौटाया गया मान
- value_if_false: condition FALSE या NULL होने पर लौटाया गया मान
CASE WHEN अभिव्यक्ति (जटिल शर्तें)
SELECT
UserName,
PhotoLiked,
CASE
WHEN PhotoLiked >= 90 THEN 'Excellent'
WHEN PhotoLiked >= 75 THEN 'Good'
WHEN PhotoLiked >= 60 THEN 'Average'
ELSE 'Needs Improvement'
END AS Rating
FROM DemoTable1966;
परिणाम
+----------+------------+----------------------+
| UserName | PhotoLiked | Rating |
+----------+------------+----------------------+
| Chris | 57 | Needs Improvement |
| David | 100 | Excellent |
| Mike | 68 | Average |
| Sam | 78 | Good |
+----------+------------+----------------------+
IF() vs CASE WHEN तुलना
| विशेषता | IF() | CASE WHEN |
|---|---|---|
| शर्तें | एकल | एकाधिक |
| पठनीयता | सरल के लिए अच्छी | जटिल के लिए बेहतर |
| मानक SQL | नहीं (MySQL-विशिष्ट) | हाँ (ANSI SQL) |
| नेस्टिंग | संभव लेकिन गन्दा | स्पष्ट |
| NULL संचालन | FALSE के रूप में | स्पष्ट WHEN IS NULL |
WHERE क्लॉज में उपयोग
-- IF() के साथ
SELECT * FROM DemoTable1966
WHERE IF(PhotoLiked > 75, 1, 0) = 1;
-- CASE के साथ (अधिक मानक)
SELECT * FROM DemoTable1966
WHERE CASE WHEN PhotoLiked > 75 THEN 1 ELSE 0 END = 1;
ORDER BY में उपयोग
SELECT * FROM DemoTable1966
ORDER BY CASE
WHEN PhotoLiked >= 90 THEN 1
WHEN PhotoLiked >= 75 THEN 2
ELSE 3
END, UserName;
एग्रीगेशन में उपयोग
SELECT
COUNT(*) AS Total,
SUM(IF(PhotoLiked > 75, 1, 0)) AS HighLikes,
SUM(IF(PhotoLiked <= 75, 1, 0)) AS LowLikes
FROM DemoTable1966;
NULL संचालन
-- IF() NULL को FALSE मानता है
SELECT IF(NULL, 'true', 'false'); -- 'false'
-- CASE के लिए स्पष्ट NULL जांच
CASE
WHEN col IS NULL THEN 'Null'
WHEN col > 10 THEN 'High'
ELSE 'Low'
END
सर्वोत्तम अभ्यास
- सरल द्विआधारी शर्तों के लिए
IF()उपयोग करें - एकाधिक शर्तों या मानक SQL अनुपालन के लिए
CASE WHENउपयोग करें - हमेशा
ELSEक्लॉज शामिल करें - गहरे नेस्टिंग से बचें - CTE या व्यू पर विचार करें