0

关于两者的区别...

select * from table_a where id != 30 and name != 'Kevin';

select * from table_a where id != 30 or name != 'Kevin';

第一个意思是,"select all rows from table_a where the id is not 30 and the name is not Kevin"

因此,第一个查询将返回 {30, 'Bill'} 的 {Id, Name} 行。

但是,第二个意思是,"select all rows from table_a where the id is not 30 or the name is not 'Kevin'"

所以上面的 {30, 'Bill'}不会从第二个查询中返回。

那正确吗?

4

4 回答 4

2
select * from table_a where id != 30 and name != 'Kevin';

因此,第一个查询将返回 {30, 'Bill'} 的 {Id, Name} 行。

不,它不会。

select * from table_a where id != 30 or name != 'Kevin';

所以上面的 {30, 'Bill'}不会从第二个查询中返回。

不,它会的。你有倒退的逻辑。去尝试一下。

于 2012-12-19T17:17:50.330 回答
0

回顾:

A   B   not(A)  not(B)      AND     OR
1   1   0         0         0       0
1   0   0         1         0       1
0   1   1         0         0       1
0   0   1         1         1       1

因此,只有在以下情况下,这两个查询才会返回相同的行:

1- id=30 和 name='Kevin'

或者

2- id!=30 和 name!='Kevin'

于 2012-12-19T17:37:14.927 回答
0

快速逻辑表达式转换技巧:

非(A 和 B)== 非 A 或非 B

非(A 或 B)== 非 A 且非 B

于 2015-04-17T22:13:59.770 回答
0

没有。第二个查询的意思是“选择 id 不是 30 或名称不是 'Kevin' 的所有行”,因此 'Bill' 的名称有资格包含在查询中的记录。

于 2012-12-19T17:14:41.507 回答