Discuss / SQL / 为什么最后选择题的最后一个选项执行出来是这样的?60和95改为了85和95

为什么最后选择题的最后一个选项执行出来是这样的?60和95改为了85和95

Topic source

毛线qwe

#1 Created at ... [Delete] [Delete and Lock User]
SELECT * FROM students WHERE 85 <= score <= 95;

id    class_id    name    gender    score

1    1                小明      M            90
2    1小红F95
3    1小军M88
4    1小米F73
5    2小白F81
62小兵M55
72小林M85
83小新F91
93小王M89
103小丽F88

努力Pro

#2 Created at ... [Delete] [Delete and Lock User]

WHERE 85 <= score <= 95,意思是score >=85 or score <=95

Dominic·KK

#3 Created at ... [Delete] [Delete and Lock User]

这句话在mysql中执行会返回全部学生信息,这句的判断语法是错的,但是mysql不会对其进行错误检查,而是按照布尔值连续比较的形式进行计算,WHERE 85 <= score <= 95就等价于WHERE (85 <= score) <= 95,其中(65<=score)会返回一个布尔值列表[1 1 1 1 1 0 1 1 1 1],依次表示了每个学生成绩是否>=85,大于是1(True) 小于是0(False),这个布尔值再与常数90比较,此时这个布尔值列表会被视作整数列表,0和1都满足<=95的条件,因此返回所有数据。原题中的WHERE 60 <= score <= 90同理。


  • 1

Reply