当我看到这个sql语句的时候,发现子查询中有个1
-- 2 、查询没有销售量的图书信息
SELECT b.bookid,b.bookname,b.authorname,b.price,b.inventory
FROM book b
WHERE NOT EXISTS(SELECT 1 FROM orderitem o WHERE b.bookid = o.bookid);
当我们单独把子查询的语句拿出来执行时
EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
原因
子查询中的 “1” 被用作占位符。“1” 的实际值并不重要,它可以是任何常量值,甚至是列名,但通常写成 “1” 是为了简单和约定俗成。
这个子查询的目的是检查 “orderitem” 表中是否存在与 “book” 表中当前 “bookid” 相匹配的记录。如果子查询返回任何行(意味着某本书在 “orderitem” 表中有匹配的记录),则外部查询将从最终结果集中排除该书。
总结一下,带有 “SELECT 1” 的子查询被用来确定 “book” 表中的每本书是否有任何关联的记录存在于 “orderitem” 表中。具体值 “1” 并没有用于任何有意义的计算;它只是一个占位符,使得子查询在语法上是有效的。