mysql的左连接疑问

1,学生表student的gradeid字段。里面这个字段数据7.8行,但这个字段的数据全部就是null!
2,年级表grade的gradeid字段。里面的数据是1.2.3.4。4行。【还有个gradename字段也是4行数据一年级,二年级,三年级,四年级】

图一,我这么查询确实查出来了,左表为学生表。没毛病啊也。
图二,我调换了一下表的位置,左表为年级表。为啥啥也没显示啊。空空如也?求解。不应该啊。
不是只有内连接才不显示null吗?
咋回事啊。是我where的问题吗。
s.name叫小红红没问题啊。【查询学生表中叫小红红人的年级是啥。】
不理解为啥!你哪怕连接不上不应该也得全部显示个null吗!这是左连接,又不是内连接。
图三:按照评论老哥说的删除where,确实显示出来了!
可问题我得按照条件查询啊。
你这么整,不就错了吗。这是什么原理。求解答。不太理解卫生反着来。就啥也不显示了。不应该null吗

img

img


img

看看学生表小红花这条记录的gradeid的值是多少?如果是null就没有数据
把where条件删除,数据就出来了。

源于chatGPT仅供参考

根据你的描述,你遇到了一个关于 MySQL 左连接的问题。在你的查询中,当左表为学生表时,查询结果正确显示了数据,但是当左表为年级表时,查询结果却没有显示任何数据。

这个问题的原因可能是你在查询中使用了 WHERE 条件,导致只有符合条件的数据才被返回。在你的情况下,当左表为学生表时,WHERE 条件是 `s.name = '小红红'`,所以只有名字为 '小红红' 的学生会被返回。然而,当左表改为年级表时,由于年级表没有与 WHERE 条件匹配的数据,所以查询结果为空。

在使用左连接时,确实会显示 NULL 值,但是如果在查询中添加了 WHERE 条件,只有满足条件的结果会被返回,其他记录将被过滤掉。这就解释了为什么你在左连接中看不到 NULL 值。

如果你希望查询返回所有年级表中的数据,并且根据条件筛选学生表中的数据,可以尝试将 WHERE 条件移动到 JOIN 条件中,例如:

```sql
SELECT g.gradename, s.name
FROM grade g
LEFT JOIN student s ON g.gradeid = s.gradeid AND s.name = '小红红';

这样,即使没有与条件匹配的学生数据,也会显示年级表的相关数据,并且学生名字不匹配的地方会显示 NULL 值。

希望这个解答能够帮助你理解为什么在特定情况下查询结果为空。如果有其他问题,请随时提问。

```

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632