4 sql
以下查询之间有什么区别:
SELECT * FROM employee WHERE NOT(start_date > '01-JAN-1970');
Run Code Online (Sandbox Code Playgroud)
而这个查询:
SELECT * FROM employee WHERE start_date < '01-JAN-1970';
Run Code Online (Sandbox Code Playgroud)
有什么区别,如果有的话,如何NOT(x > y)使用不同(x < y).谁能提供一个例子?
谢谢.
在MySQL和PostgreSQL
SELECT * FROM employee WHERE not(start_date > '01-JAN-1970')
Run Code Online (Sandbox Code Playgroud)
不会使用INDEXon,start_date如果有的话,他们的优化器不够聪明.
否则,如果你纠正其条件不符合的情况下(任exaсtly一个不严格not(start_date >= '01-JAN-1970')或start_date <= '01-JAN-1970'),查询是相等的.
非等价的
SELECT * FROM employee WHERE not(start_date > '01-JAN-1970');
Run Code Online (Sandbox Code Playgroud)
是
SELECT * FROM employee WHERE start_date <= '01-JAN-1970';
Run Code Online (Sandbox Code Playgroud)
不
SELECT * FROM employee WHERE start_date < '01-JAN-1970';
Run Code Online (Sandbox Code Playgroud)
因为那会错过start_date = '01 -JAN-1970'的情况