比较两个SQL查询,它们会返回相同的结果吗?

时间:2017-07-28 11:35:18

标签: sql oracle

我有以下查询:

SELECT *
FROM   CustomerShip
LEFT OUTER JOIN
                (SELECT DISTINCT b.ShipSeq AS shipSeq
                 FROM   Orders a,
                        CustomerShip b
                 WHERE  a.OrderId IN (SELECT OrderId
                                      FROM   Orders
                                      WHERE  CustomerId = @CustomerId
                                      AND    OrderType <> 'A')
                 AND    b.CustomerId = @CustomerId
                 AND    b.ShipSeq = a.CustShip
                 AND    OrderStatus <> 'C'
                 GROUP BY b.ShipSeq) i
WHERE  CustomerId = @CustomerId
AND    (Address NOT LIKE '%RETAIL%STORE%')
AND    ShipSeq = i.ShipSeq(+)
ORDER BY ShipTo DESC, OrderDate DESC;

我很困惑为什么会有LEFT OUTER JOIN?这个查询不会返回相同的结果吗?

SELECT *
FROM   CustomerShip
WHERE  CustomerId = @CustomerId
AND    (Address NOT LIKE '%RETAIL%STORE%')
ORDER BY ShipTo DESC, OrderDate DESC;

我对SQL比较新,但在第一个查询返回第二个查询不会记录的其他记录的情况下会是什么情况?

2 个答案:

答案 0 :(得分:0)

两个查询都会从Customership表中返回相同的记录集,但它们不会返回相同的信息。

第一个查询将从“i”查询返回CustomerShip + shipseq列中的所有列。 第二个查询只返回CustomerShip列。

答案 1 :(得分:0)

两个查询都返回相同的输出。但是第一个查询正在查找所有已发货的订单并使用订单表进行检查,其中ordertype&lt;&gt; A(虽然不确定这个含义)并确保已发货的记录的订单放在订单表中