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

MySQL में <> NULL और IS NOT NULL का अंतर

मूल समस्या: NULL तुलना

SQL में NULL "अज्ञात मान" दर्शाता है। किसी भी मान की तुलना NULL से (यहां तक कि NULL से भी) मानक तुलना ऑपरेटर्स (=, <>, <, >, आदि) का उपयोग करके NULL (सत्य/असत्य नहीं) लौटाती है।

<> ऑपरेटर के साथ तुलना (हमेशा NULL)

mysql> SELECT 10 <> NULL;
+------------+
| 10 <> NULL |
+------------+
| NULL       |
+------------+

mysql> SELECT NULL <> NULL;
+--------------+
| NULL <> NULL |
+--------------+
| NULL         |
+--------------+

mysql> SELECT 'Chris' <> NULL;
+-----------------+
| 'Chris' <> NULL |
+-----------------+
| NULL            |
+-----------------+

mysql> SELECT '' <> NULL;
+------------+
| '' <> NULL |
+------------+
| NULL       |
+------------+

परिणाम: सभी NULL लौटाते हैं - कोई पंक्ति मेल नहीं खाती।

टेबल उदाहरण

mysql> CREATE TABLE DemoTable846(Value INT);
Query OK, 0 rows affected (0.93 sec)

mysql> INSERT INTO DemoTable846 VALUES(NULL),(10);
Query OK, 2 rows affected (...)

mysql> SELECT * FROM DemoTable846;
+-------+
| Value |
+-------+
| NULL  |
| 10    |
+-------+
2 rows in set (0.00 sec)

IS NOT NULL ऑपरेटर (सही तरीका)

mysql> SELECT * FROM DemoTable846 WHERE Value IS NOT NULL;

परिणाम

+-------+
| Value |
+-------+
| 10    |
+-------+
1 row in set (0.00 sec)

<> NULL का उपयोग (गलत तरीका)

mysql> SELECT * FROM DemoTable846 WHERE Value <> NULL;

परिणाम

Empty set (0.00 sec)

क्यों?

  • NULL का अर्थ "अज्ञात" है
  • 10 <> NULL → "क्या 10 अज्ञात मान से अलग है?" → "अज्ञात" (NULL)
  • NULL <> NULL → "क्या अज्ञात, अज्ञात से अलग है?" → "अज्ञात" (NULL)
  • WHERE क्लॉज केवल TRUE वाली पंक्तियां लौटाता है, NULL या FALSE नहीं

सही NULL जांच

जांचसही सिंटैक्सगलत सिंटैक्स
NULL हैIS NULL= NULL
NULL नहीं हैIS NOT NULL<> NULL, != NULL

NULL-सेफ इक्वलिटी ऑपरेटर: <=>

mysql> SELECT NULL <=> NULL;    -- 1 (सत्य)
mysql> SELECT 10 <=> NULL;      -- 0 (असत्य)
mysql> SELECT 'a' <=> 'a';      -- 1 (सत्य)
  • <=> (NULL-सेफ इक्वल) NULL को सामान्य मान की तरह मानता है
  • NULL <=> NULL सत्य (1) है
  • WHERE col <=> NULL WHERE col IS NULL के समान

COALESCE/IFNULL से तुलना

-- गैर-NULL मानों के लिए
WHERE COALESCE(Value, -1) <> -1  -- Value IS NOT NULL के समान

-- लेकिन IS NOT NULL अधिक पठनीय और इंडेक्स-फ्रेंडली है

सारांश

नियम: NULL जांच के लिए हमेशा IS NULL / IS NOT NULL (या <=>) का उपयोग करें। = NULL, <> NULL, != NULL कभी काम नहीं करते।
  1. - MySQL में intvalue='1' और intvalue=1 में अंतर

    उत्तर intvalue = 1 उपयोग करें। स्टेटमेंट intvalue = 1 आंतरिक रूप से MySQL द्वारा CAST(1 AS INT) में कन्वर्ट हो जाता है। उदाहरण: टेबल बनाना और डेटा डालना ); Query OK, 0 rows affected (0.64 sec) INSERT INTO DemoTable1566 VALUES(90); Query OK, 1 row affected (0.19 sec) सभी रिकॉर्ड देखना SELECT *

  1. - MySQL में != NULL और IS NOT NULL का अंतर

    NULL तुलना: != NULL बनाम IS NOT NULL MySQL में किसी मान की तुलना !=NULL से करने पर परिणाम NULL होता है, इसलिए !=NULL अर्थहीन है। सही तरीका IS NOT NULL है। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable1970 ( Value int ); Query OK, 0 rows affected (0.00 sec) mysql> insert into DemoTabl

  1. - MySQL और PostgreSQL के बीच अंतर

    MySQL और PostgreSQL: विस्तृत तुलना MySQL और PostgreSQL दो सबसे लोकप्रिय ओपन-सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) हैं। जबकि दोनों SQL मानकों का समर्थन करते हैं और कई समान विशेषताएं साझा करते हैं, उनकी आर्किटेक्चर, क्षमताओं और आदर्श उपयोग मामलों में महत्वपूर्ण अंतर हैं। MySQL अवलोकन प्रकार