为什么column = NULL不返回任何行?

发布于 2024-09-26 10:30:03 字数 747 浏览 3 评论 0原文

可能的重复:
为什么 NULL = NULL 在 SQL Server 中计算结果为 false< /a>

如果生成查询以将数据插入表“MyTab”中的列 --- Age、Sex、DOB、ID,

INSERT INTO MyTab 
VALUES (22, '', '', 4)

Sex & 列中的值将是多少?出生日期? 是NULL吗?

如果值为 NULL,那么 ---

 SELECT * FROM MyTab
 WHERE Sex=NULL

上面的查询给出输出 ---- 没有选择行 --- 为什么?

如果值不为 NULL 那么 ---

 SELECT * FROM Mytab
 WHERE Sex IS NULL

上面的查询给出输出 ---- 怎么样?

Possible Duplicate:
Why does NULL = NULL evaluate to false in SQL server

If you generate a query to insert the data in table "MyTab" for column --- Age, Sex, DOB, ID

INSERT INTO MyTab 
VALUES (22, '', '', 4)

What'll be the value in column Sex & DOB ?
Is it NULL ?

If value is NULL then ---

 SELECT * FROM MyTab
 WHERE Sex=NULL

above query gives output ---- no rows selected --- why ??

if value is not NULL then ---

 SELECT * FROM Mytab
 WHERE Sex IS NULL

above query gives the output ---- how ??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

鹿港巷口少年归 2024-10-03 10:30:03

NULL 是 SQL 中的一个特殊值,表示缺少数据。因此,您不能执行如下查询:

SELECT fields FROM table WHERE column = NULL

NULL 不能与任何内容进行比较,包括 NULL 本身。相反,您需要:

SELECT fields FROM table WHERE column IS NULL

但是在您的情况下,您实际上是在 SexDOB 中插入空值。
并且空值不是NULL。您必须查询:

SELECT fields FROM table WHERE column = ''

NULL is a special value in SQL denoting the absence of data. As such, you cannot do queries like:

SELECT fields FROM table WHERE column = NULL

NULL cannot be compared to anything, including NULL itself. Instead, you'd need:

SELECT fields FROM table WHERE column IS NULL

However in your case you are really inserting an empty value in Sex and DOB.
And empty value is not NULL. You'd have to query for:

SELECT fields FROM table WHERE column = ''
再浓的妆也掩不了殇 2024-10-03 10:30:03

来自 空 (SQL)

对 Null 工作原理的误解是
造成大量错误的原因
在 SQL 代码中,均在 ISO 标准 SQL 中
语句和具体的SQL
现实世界支持的方言
数据库管理系统。 这些
错误通常是由于
Null 和 0 之间的混淆
(零)或空字符串(字符串
长度为零的值,
在 SQL 中表示为 '')。
Null 是
ISO SQL 标准定义为
与空字符串不同
然而,数值为 0。
而 Null 表示不存在
任何值、空字符串和
数字零都代表实际
值。

同样来自 SET ANSI_NULLS

当 SET ANSI_NULLS 为 OFF 时,等于
(=) 和不等于 (<>) 比较
运算符不遵循 SQL-92
标准。使用 SELECT 语句
WHERE 列名 = NULL 返回
column_name 中包含空值的行。
使用 WHERE 的 SELECT 语句
列名 <> NULL 返回行
列中包含非空值。在
另外,一个 SELECT 语句使用
WHERE 列名 <> XYZ_值返回
所有不是 XYZ 值的行以及
不为 NULL。

From Null (SQL)

Misunderstanding of how Null works is
the cause of a great number of errors
in SQL code, both in ISO standard SQL
statements and in the specific SQL
dialects supported by real-world
database management systems. These
mistakes are usually the result of
confusion between Null and either 0
(zero) or an empty string (a string
value with a length of zero,
represented in SQL as '').
Null is
defined by the ISO SQL standard as
different from both an empty string
and the numerical value 0, however.
While Null indicates the absence of
any value, the empty string and
numerical zero both represent actual
values.

Also from SET ANSI_NULLS

When SET ANSI_NULLS is OFF, the Equals
(=) and Not Equal To (<>) comparison
operators do not follow the SQL-92
standard. A SELECT statement using
WHERE column_name = NULL returns the
rows with null values in column_name.
A SELECT statement using WHERE
column_name <> NULL returns the rows
with nonnull values in the column. In
addition, a SELECT statement using
WHERE column_name <> XYZ_value returns
all rows that are not XYZ value and
that are not NULL.

捎一片雪花 2024-10-03 10:30:03

'' - 这意味着空字符串。如果你想插入NULL,你需要使用

 INSERT INTO MyTab 
          VALUES (22, '', NULL, 4)

'' - it`s mean empty string. If you want to insert NULL,you need yo use

 INSERT INTO MyTab 
          VALUES (22, '', NULL, 4)
葬シ愛 2024-10-03 10:30:03

NULL 意味着没有数据(甚至不是空白或空的东西),因此 Column = NULL 不会起作用,尽管 Column IS NULL 应该返回该列为 NULL 的行。但是您正在插入 '' 值,因此与 NULL 进行比较不会返回任何行。

NULL means no data (not even blank or empty stuff), so Column = NULL is not going to work although Column IS NULL should return rows with that column as NULL. But you're inserting '' value so comparing with NULL won't return any rows.

断念 2024-10-03 10:30:03

正如其他人所说,第一个查询不返回任何输出,因为您无法使用等于运算符检查 NULL。第二个查询更令人费解 - 我唯一的猜测是您正在使用 Oracle,它将空字符串视为 NULL。

有关“性别”和“出生日期”字段中的值的问题的答案取决于这些字段的类型以及您正在使用的数据库引擎。

As others said, first query returns no output because you cannot check for NULL with equals operator. The second query is more puzzling - my only guess is that you are using Oracle which treats empty strings as NULLs.

The answer to the question about values in Sex and DOB fields would depend on the type of those fields and database engine you are working with.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文