为什么我的查询中的AND子句被忽略(非常简单的SQL查询)

  • 本文关键字:查询 非常 SQL 简单 子句 AND sql
  • 更新时间 :
  • 英文 :


这是我正在使用的表

——写一个查询来显示那些有字母"或";ph">

这就是我的解决方案:

SELECT *
FROM students
WHERE (student_name LIKE '%ae%' OR student_Name LIKE '%ph%' AND age != 19)

结果输出:

这是我从课堂笔记中得到的实际正确的解决方案:

SELECT *
FROM students
WHERE (student_name like '%ae%' OR student_name like '%ph%') AND age != 19;

正确的输出结果显示没有记录

我不明白我的查询如何返回2个年龄为19岁的记录,但是在正确的解决方案中,我从我的课堂笔记中得到了正确的返回,并且没有19岁的年龄。OR原因似乎工作正常,但由于某种原因,我的AND条件没有对记录应用。

如有任何帮助,不胜感激

这是操作符优先级的一个教训。

你可能对标准算术"1 + 2 × 3"很熟悉。给出7,而不是9,因为"2 × 3"首先计算。如果我们加上括号,(1 + 2)× 3&;给出9,因为"(1 + 2)">

同样适用于带有"and"的布尔运算。和";or"- "one_answers"除非加上括号,否则先计算

So "(student_name LIKE '%ae%' OR student_name LIKE '%ph%' AND age != 19)"将首先分组"student_Name LIKE '%ph%' AND age != 19"进入一种状态;然后,它将匹配为真,<;student_name LIKE '%ae%'"是真的——学生有"好"字;他们的名字可以是任何年龄

当您添加圆括号时,"或"首先计算,它将匹配"(student_name LIKE '%ae%'或student_name LIKE '%ph%')">"age != 19"是真的-不管名字是什么,19岁的人都不允许。

由于这是一个容易犯的错误,我建议在混合"one_answers"时总是添加括号。和"或",以使意图清楚。

短路评定;最小的评价;麦卡锡评价

最新更新