为什么在SQL语句中 不可以对同一个属性进行逻辑“与”的等值运算
关于题主这个问题,其实对同一个属性(字段)是可以使用“与逻辑”进行等值运算的,要讲清楚这个我们首先得弄清楚“与逻辑”的内涵,“与逻辑”表示逻辑运算符“and”两边的表达式都成立为“真”,至少一个不成立即为“假”。下面用MySQL实验说明一下:
先创建“动物表”,插入狗和猫两条记录
先筛选出即是狗又是猫的记录(使用与逻辑),返回结果2
select * from animal where animal='dog' and animal='cat';
可以看到返回空记录集,因为一个动物不可能同时是“狗”和“猫”。
跟着再看看
筛选出即是狗还是狗的记录(使用与逻辑),返回结果3
select * from animal where animal='dog' and animal='dog';
结果返回一条为狗的记录,因为一个动物它是狗又是狗,尽管讲法啰嗦,但是逻辑没问题,因此有记录返回,看吧同一个属性还是可以使用“与逻辑”的等值运算的,只不过这种做法有些画蛇添足。
最后看看
筛选出是狗又或者是猫的记录(使用或逻辑),返回结果4
select * from animal where animal='dog' or animal='cat';
结果返回两条记录,因为只要动物是狗或者是猫就可以被筛选出来,表中正好猫狗都有因此都被筛选出来了。
至于自连接当然是可以对同一个属性使用“与逻辑”等值运算的,只不过要为自连接的表的至少一方取别名这样系统才能有所区分,不至于弄混淆连接各方表的记录行和字段,因为自连接的数据来源为同一张表,数据库引擎实际是将其复制到内存里变为内容一致的两张虚拟表实施连接运算。例如下例使用自连接选出t1中每个item的value最大值:
select a.item,a.value from t1 a where not exists(
select 1 from t1 b where b.item=a.item and b.value>a.value);
可不可以这样理解 也就是说在逻辑上,同一个属性的值是唯一的 就好像你说的例子 只要是猫就不能是狗 或者像我书上的例子 你的课程为001就不能是002
是这样,每个具体的值都是一个确定的值,它不可能有两种以上的值,就像1就是1,它不可能是2、3或其它什么值一样,否则整个世界就乱套了。
2016-11-03