【问题标题】:Sql or operatorSql 或运算符
【发布时间】:2016-01-17 03:29:51
【问题描述】:

我有一些我不明白的地方。 如果我的桌子是这样的:

name   age 
----   ----
din     18
mari    35

我做了这个查询:

select * from usernames
where age < 20 or name not like 'din'

所有的表格和行都打印出来了,我的目标是打印那些不被称为“din”且年龄在 20 岁以下的人。

谁能告诉我我的错误在哪里?

我在这里问了另一个问题 .. 对此感到抱歉。

【问题讨论】:

  • 将 OR 更改为 AND。
  • @Alicia 我不寻找答案,我寻找解释。如果或在一个 False 和一个 True 时执行 - 它不会打印 20 岁以下的年龄,但会打印所有不叫 din 的名字,对吗?还是我错了?
  • 但是你已经在问题中用“and”说了“谁没有被称为 'din' 并且未满 20 岁”。所以...@Alicia 可能认为 OR 是一个简单的错误。
  • @MrLister 对不起。但我还是不明白。为什么不工作?
  • 也许你被第二条的not弄糊涂了。如果写成这样是否更有意义:where age &lt; 20 or name like 'mari'

标签: sql operator-keyword


【解决方案1】:

解释:

where age < 20 or name not like 'din'

分解为:

where <something> or <something else>

对于每一行,将评估 or 表示如果其中一个为真,则结果将为真。对于要选择的行,只需其中一个为真。

在您的示例中,第一行满足age &lt; 20 条件。测试的其余部分并不重要(它评估为假),因为我们已经有了一个真。对于age &lt; 20,第二行评估为假,但对于name not like 'din',评估为真,因此如上所述,如果 OR 的任一侧为真,则结果为真,因此在结果中返回第 2 行。

这就是返回两行的原因。

将此数据添加到您的表格中以帮助说明:

name   age 
----   ----
din     28  (both sides false)
mari    15  (both sides true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2011-08-25
    • 2020-10-03
    • 2019-05-03
    • 2010-11-02
    • 1970-01-01
    相关资源
    最近更新 更多