Postgresql 理解Postgres查询

Postgresql 理解Postgres查询,postgresql,Postgresql,关于 select * from table_a where id != 30 and name != 'Kevin'; 及 第一个表示,“从表a中选择id不是30且名称不是Kevin的所有行” 因此{30,'Bill'}的{Id,Name}行将从第一个查询返回 但是,第二个表示“选择表a中id不是30或名称不是“Kevin”的所有行” 因此,上述{30,'Bill'}将不从第二个查询返回 是这样吗?不是。第二个查询意味着“选择id不是30或名称不是“Kevin”的所有行”,因此“Bill”的

关于

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

第一个表示,
“从表a中选择id不是30且名称不是Kevin的所有行”

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

但是,第二个表示“选择表a中id不是30或名称不是“Kevin”的所有行”

因此,上述{30,'Bill'}将从第二个查询返回


是这样吗?

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

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'}将从这一秒返回 询问

不,会的。你的逻辑倒过来了。试试看。

重述一下:

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和名字!='Kevin'

快速逻辑表达式转换提示:

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


NOT(A或B)=NOT A和NOT B

您应该将其与所问的问题联系起来。为什么DeMorgan在这里适用?
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