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