相关疑难解决方法(0)

IS NULL和= NULL之间有什么区别吗?

我很惊讶地看到IS NULL和= NULL在select查询中产生不同的结果.他们之间有什么区别?什么时候用.如果你能详细解释我,我会很高兴的.

sql sql-server sql-server-2005

42
推荐指数
3
解决办法
2万
查看次数

MySQL与null值比较

我在MySQL表中有一个名为CODE的列,它可以是NULL.假设我有一些CODE ='C'的行,我想在我的select结果集中忽略它.我的结果集中可以有CODE = NULL或CODE!='C'.

以下查询不返回CODE为NULL的行:

SELECT * from TABLE where CODE!='C'
Run Code Online (Sandbox Code Playgroud)

但是这个查询按预期工作,我知道这是正确的方法.

SELECT * from TABLE where CODE IS NULL OR CODE!='C'
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么只有CODE!='C'不返回CODE = NULL的行?绝对'C'不是NULL.我们在这里没有比较一个角色的价值.有人可以说明为什么它不起作用?

mysql sql null isnull

32
推荐指数
4
解决办法
5万
查看次数

什么是"= null"和"IS NULL"

"= null"和"IS NULL"有什么区别?他们如何使用不同的方式?

mysql database

31
推荐指数
3
解决办法
1万
查看次数

为什么SQL不支持"= null"而不是"null"?

我没有问,如果它.我知道事实并非如此.

我很好奇原因.我已经阅读了支持文档,例如关于在MySQL中使用Nulls的支持文档,但它们并没有给出任何理由.他们只重复你必须使用的"是空"的口头禅.

这一直困扰着我.在进行动态SQL(那些必须要做的极少数时间)时,将"null"传递给where子句会更容易:

@where = "where GroupId = null"
Run Code Online (Sandbox Code Playgroud)

这将是常规变量的简单替换.相反,我们必须使用if/else块来执行以下操作:

if @groupId is null then
     @where = "where GroupId is null"
else
     @where = "where GroupId = @groupId"
end
Run Code Online (Sandbox Code Playgroud)

在更大更复杂的查询中,这是一个巨大的痛苦.有没有特定的原因,SQL和所有主要的RDBMS供应商都不允许这样做?它会产生某种关键字冲突或价值冲突?

编辑:

许多答案的问题(在我看来)是每个人都在设置null和"我不知道它的值是什么"之间的等价.这两件事之间存在巨大差异.如果null意味着"有一个值,但它是未知的"我会100%同意空值不能相等.但SQL null并不意味着.这意味着没有价值.任何两个为null的SQL结果都没有值. 没有价值不等于未知价值.两件不同的事情.这是一个重要的区别.

编辑2:

我遇到的另一个问题是其他HLL允许null = null完全正常并适当地解决它.例如,在C#中,null = null返回true.

sql null

25
推荐指数
5
解决办法
6681
查看次数

IS NULL与<> 1 SQL位

我在SQL Server 2012数据库的表上有一个列.

我试图检索此位列为NULL或不正确的所有行.

此查询不会带回它应该的内容:(返回0行)

Select * 
from table 
where bit_column_value <> 1
Run Code Online (Sandbox Code Playgroud)

此查询返回正确的行:

Select * 
from table 
where bit_column_value IS NULL
Run Code Online (Sandbox Code Playgroud)

现在,我很乐意使用第二个查询,但我的问题是,在另一个表的类似查询中,上面的反向是正确的,第一种方式有效,但第二种方式不行!

有人可以协助解释上面的差异吗?我已经专门更新了相关的位列为NULL,这不会改变结果.(想想也许"空"和Null价值之间存在差异.

提前感谢您的任何解释.

sql sql-server null sql-server-2012

19
推荐指数
2
解决办法
3万
查看次数

DISTINCT NULL在SQL Server中返回单个NULL

在Sql Server中,NULL不等于NULL。(为什么在SQL Server 中NULL = NULL求值为false)那么以下代码为什么返回单个NULL。

CREATE TABLE #TEMP1
    (ID INT)
INSERT INTO #TEMP1
SELECT NULL
UNION ALL
SELECT NULL
SELECT DISTINCT ID FROM #TEMP1
DROP TABLE #TEMP1

ID
------
NULL
Run Code Online (Sandbox Code Playgroud)

我期望

ID
------
NULL
NULL
Run Code Online (Sandbox Code Playgroud)

sql-server

17
推荐指数
1
解决办法
782
查看次数

SQL不等于不返回NULL结果

table 'materials'
id   sku  content
10   IT2   Iron
11   IT3   Steel
12   IT4   Steel
13   IT5   NULL
14   IT6   Iron
15   IT7   Glass

select id, sku, content from materials where content !='Iron';
Run Code Online (Sandbox Code Playgroud)

返回结果:

id   sku   content
11   IT3   Steel
12   IT4   Steel
15   IT7   Glass
Run Code Online (Sandbox Code Playgroud)

为什么在结果集中没有返回NULL值的id#13?使用MYSQL.

mysql sql

12
推荐指数
1
解决办法
5131
查看次数

什么时候`x IS NOT NULL`与`NOT(x IS NULL)`不一样

对于什么x

表达x IS NOT NULL 不等于NOT(x IS NULL),如在2VL的情况下

(引用这个答案,引用Fabian Pascal 数据库管理中的实际问题 - 思维从业者的参考 - 接近答案的结尾)

我的猜测是什么时候x IS NULL NULL,但我无法猜测是什么时候(即我没有检查SQL标准). 这个猜测是不正确的.

sql null

11
推荐指数
2
解决办法
878
查看次数

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

可能重复:
为什么NULL = NULL在SQL Server中评估为false

如果您生成一个查询以在表"MyTab"中插入数据列--- Age,Sex,DOB,ID

INSERT INTO MyTab 
VALUES (22, '', '', 4)
Run Code Online (Sandbox Code Playgroud)

Sex&DOB专栏的价值是多少?它是NULL吗?

如果值为NULL则---

 SELECT * FROM MyTab
 WHERE Sex=NULL
Run Code Online (Sandbox Code Playgroud)

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

如果值不为NULL则---

 SELECT * FROM Mytab
 WHERE Sex IS NULL
Run Code Online (Sandbox Code Playgroud)

上面的查询给出了输出----如何?

sql null

8
推荐指数
2
解决办法
1万
查看次数

查询"IS NULL"时,为什么索引列会慢慢返回结果?

我有一个2500万行的表,索引适当.

但添加该子句AND status IS NULL会将超快速查询转换为疯狂的慢查询.

请帮我加快速度.

查询:

SELECT 
    student_id,
    grade,
    status
FROM 
    grades
WHERE 
        class_id = 1
    AND status IS NULL       -- This line delays results from <200ms to 40-70s!
    AND grade BETWEEN 0 AND 0.7
LIMIT 25;
Run Code Online (Sandbox Code Playgroud)

表:

CREATE TABLE IF NOT EXISTS `grades` (
  `student_id` BIGINT(20) NOT NULL,
  `class_id` INT(11) NOT NULL,
  `grade` FLOAT(10,6) DEFAULT NULL,
  `status` INT(11) DEFAULT NULL,
  UNIQUE KEY `unique_key` (`student_id`,`class_id`),
  KEY `class_id` (`class_id`),
  KEY `status` (`status`),
  KEY `grade` (`grade`)
) ENGINE=INNODB DEFAULT …
Run Code Online (Sandbox Code Playgroud)

mysql sql optimization null query-optimization

7
推荐指数
1
解决办法
66
查看次数