在主键上调用SELECT*而在SQL中调用属性

Ale*_*lex 3 mysql sql select primary-key

我目前正在参加决赛,并对其中一个练习问题提出疑问.

问题是:

R(A,B)在属性A为主键的关系上考虑以下两个SQL查询.

查询1: SELECT * FROM R WHERE B > 50 OR B <= 50

查询2: SELECT * FROM R WHERE A > 50 OR A <= 50

哪个是对的?

一个.查询1和2返回所有记录R

湾 查询2返回所有记录R,但查询1可能不会

官方回答说b是正确的,但我想知道原因.我知道主键必须是唯一的,这意味着查询2应该返回每条记录.但即使存在重复B值,查询1也不会返回每条记录吗?

fth*_*lla 6

正确的答案是第二个,因为A是主键而主键不能为空,所以

A > 50 OR A <= 50
Run Code Online (Sandbox Code Playgroud)

将永远是真实的,而以下:

B > 50 OR B <= 50
Run Code Online (Sandbox Code Playgroud)

如果B为NULL,则可能为NULL

NULL > 50 OR NULL <= 50 ---> NULL
Run Code Online (Sandbox Code Playgroud)

并且不会返回B为null时的行和行.