为什么在SQL语句中 不可以对同一个属性进行逻辑“与”的等值运算

例如要解决这个问题可以采用自表连接但是还是想问问为什么不行是SQL语句的执行的步骤原因吗... 例如要解决这个问题可以采用自表连接 但是还是想问问为什么不行 是SQL语句的执行的步骤原因吗 展开
 我来答
tjrmgs
2016-11-04 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1043万
展开全部

关于题主这个问题,其实对同一个属性(字段)是可以使用“与逻辑”进行等值运算的,要讲清楚这个我们首先得弄清楚“与逻辑”的内涵,“与逻辑”表示逻辑运算符“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
展开全部
不是太明白你的意思,可以举个例子吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式