永发信息网

sql 问题,大神来帮忙。 我mysql有三张表,三表的count条数分别为2224,.....

答案:2  悬赏:80  手机版
解决时间 2021-02-07 07:39
我mysql有三张表,三表的count条数分别为2224,175,7.为什么我把他们连起来查的话查出来的条数是这三个表各自条数的乘积?

SELECt COUNT(*) FROM aaa (2224条)
SELECt COUNT(*) FROM bbb (175条)
SELECt COUNT(*) FROM ccc (7条)

SELECt COUNT(*) FROM aaa,bbb,ccc (2724400条)

能否告诉我为什么连起来查出来的是前边三个数的乘积呢? 我这种查法是不是关联查询呢?
最佳答案
必须是乘积啊,因为你得到了笛卡尔积,笛卡尔积是什么呢?就是所有行的无条件匹配。
假如你是aaa和bbb这样来一下,我们看这个select出来的是什么。
首先aaa的第一行,右边join bbb的第一行,完了吗?没有,接下来还有bbb的第二行,第三行……直到最后一行,所以先是得到了aaa的第一行和bbb的所有行的连接,然后还有aaa的第二行……直到最后一行,那么最后就得到了aaa和bbb的全连接,记录数自然是行数相乘(注意实际上不一定是按照单独查询aaa的行号来匹配,数据库按照自己的方法来全连接)。
那么很显然,你3个表全连接就是行数之积了。
你在你的最后一句select里面,加上where条件,比如aaa的某字段=bbb的某字段,bbb的某字段=ccc的某字段,就相当于从这个全连接里过滤出你要的组合了。
一般情况下要注意避免这样的全连接,要有目的的使用left join或者right join,因为系统可能先生成笛卡尔积,这样会大大占用系统资源,当此临时结果过大,会将临时表写入磁盘而不是内存(因为装不下),就会极大影响查询效率。
全部回答
我。。知。。道 加。。我。。私。。聊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
8G内存,玩gta5为什么视讯记忆体只有1024M?
正大家园这个地址在什么地方,我要处理点事
大专升本科的本科毕业证书和本科生毕业的证书
防弹少年团《仅一天》这首歌 MV版本1:40 金泰
【迷失太空】迷失太空说的是什么
风景轩这个地址在什么地方,我要处理点事
盆栽长春花怎么施肥?自制肥料可以吗
龙嘉尚城怎么去啊,有知道地址的么
业之峰广告设计装饰有限公司地址有知道的么?
生物园西路/高新二路(路口)地址在什么地方,
驰载名车汇江川直销店地址在哪,我要去那里办
苹果手机一般能用几年:`
为什么阿拉伯人不能团结起来
H麦精品童装店在哪里啊,我有事要去这个地方
事业单位有下列( )情形之一的,应当进行资
推荐资讯
江南四季酒店-大堂地址有知道的么?有点事想
昌平昌盛园煤气站电话?
官楼酒业泰州总经销这个地址在什么地方,我要
孩子每次发烧都会哭说想念去世的外婆?
定昌烧腊店这个地址在什么地方,我要处理点事
南平茫荡山海拔
竖井方电缆套什么定额
每年的公积金缴费基数下限 是指的总数,还是个
我起诉离婚,我在外地房屋租赁合同和临时暂住
三滴水偏旁右边胃肠的胃念什么字
浙仑海外旅行社地址在什么地方,我要处理点事
640px * 100px的图片大还是320px * 50px的图
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?