SQL开发人员:添加已售出图书的数量。如果没有售出任何书籍,则必须显示零

SQL开发人员:添加已售出图书的数量。如果没有售出任何书籍,则必须显示零,sql,oracle,null,oracle-sqldeveloper,Sql,Oracle,Null,Oracle Sqldeveloper,我需要展示那些没有销售的书。总共有14本书。我只有11分。我不确定是否需要使用rollup将空值显示为0或其他内容。ISNULL在表中不起作用。下面是我试图得到的结果 select b.ISBN , b.TITLE , b.RETAIL , b.COST , round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage" , count(*) as "Book Cou

我需要展示那些没有销售的书。总共有14本书。我只有11分。我不确定是否需要使用rollup将空值显示为0或其他内容。ISNULL在表中不起作用。下面是我试图得到的结果

select  b.ISBN
    ,  b.TITLE
    ,  b.RETAIL
    ,  b.COST
    ,  round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage"  
    ,  count(*) as "Book Count" 
 from  BOOKS b   
    ,  ORDERITEMS oi
    ,  ORDERS o 
where  b.ISBN = oi.ISBN
and    oi.ORDER# = o.ORDER#  
group by(b.ISBN, b.TITLE, b.RETAIL, b.COST)
;

您的查询不会返回尚未订购的书籍的信息。您正在使用的隐含联接(在
FROM
子句中列出了多个表)用作内部联接,这意味着对于查询返回的任何数据,每本书的数据都必须存在于所有三个表中。如果数据不存在于所有表中,则需要使用外部联接返回数据:

select  b.ISBN
    ,  b.TITLE
    ,  b.RETAIL
    ,  b.COST
    ,  round(sum((b.RETAIL- b.COST)/b.COST*100),2)||'%' "Profit Percentage"  
    ,  count(*) as "Book Count" 
  from  BOOKS b   
  LEFT OUTER JOIN ORDERITEMS oi
    ON oi.ISBN = b.ISBN
  LEFT OUTER JOIN ORDERS o 
    ON o.ORDER# = oi.ORDER#
  group by(b.ISBN, b.TITLE, b.RETAIL, b.COST)