在我看来,您可以使用NOT EXISTS,NOT IN或LEFT JOIN WHERE IS NULL在SQL查询中执行相同的操作。例如:
SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)
SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)
SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL
我不确定所有语法是否正确,但这是我所见过的常规技术。我为什么选择一个使用另一个?性能会有所不同吗?哪一个是最快/最有效的?(如果取决于实现,我什么时候会使用每个?)
EXISTS
子句中返回的确切内容。您可以返回*
,NULL
或任何其他方式:所有这些都将被优化。
SELECT
和之间放置一些内容的FROM
。而且*
更容易输入。是的,SQL
确实与自然语言有些相似,但是它是由一台机器(一台编程的机器)解析并执行的。这并不是说它会突然闯入您的隔间并大喊“停止EXISTS
查询中多余的字段,因为我讨厌解析它们然后扔掉它们!”。真的,用电脑还可以。