MySQL में TINYINT कॉलम (आमतौर पर बूलियन के लिए उपयोग) पर <> 1 या IS NULL शर्त से रिकॉर्ड फ़िल्टर कर सकते हैं।
उदाहरण: अविवाहित (isMarried ≠ 1) या अज्ञात (NULL) कर्मचारी
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable (
-> EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName VARCHAR(20),
-> isMarried TINYINT
-> );
2. डेटा डालें
mysql> INSERT INTO DemoTable(EmployeeName, isMarried) VALUES('Chris', NULL);
mysql> INSERT INTO DemoTable(EmployeeName, isMarried) VALUES('David', 1);
mysql> INSERT INTO DemoTable(EmployeeName, isMarried) VALUES('Mike', 0);
mysql> INSERT INTO DemoTable(EmployeeName, isMarried) VALUES('Sam', NULL);
mysql> INSERT INTO DemoTable(EmployeeName, isMarried) VALUES('Bob', 0);
3. सभी रिकॉर्ड
mysql> SELECT * FROM DemoTable;
+------------+--------------+-----------+ | EmployeeId | EmployeeName | isMarried | +------------+--------------+-----------+ | 1 | Chris | NULL | | 2 | David | 1 | | 3 | Mike | 0 | | 4 | Sam | NULL | | 5 | Bob | 0 | +------------+--------------+-----------+
4. शर्त: isMarried ≠ 1 OR IS NULL
mysql> SELECT * FROM DemoTable
-> WHERE isMarried <> 1 OR isMarried IS NULL;
5. परिणाम
+------------+--------------+-----------+ | EmployeeId | EmployeeName | isMarried | +------------+--------------+-----------+ | 1 | Chris | NULL | | 3 | Mike | 0 | | 4 | Sam | NULL | | 5 | Bob | 0 | +------------+--------------+-----------+
तर्क तालिका
| isMarried | <> 1 | IS NULL | OR परिणाम |
|---|---|---|---|
| NULL | UNKNOWN | TRUE | TRUE ✓ |
| 0 | TRUE | FALSE | TRUE ✓ |
| 1 | FALSE | FALSE | FALSE ✗ |
महत्वपूर्ण: NULL तुलना
NULL <> 1का परिणामUNKNOWNहोता है (TRUE नहीं)- इसलिए
OR isMarried IS NULLआवश्यक है NOT (isMarried = 1)भी NULL को बाहर रखेगा
बेहतर विकल्प
-- स्पष्ट और सुरक्षित WHERE isMarried IS NULL OR isMarried = 0 -- या COALESCE के साथ WHERE COALESCE(isMarried, 0) <> 1 -- या NOT IN (NULL सुरक्षित नहीं) WHERE isMarried NOT IN (1) -- NULL के लिए FALSE देता है!
सर्वोत्तम अभ्यास
बूलियन फ्लैग के लिए NOT NULL DEFAULT 0 उपयोग करें ताकि NULL हैंडलिंग सरल हो।