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

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日

悬赏问题

  • ¥15 c++的教材订购系统的订购模块显示运行不出来
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值