sql >> Databasteknik >  >> RDS >> Database

SQL ORDER BY-klausul för nybörjare

ORDER BY klausul används vanligtvis i SQL för att sortera resultaten av en fråga.

Det låter dig ange i vilken ordning resultaten returneras.

Du kan ange om resultaten sorteras i stigande eller fallande ordning. Du kan också ange flera kolumner för sortering.

Exempel

Här är ett exempel för att demonstrera ORDER BY klausul.

SELECT 
    VendorId,
    ProductName,
    ProductPrice
FROM Products
ORDER BY VendorId ASC;

Resultat:

+------------+---------------------------------+----------------+
| 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 del betyder stigande . När du använder ORDER BY sats, den är som standard stigande, så du kan utelämna ASC del om du vill.

Så vi kan också skriva frågan så här:

SELECT 
    VendorId,
    ProductName,
    ProductPrice
FROM Products
ORDER BY VendorId;

Fallande ordning

För att sortera det i fallande ordning, använd DESC .

SELECT 
    VendorId,
    ProductName,
    ProductPrice
FROM Products
ORDER BY VendorId DESC;

Resultat:

+------------+---------------------------------+----------------+
| 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          |
+------------+---------------------------------+----------------+

Ordna efter flera kolumner

Du kan ange flera kolumner att sortera efter. Detta gör att du kan ange hur raderna ska sorteras när det finns flera rader med samma värde i den första sorterade kolumnen.

Det är förmodligen lättare att visa detta med ett exempel.

SELECT 
    VendorId,
    ProductName,
    ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName DESC, ProductPrice DESC;

Resultat:

+------------+---------------------------------+----------------+
| 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          |
+------------+---------------------------------+----------------+

Om vi ​​fokuserar på de tre raderna med en VendorId av 1001 , kan vi se att det föregående exemplet returnerade produktnamnen i stigande ordning, men i det här exemplet returnerade vi dem i fallande ordning. Detta beror på att vi nominerade ProductName som den andra kolumnen i vår ORDER BY sats, och vi specificerade DESC för fallande ordning.

Den andra kolumnen träder bara i kraft om det finns dubbletter i den första ORDER BY kolumn. Om inte, är eventuella efterföljande kolumner irrelevanta när det gäller ytterligare sortering.

Om vi ​​tittar på ProductPrice kolumnen kan vi se att den här kolumnen inte hade någon effekt på sorteringen, även om vi angav ProductPrice DESC . Vi kan se att priserna alla är i stigande ordning, trots att vi insisterar på att de ska vara i fallande ordning. Anledningen till att denna kolumn inte hade någon effekt är att det inte fanns några dubbletter i den tidigare sorterade kolumnen. Därför påverkade ordningen av de två första kolumnerna resultaten, men ordningen i den tredje kolumnen inte.

Därmed inte sagt att den tredje kolumnen aldrig kommer att ha någon effekt. Om vi ​​senare infogade en annan Left handed screwdriver , men till ett annat pris, sedan ProductPrice kolumnens ordning skulle träda i kraft, på grund av att det finns dubbla värden i ProductName kolumn.

Blanda stigande med fallande

Du kan blanda varje kolumn med stigande och fallande ordning. De behöver inte alla vara likadana. Vi skulle till exempel kunna göra detta:

SELECT 
    VendorId,
    ProductName,
    ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName ASC, ProductPrice DESC;

Resultat:

+------------+---------------------------------+----------------+
| 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          |
+------------+---------------------------------+----------------+

Beställ efter kolumnalias

ORDER BY klausul accepterar kolumnalias som en kolumn som ska sorteras efter.

Vi skulle till exempel kunna göra detta:

SELECT 
    VendorId AS ID,
    ProductName AS Name,
    ProductPrice AS Price
FROM Products
ORDER BY ID DESC, Name DESC, Price DESC;

Resultat:

+------+---------------------------------+---------+
| 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   |
+------+---------------------------------+---------+

Ordna efter kolumner som inte finns i SELECT-listan

ORDER BY satsen accepterar kolumner som inte är specificerade i SELECT lista.

Med andra ord, du behöver inte välja en kolumn för att sortera efter den kolumnen.

Exempel:

SELECT
    ProductName AS Name,
    ProductPrice AS Price
FROM Products
ORDER BY VendorId DESC, Name DESC, Price DESC;

Resultat:

+---------------------------------+---------+
| 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   |
+---------------------------------+---------+

Här beställde vi efter VendorId kolumnen, även om vi inte inkluderade den i SELECT lista.

Beställ efter kolumn-ID

ORDER BY klausulen accepterar också kolumn-ID i stället för kolumnnamnet.

Vi skulle till exempel kunna göra detta:

SELECT 
    VendorId AS ID,
    ProductName AS Name,
    ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;

Resultat:

+------+---------------------------------+---------+
| 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   |
+------+---------------------------------+---------+

Detta rekommenderas dock inte.

För det första gör det frågan svårare för andra att läsa och förstå.

För det andra, om någon senare ändrade ordningen på kolumnerna i SELECT listan måste de också ändra ordningen på ORDER BY lista. Det skulle vara mycket lätt att glömma att göra detta, och sökfrågans resultat kommer att hamna i fel ordning.

Här är ett exempel på vad jag menar.

SELECT 
    ProductName AS Name,
    VendorId AS ID,
    ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;

Resultat:

+---------------------------------+------+---------+
| 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    |
+---------------------------------+------+---------+

Allt jag gjorde var att flytta ProductPrice kolumnens position i SELECT listan, och det förstörde ordningen på resultaten totalt.

Standardbeställning

I SQL, om du inte använder ORDER BY klausul, det finns ingen garanti i vilken ordning dina resultat kommer att vara. Även om det kan se ut som att din databas sorterar resultaten efter en viss kolumn, kanske detta inte är fallet.

I allmänhet utan en ORDER BY klausul, kommer data att sorteras i den ordning som den laddades in i tabellen. Men om rader har tagits bort eller uppdaterats kommer ordningen att påverkas av hur DBMS återanvänder återvunnet lagringsutrymme.

Lita därför inte på DBMS för att sortera resultaten i någon meningsfull ordning. Om du vill att dina resultat ska sorteras, använd ORDER BY klausul.

Beställa med undantag

Du kan stöta på tillfällen då du behöver inkludera ett undantag i din ORDER BY klausul.

Till exempel vill du sortera alfabetiskt efter en kolumn förutom en rad. Du kanske vill att en rad (eller flera rader) ska visas överst, medan alla återstående rader är ordnade i en viss ordning.

Lyckligtvis finns det ett enkelt sätt att göra detta. Se Hur man skriver en ORDER BY-klausul med undantag om du behöver göra detta.


  1. Hanterad ODP.NET-drivrutin visas inte i dialogrutan Datakälla

  2. Hur stänger man inaktiva anslutningar i PostgreSQL automatiskt?

  3. BESTÄLL EFTER IN-värdelistan

  4. SQL Server 2008 Tom sträng mot utrymme