Sql 什么';这两个查询之间的区别是什么?

Sql 什么';这两个查询之间的区别是什么?,sql,oracle,Sql,Oracle,您能否解释一下为什么在Oracle中,此查询会返回以下内容: SELECT discounts.DiscountId, discounts.ShortDisplay, discounts.Display, discounts.Description, BillDetails.BillId, BillDetails.BillRow, BillDetails.BillId AS BillIdTax,

您能否解释一下为什么在Oracle中,此查询会返回以下内容:

SELECT discounts.DiscountId,
       discounts.ShortDisplay,
       discounts.Display,
       discounts.Description,
       BillDetails.BillId,
       BillDetails.BillRow,
       BillDetails.BillId  AS BillIdTax,
       BillDetails.BillRow AS BillRowTax,
       BillDetails.FEDERAL_TAX_POSTPAID,
       BillDetails.TOTAL_RATE
FROM   discounts
       INNER JOIN BillDetails
         ON discounts.DiscountId = BillDetails.DiscountId
       RIGHT OUTER JOIN BillDetailsTax
         ON BillDetails.BillId = BillDetailsTax.BillId
            AND BillDetails.BillRow = BillDetailsTax.BillRow
WHERE  BillDetails.BillId = 602237 
这一个什么都没有:

SELECT discounts.DiscountId,
       discounts.ShortDisplay,
       discounts.Display,
       discounts.Description,
       BillDetails.BillId,
       BillDetails.BillRow,
       BillDetails.BillId  AS BillIdTax,
       BillDetails.BillRow AS BillRowTax,
       BillDetails.FEDERAL_TAX_POSTPAID,
       BillDetails.TOTAL_RATE
FROM   BillDetails,
       BillDetailsTax BillDetails,
       discounts
WHERE  BillDetails.BillRow = BillDetailsTax.BillRow(+)
       AND BillDetails.BillId = BillDetailsTax.BillId(+)
       AND BillDetails.DiscountId = discounts.DiscountId
       AND BillDetails.BillId = 602237 
这两个查询是否不相似


谢谢大家!

添加加号的列是“外侧”。在第二个查询中,(+)被添加到BillDetailsTax.BillRow。这意味着允许缺少
BillDetailsTax
中的值


因此,本质上,第二个查询是
BillDetailsTax
上的
LEFT-OUTER-JOIN
,第一个查询是
BillDetailsTax
上的
RIGHT-OUTER-JOIN


我认为第二个问题更有意义。它不返回任何内容,因为不存在ID为602237的票据和折扣。

堆栈溢出不是查询分析服务。关闭此问题是不合理的。关于Oracles连接语法与ANSI joni语法的区别,这是一个非常有效的问题。因此,本质上,第二个查询是
BillDetailsTax
上的
LEFT-OUTER-join
,第一个查询是
BillDetailsTax
上的
RIGHT-OUTER-join
。实际上,我认为第二个查询更有意义,不会返回任何内容,因为不存在ID为602237的票据和折扣。@DanielHilgarth,你说得对,这是左右之间的问题。我必须将该查询转换为TSQL。所以它是左边,不是右边。但这个问题为什么要结束???你知道如何重新开始吗,@DanielHilgarth?我是这里的新手!:)谢谢你,丹尼尔,对我来说语法很奇怪!:)@user1986841:不仅仅是为了你;-)它实际上是一种非常古老的语法,不再真正使用。它是由Oracle在定义所谓的ANSI连接语法(这就是我们今天使用的语法)之前创建的。