ORDER BY
句は、クエリの結果を並べ替えるためにSQLで一般的に使用されます。
結果が返される順序を指定できます。
結果を昇順で並べ替えるか、降順で並べ替えるかを指定できます。並べ替え用に複数の列を指定することもできます。
例
ORDER BY
を示す例を次に示します。 条項。
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId ASC;
結果:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | | 1002 | Sledge Hammer | 33.49 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | +------------+---------------------------------+----------------+
ASC
一部は昇順を意味します 。 ORDER BY
を使用する場合 句はデフォルトで昇順であるため、ASC
を省略できます。 必要に応じて分割してください。
したがって、次のようなクエリを作成することもできます。
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId;
降順
降順で並べ替える 注文するには、DESC
を使用します 。
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC;
結果:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
複数の列で並べ替え
並べ替えに使用する複数の列を指定できます。これにより、最初に並べ替えられた列に同じ値の行が複数ある場合に、行を並べ替える方法を指定できます。
例を使ってこれを示す方がおそらく簡単です。
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName DESC, ProductPrice DESC;
結果:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------------+---------------------------------+----------------+
VendorId
を使用して3つの行に注目すると 1001
の 、前の例では製品名が昇順で返されたことがわかりますが、この例では製品名を降順で返しました。これは、ProductName
を指定したためです。 ORDER BY
の2番目の列として 句、およびDESC
を指定しました 降順。
2番目の列は、最初のORDER BY
に重複がある場合にのみ有効になります 桁。そうでない場合は、さらに並べ替える限り、後続の列は関係ありません。
ProductPrice
を見ると 列を見ると、ProductPrice DESC
を指定したにもかかわらず、この列が並べ替えに影響を与えていないことがわかります。 。価格はすべて降順である必要があると主張しているにもかかわらず、価格はすべて昇順であることがわかります。この列が効果がなかった理由は、以前にソートされた列に重複がなかったためです。したがって、最初の2つの列の順序は結果に影響しましたが、3番目の列の順序は影響しませんでした。
これは、3番目の列がまったく効果がないということではありません。後で別のLeft handed screwdriver
を挿入した場合 、ただし価格が異なる場合は、ProductPrice
ProductName
に重複する値があるため、列の順序が有効になります 列。
昇順と降順の混合
各列を昇順と降順で混在させることができます。それらはすべて同じである必要はありません。たとえば、次のようにすることができます:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName ASC, ProductPrice DESC;
結果:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
列エイリアスによる順序
ORDER BY
句は、順序付けされる列として列エイリアスを受け入れます。
たとえば、次のようにすることができます:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY ID DESC, Name DESC, Price DESC;
結果:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
SELECTリストにない列による順序
ORDER BY
句は、SELECT
で指定されていない列を受け入れます リスト。
つまり、列で並べ替えるために列を選択する必要はありません。
例:
SELECT
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY VendorId DESC, Name DESC, Price DESC;
結果:
+---------------------------------+---------+ | Name | Price | |---------------------------------+---------| | Bottomless Coffee Mugs (4 Pack) | 9.99 | | Straw Dog Box | 55.99 | | Chainsaw | 245.00 | | Sledge Hammer | 33.49 | | Long Weight (green) | 11.99 | | Long Weight (blue) | 14.75 | | Left handed screwdriver | 25.99 | +---------------------------------+---------+>
ここでは、VendorId
で注文しました SELECT
に含めなかった場合でも、列 リスト。
列IDで並べ替え
ORDER BY
句は、列名の代わりに列IDも受け入れます。
たとえば、次のようにすることができます:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
結果:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
ただし、これはお勧めしません。
まず、他の人がクエリを読んで理解するのが難しくなります。
次に、誰かが後でSELECT
の列の順序を変更した場合 リストの場合、ORDER BY
の順序も変更する必要があります リスト。これを忘れるのは非常に簡単で、クエリの結果は間違った順序になってしまいます。
これが私の言いたいことの例です。
SELECT
ProductName AS Name,
VendorId AS ID,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
結果:
+---------------------------------+------+---------+ | Name | ID | Price | |---------------------------------+------+---------| | Straw Dog Box | 1003 | 55.99 | | Sledge Hammer | 1002 | 33.49 | | Long Weight (green) | 1001 | 11.99 | | Long Weight (blue) | 1001 | 14.75 | | Left handed screwdriver | 1001 | 25.99 | | Chainsaw | 1003 | 245.00 | | Bottomless Coffee Mugs (4 Pack) | 1004 | 9.99 | +---------------------------------+------+---------+
ProductPrice
を移動するだけでした SELECT
での列の位置 リスト、そしてそれは結果の順序を完全に台無しにしました。
デフォルトの順序
SQLでは、ORDER BY
を使用しない場合 条項、結果がどのような順序になるかは保証されません。見た目 データベースが特定の列で結果を並べ替えているように、これは実際には当てはまらない場合があります。
通常、ORDER BY
なし 句では、データはテーブルにロードされた順序で並べ替えられます。ただし、行が削除または更新された場合、DBMSが再利用されたストレージスペースを再利用する方法によって順序が影響を受けます。
したがって、DBMSに依存して結果を意味のある順序で並べ替えないでください。結果を並べ替える場合は、ORDER BY
を使用します 条項。
例外のある注文
ORDER BY
に例外を含める必要がある場合があります 句。
たとえば、1行を除く列のアルファベット順に並べ替えたいとします。 1行(または複数行)を一番上に表示し、残りのすべての行を特定の順序で並べ替えることができます。
幸い、これを行う簡単な方法があります。これを行う必要がある場合は、例外を含むORDERBY句を作成する方法を参照してください。