程宇寒 2024-08-23 09:46 采纳率: 73.3%
浏览 23

mysql数据库中这条sql语句让我疑惑了

mysql数据库中这条sql语句让我懵逼了,请各位小伙伴给我指点迷津
mysql数据库中有2张表,book2024表(书表)和booktype2024表(书类型表);

img

img


如下这条sql语句让我很疑惑,如下这条sql语句是我突发奇想写的,一般不会这么写,就是搞不明白为什么这么写会查到如下结果?

SELECT 
  * 
FROM
  book2024,
  booktype2024 
WHERE booktype2024.id IN (book2024.bTypeId = booktype2024.id);

img


如下这条sql语句也让我很疑惑:

SELECT 
  * 
FROM
  book2024,
  booktype2024 
WHERE booktype2024.id IN (book2024.bTypeId <> booktype2024.id);

img


如下这条sql语句也让我很疑惑:

SELECT 
  * 
FROM
  book2024,
  booktype2024 
WHERE booktype2024.id NOT IN (book2024.bTypeId <> booktype2024.id);

img

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-23 18:06
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据你提供的信息,你的数据库中有两个表:book2024(书表)和booktype2024(书类型表)。你提供的SQL语句是:

    SELECT 
      * 
    FROM
      book2024,
      booktype2024 
    WHERE booktype2024.id IN (book2024.bTypeId = booktype2024.id);
    

    这个SQL语句的结果是返回了所有book2024表和booktype2024表的笛卡尔积,即每本书都与每种书类型进行了匹配。这是因为在WHERE子句中,book2024.bTypeId = booktype2024.id是一个布尔表达式,它的结果要么是TRUE(1),要么是FALSE(0)。当book2024.bTypeId等于booktype2024.id时,结果为TRUE(1),否则为FALSE(0)。因此,IN操作符实际上是在检查booktype2024.id是否等于1或0,而这两个值都是有效的id,所以所有的书籍都被选中了。

    如果你想要查询的是每本书对应的书类型,你应该使用内连接(INNER JOIN)来实现,如下所示:

    SELECT 
      * 
    FROM
      book2024
    INNER JOIN booktype2024 ON book2024.bTypeId = booktype2024.id;
    

    这个SQL语句将只返回那些在book2024表中的bTypeId与booktype2024表中的id相匹配的记录。

    评论

报告相同问题?

问题事件

  • 修改了问题 8月23日
  • 创建了问题 8月23日