0
Select 
    d.CompanyName, c.SubTotal, b.Weight 
from 
    ProductAW b 
JOIN 
    SalesOrderDetail a ON a.ProductID = b.ProductID 
JOIN 
    SalesOrderHeader c ON c.SalesOrderID = a.SalesOrderID 
JOIN 
    CustomerAW d ON d.CustomerID = c.CustomerID 
WHERE
    d.CompanyName IN ('Good Toys', 'Transport Bikes') 
ORDER BY 
    c.SubTotal ASC;

// 出力

CompanyName        SubTotal    Weight
Transport Bikes     602.19     13213.08
Transport Bikes     602.19        88.00
Good Toys           880.35      1061.40
Good Toys           880.35       988.83

クエリ #2:

SELECT 
    d.CompanyName, c.SubTotal, b.Weight 
FROM 
    ProductAW b 
JOIN 
    SalesOrderDetail a ON a.ProductID = b.ProductID 
JOIN 
    SalesOrderHeader c ON c.SalesOrderID = a.SalesOrderID 
JOIN 
    CustomerAW d ON d.CustomerID = c.CustomerID 
WHERE 
    d.CompanyName IN ('Good Toys', 'Transport Bikes') 
ORDER BY 
    c.SubTotal DESC;

結果:

CompanyName     SubTotal    Weight
Good Toys         880.35     1061.40
Good Toys         880.35      988.83
Transport Bikes   602.19    13213.08
Transport Bikes   602.19       88.00

両方のクエリの違いは、句のASCandDESCキーワードのみです。ORDER BY

Weight列も でソートされる理由を説明してくださいSubTotal

乾杯、

4

3 に答える 3

3

結果は同じです。最初のクエリでは結果が昇順で表示され、2 番目のクエリでは結果が降順で表示されているため、レコードの順序が変更されているだけです。

Update Weight 列はSubTotalと 一緒に並べ替えられていません。両方が並べ替えられた順序で表示されているのは単なる偶然です。そして、それを確認するには、別のレコードを挿入してクエリ結果をテストするだけです。たとえばTransport Bikes 602.19 222222.00、この新しく追加されたレコードは、全体の順序を歪めweightますが、それは保証できます。

于 2013-07-14T10:00:06.147 に答える
3

重量列はソートされません。それらの順序は未定義です。それらがソートされているように見えるのは単なる偶然です。

データベース エンジンの実装によっては、並べ替え順序が明示的に定義されていない場合、行がテーブルに挿入された順序で表示される場合があります。か否か。それは本当に実装に依存します。

一般に、列の順序を明示的に指定していない場合は、列の順序について仮定するべきではありません。

最初のクエリを示した順序にしたい場合、およびその順序を明確に定義ORDER BYするには、句を次のように変更します。

ORDER BY c.SubTotal, Weight DESC

次に、2 番目のクエリで順序を逆にしたい場合は、次を使用します。

ORDER BY c.SubTotal DESC, Weight

ASC はオプションであることに注意してください。通常、ASC は順序付けのデフォルトの方向です。

于 2013-07-14T10:05:00.603 に答える
1

weight列はソートされていません。並べ替えはSubtotal昇順または降順で行われました。ここでは何も問題はありません。

于 2013-07-14T10:02:45.847 に答える