这是我正在使用的表
——写一个查询来显示那些有字母"或";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"时总是添加括号。和"或",以使意图清楚。
短路评定;最小的评价;麦卡锡评价