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也不会返回每条记录吗?
正确的答案是第二个,因为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时的行和行.
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |