我应该在mysql中使用AND/OR运算符来查询吗?

Sla*_*a32 0 mysql sql

帮助我们找到适合以下情况的操作员:

假设有一个表Employee

e_id | e_name | location
  1     Mett    New York
  2     Bill    Düsseldorf
  3     Sam     Portland
  4     Dave    Valencia
  5     Max     New York
  6     Alex    Portland
  7     Andy    Düsseldorf
  8     John    New York
Run Code Online (Sandbox Code Playgroud)

问题:谁不在杜塞尔多夫或纽约工作?

在这种情况下你会使用运算符OR或AND吗?

我知道这是一个愚蠢的问题,但我一直在和这个问题的某个人争论......她说,我说,或者说.不知道现在用什么.

谢谢!

Aln*_*tak 5

使用OR是恕我直言最容易理解,因为外部NOT容易传达所需的结果与("伦敦"或"杜塞尔多夫")相反

SELECT e_name FROM employee WHERE
    NOT (location = 'New York' OR location = 'Düsseldorf')
Run Code Online (Sandbox Code Playgroud)

这也与IN运营商很好地对应:

SELECT e_name FROM employee WHERE
    location NOT IN ('New York', 'Düsseldorf')
Run Code Online (Sandbox Code Playgroud)

然而-它可以也表示有AND:

SELECT e_name FROM employee WHERE
    (location <> 'New York' AND location <> 'Düsseldorf')
Run Code Online (Sandbox Code Playgroud)

差异取决于是否NOT同时应用于两个子句或每个子句.这是De Morgan定律的应用:

NOT (A OR B) == (NOT A) AND (NOT B)
Run Code Online (Sandbox Code Playgroud)


das*_*ght 5

一旦您添加NOT混合并召回DeMorgan的法律,两个选项都可用:

  • 您可以将查询表述为"位置不是杜塞尔多夫"和"位置不是纽约",或
  • 您可以将其表述为"不(位置是杜塞尔多夫或位置是纽约)"

最后,SQL提供了INoperator,它允许你将查询表示为"不在位置('Düsseldorf','New York')"