2つの列で商品テーブルを並べ替えたい:prod_price
およびprod_name
。
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
ここでソートはどのように行われますか?最初にprod_price
その後prod_name
。また、上記のクエリはこれとどのように異なりますか:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_name;
私の製品表は次のとおりです。
CREATE TABLE Products
(
prod_id char(10) NOT NULL ,
vend_id char(10) NOT NULL ,
prod_name char(255) NOT NULL ,
prod_price decimal(8,2) NOT NULL ,
prod_desc text NULL
);
ORDER BY
でのソートは、最初の列で実行され、次に指定されたステートメントの追加の各列で実行されます。
たとえば、次のデータを考慮してください。
Column1 Column2
======= =======
1 Smith
2 Jones
1 Anderson
3 Andrews
クエリ
SELECT Column1, Column2 FROM thedata ORDER BY Column1, Column2
最初にColumn1
のすべての値でソートします
そして、Column2
で列をソートして、これを生成します。
Column1 Column2
======= =======
1 Anderson
1 Smith
2 Jones
3 Andrews
言い換えると、データは最初にColumn1
順序でソートされ、次に各サブセット(Column1
の値を持つ1
行)が2番目の列の順にソートされます。
投稿した2つのステートメントの違いは、最初のステートメントの行が最初にprod_price
(価格順、最低から最高)でソートされ、次に名前の順にソートされることです(2つのアイテムが同じ価格で、名前のアルファ値が低いものが最初にリストされますが、2番目は名前順にのみソートされます(つまり、価格に関係なくprod_name
に基づいて価格が表示されます)。
結果は、ORDER BY句に含まれる列の数だけ、最初の列、2番目の列の順に並べられます。結果を降順に並べ替える場合、ORDER BY句では、関連する列の名前または番号の直後にDESCキーワードを使用する必要があります。
この例をご覧ください
SELECT first_name, last_name, hire_date, salary
FROM employee
ORDER BY hire_date DESC,last_name ASC;
順番に注文します。 Hire_Dateを最初に注文し、次にHire_DateでLAST_NAMEします。
はい、ソートは異なります。
ORDER BY
リストは順番に適用されます。
後のアイテムは、前のステップで残ったピアのみを注文します。
なぜtryだけではありませんか?
はい、ソートの方法は異なります。最初のシナリオでは、列1に基づく注文、さらに列1に基づいてcolmun2をソートするプロセスに加えて、2番目のシナリオでは、列1のみに基づいて完全に注文します...簡単な例を続行してください... uが取得されます早く..
データベースのサイズに依存します。
SQLはSET理論に基づいています。テーブルを照会するときに本質的に使用される順序はありません。
したがって、最初のクエリを実行する場合、最初に製品価格で並べ替え、次に製品名で並べ替えます。価格カテゴリに重複がある場合、たとえば20ドルとすると、それらの重複を名前で並べ替えて、常に維持しますクエリを実行すると、常に同じ順序で同じ結果セットが返されます。
2番目のクエリを実行する場合、名前のみで順序付けされるため、同じ名前の2つの製品が(何らかの奇妙な理由で)ある場合、クエリの実行後に順序が保証されません。