我有一些我不明白的东西。 如果我的表是这样的:
select * from usernames
where age < 20 or name not like 'din'
我做了这个查询:
{{1}}
所有的表格和行都打印出来,我的目标是打印那些不被称为'din'并且未满20岁的人。
有人能告诉我我的错误在哪里吗?
我在这里问了另一个问题......抱歉。
答案 0 :(得分:4)
说明:
where age < 20 or name not like 'din'
分解为:
where <something> or <something else>
对于每一行,&lt;的东西&gt;和&lt;别的&gt;将被评估。 or
表示如果两者都为真,则结果为真。对于要选择的行,只需要其中一个为真。
在您的示例中,第一行符合age < 20
条件。测试的其余部分并不重要(并且评估为假)因为我们已经有了一个真实的。对于age < 20
,第二行的计算结果为false,但对于name not like 'din'
,结果为true,如上所述,如果OR的任一侧为真,则结果为true,因此在结果中返回第2行。
这就是返回两行的原因。
将此数据添加到您的表格中以帮助说明:
name age
---- ----
din 28 (both sides false)
mari 15 (both sides true)